1. Общее описание

СМЭВ QL Сервер — приложение для конфигурирования и запуска типового API извлечения данных из хранилищ под управлением типового ПО «Витрина данных» от Минцифры (Ядро Prostore 6.1+).

1.1. Реализованные функции СМЭВ QL Сервера

  • СМЭВ QL Сервер является компонентом Типового ПО Витрина данных, создающим типовое API витрины согласно спецификации СМЭВ QL.

  • Поддержка множественных источников данных:

    • Витрины под управлением Prostore;

    • Другие СМЭВ QL Сервера;

  • Выбор источника по условиям запроса;

  • Защищаемые атрибуты модели данных;

    • На извлечение по предоставлению «защитников»;

    • На поиск;

  • Автоматический параллелизм запросов к источникам;

  • Ответ — готовый к использованию иерархический JSON-объект;

  • Документная модель данных с генератором из текущей логической модели Prostore;

  • Связи между ресурсами модели;

  • Сжатие ответов с данными (gzip);

  • Рекомендации индексов в БД;

  • Постраничные запросы и ответы;

  • Поддержка СМЭВ QL запросов компонентами витрины:

    • Сервис печатных форм;

    • СМЭВ3 адаптер;

  • Стейт-машина для СМЭВ QL объектов (бронирования, блокировки, разрешения).

Примечание

Заливка данных через через модуль RESt-Uploader и DATA-Uploader не предусматривают параллельную заливку в датамарты вместе с другими инструментами. Параллельная заливка данных в те же датамарты вручную или средствами ETL приведет к конфликту в работе с дельтами и к ошибкам соответственно.

2. Быстрый старт

2.1. Создание и конфигурация

Создать новое приложение СМЭВ QL Сервера командой:

java -jar smevql-server-all.jar new <new-app-name>

Данная команда создаст структуру папок сервера внутри <new-app-name> и исполняемый файл smevql.

2.2. Запуск и управление

Запуск СМЭВ QL Сервера осуществляется командой:

./smevql start -e <environment>

Где environment - это указание окружения. Без указания окружения сервер будет запущен в development.

Остановка СМЭВ QL Сервера осуществляется командой:

./smevql stop

Перезапуск СМЭВ QL Сервера осуществляется командой:

./smevql restart

2.3. Работа с сервером

2.3.1. Генераторы

Генераторы создают папки и файлы-шаблоны с начальными значениями. Для запуска генератора можно использовать полную команду ./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.

2.4. Стейт-машина СМЭВ QL

СМЭВ QL содержит встроенную машину состояний для изменения объектов модели внутри витрин данных. Одновременно с этим Стейт машина может, в качестве подтверждения перехода состояния, использовать внешний источник (например ИС Электронной очереди).

Карта состояний и переходов описывается в виде YAML-файла state.yaml располагаемого в папке states/<имя-модели>/<х.х версия модели> инстанса СМЭВ QL Сервера.

При наличии заполненных состояний машины СМЭВ QL Сервер генерирует API c набором HTTP-методов, отвечающих за изменение и просмотр состояний объектов:

  1. GET /states — получить карту переходов

  2. GET /states/<model-name> — получить карту переходов конкретной модели

  3. POST /states/<model-name>/<event-name> — выполнить переход состояний для модели

2.5. Сборка проекта

Собрать проект можно с помощью gradle:

./gradlew clean build

3. Метрики

Для обеспечения возможности сбора информации о работе СМЭВ QL Сервера реализован набор метрик, обеспечивающий формирование показателей:

  • время исполнения входящих запросов;

  • количество успешных / не успешных выполнений входящих запросов;

  • время исполнения исходящих запросов или обращений к СПО;

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

Пример по подключению журналирования.

Пример по подключению мониторинга.