# Lungify v.1.0 > Вынесены даги отдельно от workflow. Изменена структура конфигов. Общие конфиги лежат в dags/configs. Уникальные конфиги лежат рядом с дагами. ## Project Structure ``` ├── dicom_adapter # Dicom adapter implemented using Orthanc PACS. │ ├── dicom/rest.py # src code for python callbacks │ ├── .env │ ├── docker-compose.yaml │ ├── Dockerfile │ ├── orthanc.json # main Orthanc config │ └── requirements.txt ├── models # all AI models used in service │ ├── classification_pathology_saliency │ ├── monochrome_classifier │ └── orientation_classifier ├── dags # all airflow dags here | ├── configs | ├── demostand | ├── mosmed | └── pilots ├── workflow # tool for dags pipeline | ├── docker | | ├── tritonclient_wheels | | ├── Dockerfile | | └── requirements.txt | ├── certs | ├── logs | ├── airflow.env | ├── docker-compose.yaml | └── plugins # additional python modules | ├── dicom_ | ├── exceptions | ├── callbacks # callback when dags finish study on success and fail | ├── inference | ├── transforms # interface for transform implementation and some useful transforms here | ├── triton # triton client implementation, used to communicate with models | └── utils # function tools ``` ## Предварительно Создать нетворк Lungify ```docker network create Lungify``` ## Настройка Dicom adapter'а > Модуль принимает исследования от PACS'а Переходим в dicom adapter `cd dicom_adapter` Открываем .env файл смотрим такие переменные, как `ADAPTER_PATH`, `SHARED_RESEARCH_DIR`. `ADAPTER_PATH` - путь до dicom adapter на лкоальной машине `SHARED_RESEARCH_DIR` - то, куда кладет адаптер исследование, которое получил. (от туда будет его забирать airflow) `your_path_to_Lungify/Lungify/payloads/tmp` Находясь внутри dicom adapter'а запускаем следующие команды ``` docker build . -t harbor.stageogip.ru/lungify/adapter:test export IMAGE_TAG=test docker-compose up -d ``` **Проверяем, что все работает нормально** ``` docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 994fdf11e988 harbor.stageogip.ru/lungify/adapter:test "/docker-entrypoint.…" 2 seconds ago Up 1 second 0.0.0.0:4242->4242/tcp, :::4242->4242/tcp, 0.0.0.0:8042->8042/tcp, :::8042->8042/tcp dicom_adapter cb03973a3883 postgres:12.1 "docker-entrypoint.s…" 2 seconds ago Up 2 seconds 5432/tcp postgres_storage docker logs dicom_adapter .... Ae2Dag mappings : { "Lungify": "master_mosmed_lung", "LungifyDev": "develop_mosmed_lung", "LungifyTest": "test_mosmed_lung", "LungifyTPAK": "master_testmosmed_lung", "LungifyDemoDev": "develop_demostand_lung", "LungifyDefault": "mosmed_lung", "LungifyDemoProd": "master_demostand_lung", "AlmetPilot": "master_pilots_almet_lung" } ... ``` Если есть такие aet'ы, то все хорошо. Поздравляю, dicom adapter настроен корректно. Для спокойствия души можно перейти на `localhost:8042` и увидеть web-морду **Trouble shooting** Если возникла такая ошибка ``` error checking context: 'no permission to read from '/home/madina/Workspace/Lungify/dicom_adapter/orthanc_storage/pg_data/data/pg_logical/replorigin_checkpoint''. ``` то удаляем папку orthanc_storage из под рута ## Настройка worflow и дагов Переходи в workflow ``` pwd /home/madina/Workspace/Lungify cd workflow ``` ### Создание .env в корне workflow ``` APP_PATH=path_to_Lungify PAYLOADS_PATH=${APP_PATH}/payloads TMP_PATH=${PAYLOADS_PATH}/tmp CREDENTIAL_PATH=${PAYLOADS_PATH}/credentials WORKFLOW_PATH=${APP_PATH}/workflow CERTS_PATH=${WORKFLOW_PATH}/certs DAGS_PATH=${APP_PATH}/dags CONFIGS_DIR=${DAGS_PATH}/configs LOGS_PATH=${WORKFLOW_PATH}/logs PLUGINS_PATH=${WORKFLOW_PATH}/plugins TESTS_PATH=${WORKFLOW_PATH}/tests FAILS_PATH=${APP_PATH}/fails POSTGRES_DB_PATH=${WORKFLOW_PATH}/postgres_storage PUBLIC_API=127.0.0.1 REDIS_PORT=6379 WEB_PORT=8090 FLOWER_PORT=5555 PILOT_CONFIG_PATH=/configs/development.yaml MOSMED_CONFIG_PATH=/configs/development.yaml DEMOSTAND_CONFIG_PATH=/configs/development.yaml TESTMOSMED_CONFIG_PATH=/configs/development.yaml HTTPTEST_CONFIG_PATH=/opt/airflow/dags/httptest/http_config.yaml SHARED_IN_CONTAINER=/shared ``` **ВАЖНО** ```chmod -R 777 Lungify``` ### Билдим и поднимаем ``` cd docker docker build . -t harbor.stageogip.ru/lungify/airflow:test export IMAGE_TAG=test docker-compose up -d ``` ## Тестим Скачать файл https://drive.google.com/file/d/1OvQ5KdDv2PLbSl4ZVVSQc8MuBbtU5Q4w/view?usp=sharing ~~Удалить~~ Закомментить из конфига и файла, описывающий DAG , всё, что связано с `kafka` и `telegram`. На данный момент `LungifyDefault` подтягивает `/dags/mosmed/lung.py`. От туда комментим строки, где есть упоминания Telegram и Kafka. Пример: `TELEGRAM_PARAMS`, `KAFKA_PARAMS`, `KafkaFailureCallback` и т.д. Запустить эту команду `storescu dicom_adapter 4242 IM_00685 -xs -aec LungifyDefault` ***Если storescu почему-то у вас не установлен*** > docker run --rm -it --name dcmtk --network Lungify -v path_to_file:/demo darthunix/dcmtk:latest /bin/sh Переход внуть контейнера, надо ввести эту команду > cd demo > storescu dicom_adapter 4242 IM_00685 -xs -aec LungifyDefault **NOTE** Проверить LungifyDefault (ae) и в конфиге файле в самом внизу при помощи **логов dicom adapter'a**