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..44bacd5c2e61073d3f250c02bf03df4ec1d9400f --- /dev/null +++ b/proto/log/log.proto @@ -0,0 +1,102 @@ +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; +} + +// LogEntry представляет СЃРѕР±РѕР№ структуру данных для хранения информации Рѕ журнале. +message LogEntry { + // id является уникальным идентификатором каждой записи РІ журнале. + string id = 1; + + // 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; + // action описывает действие, которое было произведено. Рто поле может принимать разные значения РІ зависимости РѕС‚ сервиса. + // Примеры: + // - item.create + // - item.update + // - organization.create + // - action.run + // - reference.create + string event = 7; + + // object это идентификатор объекта связанного СЃ событием + // Рдентификатор объекта должен быть РІ формате GlobalID: + // <контекст>/<тип объекта>/<идентификатор объекта> + // РіРґРµ: + // - <контекст> - представляет СЃРѕР±РѕР№ иднетификатор родительского объекта, если таковой имеется + // - <тип объекта> - представляет СЃРѕР±РѕР№ тип объекта, например: + // spaces, envs, cols, items, revs, fields, clients, roles, orgs, users + // - <идентификатор объекта> - представляет СЃРѕР±РѕР№ идентификатор объекта + // + // Примеры: + // /spaces/<space_id> - пространство + // /spaces/<space_id>/envs/<env_id> - окружение + // /spaces/<space_id>/envs/<env_id>/cols/<collection_id> - коллекция + // /spaces/<space_id>/cols/<collection_id> - коллекция РІ окружении "master" + // /spaces/<space_id>/envs/<env_id>/schema/<collection_id> - схема коллекции + // /spaces/<space_id>/envs/<env_id>/cols/<collection_id>/items/<item_id> - элемент коллекции + // /spaces/<space_id>/cols/<collection_id>/items/<item_id> - элемент коллекции РІ окружении "master" + // /spaces/<space_id>/envs/<env_id>/cols/<collection_id>/items/<item_id>/fields/<field_name> - поле элемента коллекции + // /spaces/<space_id>/envs/<env_id>/cols/<collection_id>/items/<item_id>/revs/<rev_id> - ревизия элемента коллекции + // /spaces/<space_id>/clients/<client_id> - клиент + // /spaces/<space_id>/roles/<role_id> - роль + // /orgs/<org_id> - организация + // /users/<user_id> - пользователь + // /services/<service_id> - сервис + string object = 8; + + // caller содержит идентификатор сущности вызвавшей событиe, аналогично полю object + // + // Примеры: + // /users/<user_id> - пользователь + // /spaces/<space_id>/clients/<client_id> - клиент + // /services/<service_id> - сервис + string caller = 9; + + // attr содержит дополнительные связанные СЃ событием атрибуты РІ формате Any + // позволяет добавить дополнительные данные РІ событие + google.protobuf.Any attr = 10; + + // tags содержит теги связанные СЃ событием, РЅР° усмотрение сервиса + repeated string tags = 11; +} \ 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..80bb537180646babc3d737875884d84a171db6ae --- /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 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; + + // Рспользовавшийся для РїРѕРёСЃРєР° фильтр + // Для + 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