MyLab.ProtocolStorage.Client 1.1.2

There is a newer version of this package available.
See the version list below for details.
dotnet add package MyLab.ProtocolStorage.Client --version 1.1.2                
NuGet\Install-Package MyLab.ProtocolStorage.Client -Version 1.1.2                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="MyLab.ProtocolStorage.Client" Version="1.1.2" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add MyLab.ProtocolStorage.Client --version 1.1.2                
#r "nuget: MyLab.ProtocolStorage.Client, 1.1.2"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install MyLab.ProtocolStorage.Client as a Cake Addin
#addin nuget:?package=MyLab.ProtocolStorage.Client&version=1.1.2

// Install MyLab.ProtocolStorage.Client as a Cake Tool
#tool nuget:?package=MyLab.ProtocolStorage.Client&version=1.1.2                

MyLab.ProtocolStorage

Ознакомьтесь с последними изменениями в журнале изменений.

Docker: Docker image Docker image Docker image

Спецификация API : API specification

Клиент: NuGet

Обзор

MyLab.ProtocolStorage - хранилище протоколов. Обеспечивает хранение и поиск событий протоколов.

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

Событие протокола - сущность произвольного содержания за исключением служебных полей.

alternate text is missing from this package README image

Состав решения:

  • API - REST-API для получения доступа к функциям хранилища;
  • indexer - индексатор событий протокола. Разработан на базе MyLab.Search.Indexer;
  • searcher - поисковик событий протокола. Разработан на базе MyLab.Search.Searcher.

Сценарии

Ведение протокола

Ведение протокола осуществляется следующим образом:

  • клиент (служба, ведущая протокол) обращается к API хранилища протоколов и отправляет объект, описывающий событие, которое необходимо зафиксировать в протоколе;
  • API хранилища протоколов помещает объект события в очередь;
  • клиент продолжает свою работу;
  • indexer забирает объект события и индексирует его в Elasticsearch.

Поиск по протоколу

Поиск по протоколу осуществляется следующим образом:

  • служба, предоставляющая протокол клиенту:
    • определяет содержание выборки по субъекту. Например, для обычного пользователя - только записи, принадлежание ему, а для администратора - записи всех пользователей;
    • запрашивает у API хранилища протоколов токен поиска с указанием ограничений по субъекту;
    • передаёт токен поиска клиенту;
  • клиент, делает запрос поиска с параметрами поиска и токеном поиска в API хранилища протоколов и получает выборку событий протокола.

Протокол

Протокол - абстракция, объединяющая события одного типа. Фактически, в хранящемся виде протокол представляет из себя индекс или поток в Elasticsearch. Через API хранилища протоколов возможно только добавление новых событий в протокол. Для очистки протокола необходимо использовать поток и подходы по их чистке.

API хранилища протоколов подерживает любое количество протоколов без предварительного их создания. Протокол создаётся в момент добавления в него первого события.

Событие протокола

Событие протокола - объект, содержащий реквизиты бизнес-события, необходимые для участия в условиях выборки и для обеспечения состава выбранных данных. Проиндексированное событие не изменяется со временем.

Служебные поля:

  • id - идентификатор события. Если не указан, устанавилвается случайный GUID в формате 32 символа (без разделителей) с нижнем регистре. Например: b6738a45784f4fb1b7b15d747e1c72fb;
  • subject - субъект события. Например, идентификатор пользователя;
  • datetime - дата и время возникновения события. Если не указано, устанавливается текущие дата и время.

Все служебные поля необязательны.

Поиск

Подробнее обо всех возможностях поиска тут.

Результаты выборки по умолчанию сортируются в порядке сначала более свежие по дате+времени, указанным в событиях протокола.

Предустановленные фильтры

Фильтр by-id

Фильтр по идентификатору события.

Аргументы:

  • id - идентификатор события;
Фильтр by-subject

Фильтр по субъекту.

Аргументы:

  • subject - идентификатор субъекта;
Фильтр by-dt

Фильтр по дате+времени, указанным в событиях.

