Skip to content
Snippets Groups Projects
Commit 163bb2f7 authored by Pavel Antonov's avatar Pavel Antonov :asterisk:
Browse files

Добавлено описание протокола сервиса логирования

parents ecd75686 b3370a43
No related branches found
No related tags found
1 merge request!30Добавлено описание протокола сервиса логирования
......@@ -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;
}
......
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
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment