Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
  • Register
  • Sign in
  • N noc
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
    • Locked files
  • Issues 465
    • Issues 465
    • List
    • Boards
    • Service Desk
    • Milestones
    • Iterations
    • Requirements
  • Merge requests 25
    • Merge requests 25
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Artifacts
    • Schedules
    • Test cases
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Container Registry
    • Terraform modules
    • Model experiments
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • CI/CD
    • Code review
    • Insights
    • Issue
    • Repository
  • External wiki
    • External wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • noc
  • noc
  • Issues
  • #2022

Переработка механизма отчётов. ReportEngine

Описание

На текущий момент отчётность в НОКе реализована на базе собственного модуля SimpleReport на базе приложения Django. Модуль позволяет решать задачу вывода отчёта в виде HTML, с конвертацией в PDF или CSV в интерфейсе пользователя. Обладает несколькими недостатками:

  1. Интеграция с приложениями application джанго не позволяет использовать отчёты вне сервиса web
  2. Ограниченный набор форматов итоговых документов: html и csv
  3. Сложность реализации REST API для работы с отчётами из внешних источников (по ссылке и пр.)
  4. Невозможность расширения отчётов пользователем - требуется написание web приложения
  5. Сложность реализации отчётов по расписанию - поскольку модуль встроен в Application
  6. Отчёты строятся в сервис web что не всегда хорошо с точки зрения работоспособности, поскольку основная задача web это поддержка API пользовательского интерфейса
  7. Сложность с тестированием работоспособности отчётов - написания тестов

Поэтому возникла потребность реализации отдельного механизма отчётов - ReportEngine, который должен решить решить следующие задачи:

  1. В качестве источников данных использовать Datasource #1789 (closed)
  2. Поддержка разнообразных выходных форматов документов с возможностью расширения, например: xlsx, pdf, docx и другие
  3. Поддержка пользовательских шаблонов документов
  4. Настройка отчётов через интерфейс пользователя (UI)
  5. Использование тестов в системе (pytest) для проверки работоспособности
  6. Реализация сервиса отчётов Report Service для предоставления REST API по работе с отчётами

В текущей реализации SimpleReport модуль отчёта описывает источник данных и формат документа. Разумным выглядит подход по разделению механизма источника данных и формирование документа. Источники данных описаны в #1789 (closed) а для формирования документа предусмотреть отдельный модуль. Это позволит отделить механизм работы с данными и подготовки документа. Следующим шагом необходим связующий элемент, с одной стороны которого данные, а с другой шаблон. Поиск информации привёл к билиотеке yarg в которой подсмотрен DataBand ближайший аналог это секция отчёта (Report Section).

DataBand (Report Section) это некий именованный участок шаблона, связанный с источником данных. Когда шаблонизатор (в терминах yarg - Formatter) обнаруживает в шаблоне DataBand он вставляет в него данные из источника. При таком подходе от пользователя требуется только подготовка шаблона (template) документа в любом требуемом редакторе, а задача системы разместить данных в указанных частях шаблона.

DataBand ограничен рамками одного отчёта и не пересекается с другими.

Предложение

Для выполнение задачи понадобится описать:

  • Механизм источников данных: описан в #1789 (closed)
  • Класс DataBand (или ReportSection)
  • Класс форматтера Formatter - на входе DataBand и формат, на выходе сформированный документ (Document)
  • Класс ReportEngine - на входе описание отчёта и пользовательские параметры. На выходе сформированный документа (Document)

Задачи

  • Секции и SectionData (BandData)
  • Базовый класс отчёта ( Report class )
  • Классы для форматирования: Formatter
    • csv
    • html - использовать Jinja
    • table - портировать SimpleReport
    • xlsx - openpyxl
  • Тесты
  • Настройки отчётов (модель + UI)
  • Сервисы отчётов
  • Перевод существующих отчётов в настройки
  • Вывод отчётов из настроек в дерево навигации
Edited Apr 06, 2023 by Andrey Vertiprahov
Assignee
Assign to
Time tracking