Аргументы:

  • from - больше или равно указанным дате+времени
  • to - меньше указанных даты+времени

Развёртывание

В данном разделе описывается вариант развёртывания на базе Docker с применением docker-compose.

Пример docker-compose.yml:

version: '3.2'

services:

  test-indexer:
    container_name: test-indexer
    image: ghcr.io/mylab-search-fx/protocol-storage-indexer:latest
    environment:
      MQ__Host: rabbitmq-host
      MQ__User: your-mq-username-here
      MQ__Password: your-mq-password-here
      ES__Url: http://elasticsearch-host:9200
      Indexer__MqQueue: your-queue-name
      Indexer__EsIndexNamePrefix: test-

  test-searcher:
    container_name: mps-searcher
    image: ghcr.io/mylab-search-fx/protocol-storage-searcher:latest
    environment:
      ES__Url: http://elasticsearch-host:9200
      Searcher__Token__ExpirySec: 10
      Searcher__Token__SignKey: your-sign-key-here
      Searcher__EsIndexNamePrefix: test-

  test-api:
    container_name: test-api
    image: ghcr.io/mylab-search-fx/protocol-storage-api:latest
    environment:
      MQ__Host: rabbitmq-host
      MQ__User: your-mq-username-here
      MQ__Password: your-mq-password-here
      MQ__DefaultPub__RoutingKey: your-queue-name
      API__List__indexer__Url: http://test-indexer
      API__List__searcher__Url: http://test-searcher

Конфигурация

Конфигурация indexer

  • MQ - параметры подключения к RabbitMQ (подробнее)
    • Host - хост подключения;
    • VHost - виртуальный хост
    • Port - порт. 5672 - по умолчанию;
    • User - имя пользователя;
    • Password - пароль;
  • ES - параметры подключения к Elasticsearch
    • Url - url подключения к Elasticsearch
  • Indexer - настройуки индексатора (подробнее)
    • MqQueue - имя очереди в RabbitMQ для входящих сообщений индексации;
    • EsIndexNamePrefix - префикс, который будет добавляться к имени индекса Elasticsearch всех индексов (будет переведён в нижний регистр);
    • EsIndexNamePostfix - постфикс, который будет добавляться к имени индекса Elasticsearch всех индексов (будет переведён в нижний регистр).

Больше возможностей по настройке индексатора тут.

Конфигурация searcher

  • ES - параметры подключения к Elasticsearch
    • Url - url подключения к Elasticsearch
  • Searcher - настройуки поисковика (подробнее):
    • Token - настройки использования токенов:
    • ExpirySec - (опционально) время жизни токена в секундах;
    • SignKey - текстовый ключ подписи токена. Должен быть не меньше 16 байт;
    • EsIndexNamePrefix - префикс, который будет добавляться к имени индекса Elasticsearch всех индесов поисковика;
    • EsIndexNamePostfix - постфикс, который будет добавляться к имени индекса Elasticsearch всех индексов поисковика;
    • Debug - флаг, определяющий добавление отладочной информации о поиске в Elasticsearch (подробнее об отладке).

Больше возможностей по настройке поисковика тут.

Конфигурация api

  • MQ - параметры подключения к RabbitMQ (подробнее)
    • Host - хост подключения;
    • VHost - виртуальный хост
    • Port - порт. 5672 - по умолчанию;
    • User - имя пользователя;
    • Password - пароль;
  • API - настройки подключения к другим API (подробнее)
    • List - список конфигураций подключений
      • indexer - параметры подключения к индексатору
        • Url - url индексатора
      • searcher - параметры подключения к поисковику
        • Url - url поисковика
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp3.1 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on MyLab.ProtocolStorage.Client:

Package Downloads
MyLab.TaskApp

.NET Core task-application framework

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.4.5 497 4/11/2023
1.3.5 203 3/23/2023
1.2.4 295 1/13/2023
1.2.2 403 8/17/2022
1.1.2 407 8/5/2022
1.0.0 418 7/7/2022