diff --git a/proto/common/common.proto b/proto/common/common.proto index 3221bdc3319e1da379daf089ca79f180e5b7f140..ac9e243400a7e36028ab9a096aee7af4106455d8 100644 --- a/proto/common/common.proto +++ b/proto/common/common.proto @@ -14,10 +14,13 @@ message Filter { message FindOptions { repeated string sort = 1; - int32 page_num = 2; - int32 page_size = 3; + int32 page_num = 2; // Deprecated + int32 page_size = 3; // Deprecated repeated string fields = 4; bool exclude_fields = 5; + + int32 offset = 6; + int32 limit = 7; } diff --git a/proto/log/log.proto b/proto/log/log.proto new file mode 100644 index 0000000000000000000000000000000000000000..687b54528c8e7afcf195f099954d1da0e66e9a8d --- /dev/null +++ b/proto/log/log.proto @@ -0,0 +1,109 @@ +syntax = "proto3"; + +package log; + +import "google/protobuf/timestamp.proto"; +import "google/protobuf/any.proto"; +import "common/error.proto"; + +option go_package = "git.perx.ru/perxis/perxis-go/proto/log;log"; + +// LogLevel задает уровень журналирования. +enum LogLevel { + // INFO - обозначает сообщения СЃ нормальным, операционным уровнем журналирования. + INFO = 0; + // WARNING - обозначает сообщения, которые содержат потенциально вредные ситуации. + WARNING = 1; + // ERROR - обозначает РґСЂСѓРіРёРµ ошибки РІ работе. + ERROR = 2; + // CRITICAL - обозначает серьезные ошибки, РёР·-Р·Р° которых программа может РЅРµ выполнять некоторые функции. + CRITICAL = 3; + // FATAL - обозначает очень серьезные ошибки, которые РјРѕРіСѓС‚ привести Рє остановке приложения. + FATAL = 4; +} + +// Caller представляет СЃРѕР±РѕР№ сообщение, которое содержит информацию Рѕ вызывающем объекте. +// Каждый вызывающий объект может быть РІ РѕРґРЅРѕРј РёР· трех состояний: user, client, service. +message Caller { + oneof caller { + string user = 1; // user отображает учетную запись пользователя, инициировавшего действие. + string client = 2; // client отображает учетную запись клиента, инициировавшего действие. + string service = 3; // service отображает службу, инициировавшую действие. + } +} + + +// LogEntry представляет СЃРѕР±РѕР№ структуру данных для хранения информации Рѕ журнале. +message LogEntry { + + // id является уникальным идентификатором каждой записи РІ журнале. + string id = 1; + + // action описывает действие, которое было произведено. Рто поле может принимать разные значения РІ зависимости РѕС‚ сервиса. + // Примеры: + // - item.create + // - item.update + // - organization.create + // - action.run + // - reference.create + string action = 11; + + // timestamp указывает РЅР° временную метку, указывающую РєРѕРіРґР° было создано данное сообщение. + google.protobuf.Timestamp timestamp = 2; + + // level это поле, обозначающее уровень приоритета сообщения РІ логе. + LogLevel level = 3; + + // message это РѕСЃРЅРѕРІРЅРѕРµ сообщение, которое требуется записать РІ лог. + string message = 4; + + // category указывает РЅР° категорию события. + // Примеры: + // - + string category = 5; + + // component обозначает компонент системы, РіРґРµ произошло данное событие. + // Примеры: + // - Items.Service + // - Items.API + // - Users.Service + // - Users.API + // - Janitor.Service + // - Tasks.Worker + string component = 6; + + // organization обозначает организацию, СЃ которой связано данное событие. + // Р’ случае если событие РЅРµ связано СЃ организацией, то данное поле должно быть пустым. + // Р’ случае если событие связано СЃ организацией, то данное поле должно содержать идентификатор организации который + // проставляется системой логирования автоматически. + string organization = 7; + + // space обозначает пространство, которому принадлежит данное событие. + // Р’ случае если событие РЅРµ связано СЃ пространством, то данное поле должно быть пустым. + string space = 8; + + // env обозначает среду РІ которой произошло данный процесс. + // Р’ случае если событие РЅРµ связано СЃ средой, то данное поле должно быть пустым. + // РџРѕ умолчанию среда равна master. РџСЂРё этом РІ лог записывается идентификатор среды соответсвующий master. + string env = 9; + + // collection обозначает коллекцию РІ которой произошло событие. + // Р’ случае если событие РЅРµ связано СЃ коллекцией, то данное поле должно быть пустым. + string collection = 10; + + // object_type обозначает тип объекта СЃ которым связано событие. + string object_type = 16; + + // object_id это идентификатор объекта связанного СЃ событием + string object_id = 17; + + // caller содержит информацию Рѕ сущности вызвавшей событие + Caller caller = 13; + + // attr содержит дополнительные связанные СЃ событием атрибуты РІ формате Any + // позволяет добавить дополнительные данные РІ событие + google.protobuf.Any attr = 14; + + // tags содержит теги связанные СЃ событием, РЅР° усмотрение сервиса + repeated string tags = 15; +} \ No newline at end of file diff --git a/proto/log/log_service.proto b/proto/log/log_service.proto new file mode 100644 index 0000000000000000000000000000000000000000..44f77dea8d8b6409f06002aa49fbcfb809a81c8e --- /dev/null +++ b/proto/log/log_service.proto @@ -0,0 +1,97 @@ +syntax = "proto3"; + +package log; + +import "common/common.proto"; +import "common/error.proto"; +import "log/log.proto"; +import "google/protobuf/timestamp.proto"; + +option go_package = "git.perx.ru/perxis/perxis-go/proto/log;log"; + + +// Сервис для записи активности РІ системе +// Позволяет всем компонентам системы записывать логи РІ единое хранилище Рё получать РёС… оттуда +service LogService { + // Метод для записи логов + rpc Log(stream LogRequest) returns (LogResponse) {} + + // Метод для обработки отдельной записи лога + rpc LogEntry(LogRequest) returns (LogResponse) {} + + // Метод для РїРѕРёСЃРєР° логов РїРѕ заданным параметрам + rpc Find(FindRequest) returns (FindResponse) {} + + // Метод для удаления логов РїРѕ заданным параметрам + rpc Delete(DeleteRequest) returns (DeleteResponse) {} +} + +// Запрос для лога +message LogRequest { + // Запись лога + LogEntry entry = 1; +} + +// Ответ сервера РЅР° запрос лога +message LogResponse { + // Содержит информацию РѕР± ошибке, если таковая имеется + common.Error error = 1; +} + +message Filter { + // Запрос РЅР° РїРѕРёСЃРє логов + // Примеры: + // 1. `timestamp > '2019-01-01' AND timestamp < '2019-01-02'` + // 2. `timestamp > '2019-01-01' AND timestamp < '2019-01-02' AND level = 'error'` + // 3. `component = 'api' AND object.id = '123' AND object.type = 'item' AND context.space = 'spc1'` + // 4. `id in ['1', '2', '3']` + repeated string q = 3; // РЎРїРёСЃРѕРє выражений для фильтрации +} + +// Запрос РЅР° РїРѕРёСЃРє логов +message FindRequest { + // Фильтры для РїРѕРёСЃРєР° + Filter filter = 2; + + // Опции РїРѕРёСЃРєР° + common.FindOptions options = 3; +} + +// Результат РїРѕРёСЃРєР° +message FindResult { + // Найденные записи лога + repeated LogEntry entries = 1; + + // Рспользовавшийся для РїРѕРёСЃРєР° фильтр + // Для + common.Filter filter = 2; + + // Рспользовавшиеся для РїРѕРёСЃРєР° опции + common.FindOptions options = 3; + + // Общее количество найденных записей + uint32 total = 4; +} + +// Ответ сервера РЅР° запрос РїРѕРёСЃРєР° +message FindResponse { + oneof response { + // Результаты РїРѕРёСЃРєР° + FindResult result = 1; + + // Рнформация РѕР± ошибке, если таковая имеется + common.Error error = 2; + } +} + +// Запрос РЅР° удаление логов +message DeleteRequest { + // Фильтры для удаления + Filter filter = 2; +} + +// Ответ сервера РЅР° запрос удаления +message DeleteResponse { + // Рнформация РѕР± ошибке, если таковая имеется + common.Error error = 1; +} \ No newline at end of file