Войти

Модуль СМЭВ QL

Приложение СМЭВ 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 demo_view – витрина (схема);
    • -h localhost -p 9090 – хост и порт Prostore.

Стейт-машина СМЭВ 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 Сервера реализован набор метрик, обеспечивающий формирование показателей:

  • время исполнения входящих запросов;
  • количество успешных / неуспешных выполнений входящих запросов;
  • время исполнения исходящих запросов или обращений к СПО;
  • количество успешных / неуспешных выполнений исходящих запросов или обращений к СПО.
Авторизуйтесь, чтобы оставить комментарий к статье