# 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**