Загрузить изображение для проекта: 'Citeck Community'
  1. Citeck Community
  2. ECOSCOM-4711

Develop audit subsystem API and services

    XMLWordДля печати

Детали задачи

    • Icon: История История
    • Решение: Готово
    • Icon: Medium Medium
    • Community 4.0
    • Не заполнено
    • Не заполнено
    • Не заполнено

    Описание

      1. Добавить реализацию сервиса EcosAuditService в ecos-webapp-commons/ecos-webapp-lib

      Пользователи сервиса будут создавать emitter'ы для событий и периодически слать в них некоторые события, которые происходят в системе.

      Внутри реализации сервиса EcosAuditService мы должны реализовать поддержку pipeline’ов

      Суть одного pipeline сводится к конфигурации фильтров и выхода. Пример конфигурации:

      ecos:
        webapp:
          task: // часть с task уже реализована. Здесь просто для понимания
            executors:
              audit:
                corePoolSize: 10
          audit:
            enabled: true
            pipelines:
              main:
                types:
                  include:
                    - records.query
                  exclude:
                    - records.mutate
                async:
                  enabled: true // сделать отправку асинхронной
                  executor: audit // см. раздел task.executors
                filters:
                  - type: predicate
                    config:
                      t: and
                      v:
                        - { t: eq, a: type, v: 'records.query' }
                        - { t: contains, a: event.sourceId, v: 'integrations/some-source-id' }
                outputs:
                  - type: rabbitmq
                    config:
                      exchange: 'audit-events'

      Фильтр может как выкидывать некоторые события так и менять существующие

      Модель события, которое в итоге пойдет в output:

      id: UUID //рандомный UUID
      time: Instant // время когда произошло событие
      type: String // тип события
      user: String // имя пользователя
      client: ClientData
      event: Any // здесь может быть любая информация по конкретному событию

      По результатам задачи должна быть возможность:

      1. Настроить фильтрацию событий по типу (поле types.include и types.exclude). В списках фильтрации могут быть указаны либо конкретные значения типов, либо шаблоны вроде https://habr.com/ru/post/489086/ Topic Exchange (т.е. делим фильтр по знакам “.” на слова и обрабатываем символы # и * если они есть)
      2. Настроить выгрузку событий аудита в rabbitmq
      3. Добавить фильтры на основе предикатов (см. сервис ru.citeck.ecos.records2.predicate.PredicateService)
      4. Настроить асинхронную отправку событий

      Общая архитектурная идея похожа на https://www.elastic.co/logstash/

      Вложенные файлы

        Активность

          Люди

            oleg.onischuk@citeck.ru Oleg Onischuk
            pavel.simonov@citeck.ru Pavel Simonov
            Голоса:
            0 Голосовать за эту задачу
            Наблюдатели:
            5 Начать наблюдение за этой задачей

            Даты

              Создано:
              Обновленo:
              Дата решения:

              Учет времени

                Оценка:
                Первоначальная оценка - 2 недели Первоначальная оценка - 2 недели
                2w
                Осталось:
                Оставшееся время - 0 минуты
                0m
                Затрачено:
                Затраченное время - 2 недели, 4 дни, 2 часы
                2w 4d 2h