Приложение СМЭВ QL Сервер является компонентом Типового ПО «Витрина данных НСУД» с ядром Prostore версии 6.1 и выше. СМЭВ QL Сервер предназначен для создания и конфигурирования типового API, используемого для извлечения данных из хранилищ.
В приложении реализована следующая функциональность:
- Поддержка множественных источников данных:
- витрины под управлением Prostore;
- другие СМЭВ QL Серверы.
- Выбор источника по условиям запроса.
- Защищаемые атрибуты модели данных:
- на извлечение по предоставлению «защитников»;
- на поиск.
- Автоматический параллелизм запросов к источникам.
- Ответ — готовый к использованию иерархический JSON-объект.
- Документная модель данных с генератором из текущей логической модели Prostore.
- Связи между ресурсами модели.
- Сжатие ответов с данными (gzip).
- Рекомендации индексов в БД.
- Постраничные запросы и ответы.
- Поддержка СМЭВ QL-запросов компонентами витрины:
- Сервис печатных форм;
- СМЭВ3-адаптер.
- Стейт-машина для СМЭВ QL-объектов (бронирования, блокировки, разрешения).
Создание и конфигурация
Чтобы создать новое приложение СМЭВ QL Сервера с именем <new-app-name>, выполните команду:
java -jar smevql-server-all.jar new <new-app-name>
В результате будет создана структура папок сервера внутри <new-app-name> и исполняемый файл smevql.
Запуск и управление
- Чтобы запустить приложение СМЭВ QL Сервер, выполните команду:
./smevql start -e <environment>
где environment – это окружение, на котором будет запущено приложение. Без указания окружения СМЭВ QL Сервер будет запущен в development.
- Чтобы остановить приложение СМЭВ QL Сервер, выполните команду:
./smevql stop
- Чтобы перезапустить приложение СМЭВ QL Сервер, выполните команду:
./smevql restart
Работа с сервером. Генераторы
Генераторы создают папки и файлы-шаблоны с начальными значениями.
Для запуска генератора можно использовать полную команду ./smevql generate или короткий алиас ./smevql g.- Для генерации нового пустого источника выполните команду:
./smevql g source <source-name>
Пример источника на основе Prostore:
prostore_source: type: rest version: '1.0' adapter: prostore protocol: http host: smevql-dtm-prostore01.ru-central1.internal port: 9090 path: api/v1/datamarts/query?format=json headers: - content-type: application/json threads-count: 4 connection-timeout: 30 |
- Для генерации новой модели выполните команду:
./smevql g model <model-name>
Пример модели:
resources: - mo: *base_model name: Медицинская организация description: Логическая таблица "Медицинская организация" fields: <<: *default_fields parent_id: <<: *ds name: parent_id update_ts: <<: *dts name: update_ts address: <<: *ds name: address address_fias_guid: <<: *ds name: address_fias_guid enabled: <<: *ds name: enabled name: <<: *ds name: name region_okato: <<: *ds name: region_okato create_ts: <<: *dts name: create_ts id: <<: *pks name: id rmis_id: <<: *ds name: rmis_id phone: <<: *ds name: phone connections: has_many: [] belongs_to: - attachment: primary_key: [ mo_id ] foreign_key: [ id ] - resource: primary_key: [ mo_id ] foreign_key: [ id ] extract: source: - name: prostore table: misdm02.mo - profilecode_resource: *base_model - resource: *base_model - observation: *base_model - book: *base_model - slot: *base_model - monitoring: *base_model - referral: *base_model - attachment: *base_model - patient: *base_model - service: *base_model - unaccessible_period: *base_model |
- Чтобы сгенерировать модель из существующего Prostore, выполните команду:
./smevql schema-gen test -h localhost -p 9090 -d demo_view
где
- test – имя директории, куда будет выгружена модель;
- -d
- -h
Стейт-машина СМЭВ QL
СМЭВ QL Сервер содержит встроенную машину состояний (стейт-машину) для изменения объектов модели внутри витрин данных. Одновременно с этим стейт-машина может в качестве подтверждения перехода состояния использовать внешний источник (например ИС Электронной очереди).
Карта состояний и переходов описывается в виде YAML-файла state.yaml, расположенного в папке states/<имя-модели>/<х.х версия модели> инстанса СМЭВ QL Сервера.
При наличии заполненных состояний стейт-машины СМЭВ QL Сервер генерирует API c набором HTTP-методов, отвечающих за изменение и просмотр состояний объектов:
- GET /states — получить карту переходов
- GET /states/<model-name> — получить карту переходов конкретной модели
- POST /states/<model-name>/<event-name> — выполнить переход состояний для модели.
Сборка проекта
Чтобы собрать проект, выполните команду gradle:
./gradlew clean build
Метрики
Для получения информации о работе СМЭВ QL Сервера реализован набор метрик, обеспечивающий формирование показателей:
- время исполнения входящих запросов;
- количество успешных / неуспешных выполнений входящих запросов;
- время исполнения исходящих запросов или обращений к СПО;
- количество успешных / неуспешных выполнений исходящих запросов или обращений к СПО.