Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • perxis/perxis-proto
1 result
Show changes
Commits on Source (87)
Showing
with 681 additions and 245 deletions
...@@ -2,7 +2,7 @@ syntax = "proto3"; ...@@ -2,7 +2,7 @@ syntax = "proto3";
import "google/protobuf/empty.proto"; import "google/protobuf/empty.proto";
option go_package = "git.perx.ru/perxis/perxis-go/clients;clients"; option go_package = "git.perx.ru/perxis/perxis-go/proto/clients;clients";
package content.clients; package content.clients;
...@@ -36,12 +36,7 @@ message Client { ...@@ -36,12 +36,7 @@ message Client {
// Приложение отключено и не может авторизоваться // Приложение отключено и не может авторизоваться
optional bool disabled = 7; optional bool disabled = 7;
// // Приложение имеет доступ к указанным окружениям пространства (ID или Alias) // Идентификатор роли клиента
// repeated string environments = 8;
//
// // Список правил доступа к коллекциям
// repeated common.Rule rules = 9;
string role_id = 8; string role_id = 8;
OAuth oauth = 10; OAuth oauth = 10;
......
...@@ -3,7 +3,7 @@ syntax = "proto3"; ...@@ -3,7 +3,7 @@ syntax = "proto3";
import "google/protobuf/empty.proto"; import "google/protobuf/empty.proto";
import "common/common.proto"; import "common/common.proto";
option go_package = "git.perx.ru/perxis/perxis-go/collaborators;collaborators"; option go_package = "git.perx.ru/perxis/perxis-go/proto/collaborators;collaborators";
package content.collaborators; package content.collaborators;
......
...@@ -4,15 +4,20 @@ import "google/protobuf/empty.proto"; ...@@ -4,15 +4,20 @@ import "google/protobuf/empty.proto";
import "common/common.proto"; import "common/common.proto";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";
option go_package = "git.perx.ru/perxis/perxis-go/collections;collections"; option go_package = "git.perx.ru/perxis/perxis-go/proto/collections;collections";
package content.collections; package content.collections;
message Access { message Access {
repeated common.Action actions = 1; repeated common.Action actions = 1;
repeated string hidden_fields = 5; repeated string hidden_fields = 5;
// Deprecated
repeated string readonly_fields = 6; repeated string readonly_fields = 6;
repeated string writeonly_fields = 7; repeated string writeonly_fields = 7;
repeated string deny_read_fields = 8;
repeated string deny_write_fields = 9;
} }
message Collection { message Collection {
...@@ -20,8 +25,14 @@ message Collection { ...@@ -20,8 +25,14 @@ message Collection {
string space_id = 2; string space_id = 2;
string env_id = 3; string env_id = 3;
string name = 4; string name = 4;
// Коллекция может содержать ровно одну запись. При работе с записью в такой коллекции идентификатор записи в
// обращениях в API можно не указывать и предполагать, что запись всегда есть (ее не нужно создавать)
optional bool single = 5; optional bool single = 5;
optional bool system = 6; optional bool system = 6;
// Коллекция не содержит данных. Возможно создание таких коллекций для использования как подключаемые подсхемы в
// других коллекциях
optional bool no_data = 12; optional bool no_data = 12;
string schema = 7; string schema = 7;
bool hidden = 13; bool hidden = 13;
...@@ -49,7 +60,7 @@ message Collection { ...@@ -49,7 +60,7 @@ message Collection {
StateInfo state_info = 10; StateInfo state_info = 10;
repeated string tags = 16; repeated string tags = 16;
Access access = 20; Access access = 20; // Возможные действия с коллекцией на основе контекста запроса
} }
message CreateRequest { message CreateRequest {
...@@ -110,10 +121,30 @@ message DeleteRequest { ...@@ -110,10 +121,30 @@ message DeleteRequest {
} }
service Collections { service Collections {
// Создать коллекцию. Установка схемы производится через отдельный метод `SetSchema` и методом `Create` игнорируется
rpc Create(CreateRequest) returns(CreateResponse) {} rpc Create(CreateRequest) returns(CreateResponse) {}
// Получить коллекцию. Схема коллекции возвращается полная, т.е. включая все подключаемые подсхемы, если не указано
// обратное в `GetRequest.options`
rpc Get(GetRequest) returns(GetResponse) {} rpc Get(GetRequest) returns(GetResponse) {}
// Возвращает список коллекций, отсортированных в алфавитном порядке. По умолчанию не возвращает коллекции без данных
// и скрытые коллекции, подробнее см. `ListRequest.filter`
rpc List(ListRequest) returns(ListResponse) {} rpc List(ListRequest) returns(ListResponse) {}
// Обновить коллекцию. Установка схемы производится через отдельный метод `SetSchema` и методом `Update` игнорируется
rpc Update(UpdateRequest) returns(google.protobuf.Empty) {} rpc Update(UpdateRequest) returns(google.protobuf.Empty) {}
// Установить схему коллекции. По результатам вызова метода не происходит *применение* схемы - например,
// не перестраиваются индексы БД коллекции, поскольку это может быть длительный процесс. После редактирования всех
// необходимых схем окружения необходимо их применить - выполнить миграцию путем вызова метода `Environments.Migrate`.
// Если схема коллекции изменена, но миграция еще не была запущена, коллекция будет находиться в состоянии `CHANGED`.
//
// Если в процессе миграции возникли ошибки, в соответствующие коллекции в поле `Collection.state_info` будет записано
// содержание ошибки и установлено состояние `ERROR`
rpc SetSchema(SetSchemaRequest) returns(google.protobuf.Empty) {} rpc SetSchema(SetSchemaRequest) returns(google.protobuf.Empty) {}
// Удалить коллекцию
rpc Delete(DeleteRequest) returns(google.protobuf.Empty) {} rpc Delete(DeleteRequest) returns(google.protobuf.Empty) {}
} }
syntax = "proto3"; syntax = "proto3";
option go_package = "git.perx.ru/perxis/perxis-go/common;common"; option go_package = "git.perx.ru/perxis/perxis-go/proto/common;common";
package common; package common;
import "google/protobuf/struct.proto"; import "google/protobuf/struct.proto";
message Error {
message BadRequest {
message FieldViolation {
string field = 1;
string description = 2;
}
repeated FieldViolation errors = 1;
}
message Help {
message Link {
string description =1;
string url = 2;
}
repeated Link links = 1;
}
message DebugInfo {
repeated string stack_trace = 1;
string detail = 2;
}
message LocalizedMessage {
string locale = 1;
string message = 2;
}
uint64 error_code = 1; // Код ошибки
string error_id = 2; // ID конкретного инцидента, ID уникальна для каждого случая.
string reason = 3; // ???
string domain = 4; // Сервис,Пакет к которому относится ошибка
map<string,string> metadata = 9; // Мета-информация
BadRequest bad_request = 10; // Ошибка запроса
DebugInfo debug_info = 11; // Отладочная информация
Help help = 100; // Пользовательская информации и инструкции
repeated LocalizedMessage localized_messages = 200; // Перевод сообщения об ошибке
}
message Filter { message Filter {
string op = 1; string op = 1;
string field = 2; string field = 2;
...@@ -52,10 +14,13 @@ message Filter { ...@@ -52,10 +14,13 @@ message Filter {
message FindOptions { message FindOptions {
repeated string sort = 1; repeated string sort = 1;
int32 page_num = 2; int32 page_num = 2; // Deprecated
int32 page_size = 3; int32 page_size = 3; // Deprecated
repeated string fields = 4; repeated string fields = 4;
bool exclude_fields = 5; bool exclude_fields = 5;
int32 offset = 6;
int32 limit = 7;
} }
...@@ -78,10 +43,15 @@ message Rule { ...@@ -78,10 +43,15 @@ message Rule {
repeated Action actions = 2; repeated Action actions = 2;
Access access = 3; Access access = 3;
repeated string hidden_fields = 5; repeated string hidden_fields = 5;
// Deprecated
repeated string readonly_fields = 6; repeated string readonly_fields = 6;
repeated string writeonly_fields = 7; repeated string writeonly_fields = 7;
string read_filter = 8; string read_filter = 8;
string write_filter = 9; string write_filter = 9;
repeated string deny_read_fields = 10;
repeated string deny_write_fields = 11;
} }
message Collaborator { message Collaborator {
......
syntax = "proto3";
option go_package = "git.perx.ru/perxis/perxis-go/proto/common;common";
package common;
import "google/protobuf/struct.proto";
message Error {
message BadRequest {
message FieldViolation {
string field = 1;
string description = 2;
}
repeated FieldViolation errors = 1;
}
message Help {
message Link {
string description =1;
string url = 2;
}
repeated Link links = 1;
}
message DebugInfo {
repeated string stack_trace = 1;
string detail = 2;
}
message LocalizedMessage {
string locale = 1;
string message = 2;
}
uint64 error_code = 1; // Код ошибки
string error_id = 2; // ID конкретного инцидента, ID уникальна для каждого случая.
string reason = 3; // ???
string domain = 4; // Сервис, пакет к которому относится ошибка
string message = 5; // Текст ошибки
string details = 6; // Дополнительные детали об ошибке
map<string,string> metadata = 9; // Мета-информация
BadRequest bad_request = 10; // Ошибка запроса
DebugInfo debug_info = 11; // Отладочная информация
Help help = 100; // Пользовательская информации и инструкции
repeated LocalizedMessage localized_messages = 200; // Перевод сообщения об ошибке
repeated Error errors = 500; // Вложенные ошибки
}
syntax = "proto3";
package common;
import "google/protobuf/timestamp.proto";
import "google/protobuf/any.proto";
import "common/error.proto";
option go_package = "git.perx.ru/perxis/perxis-go/proto/common;common";
// Операция
message Operation {
// ID операции
string id = 1;
// Описание операции
string description = 2;
// Время создания операции
google.protobuf.Timestamp created_at = 3;
// Создатель операции
string created_by = 4;
// Время последнего изменения операции
google.protobuf.Timestamp modified_at = 6;
// Операция завершена
bool done = 7;
// Метаданные операции
google.protobuf.Any metadata = 8;
// Результат выполнения операции
oneof result {
// Результат выполнения операции в случае успеха
google.protobuf.Any response = 9;
// Результат выполнения операции в случае ошибки
Error error = 10;
}
}
syntax = "proto3";
option go_package = "git.perx.ru/perxis/perxis-go/proto/common;common";
package common;
import "common/operation.proto";
import "common/validation.proto";
service OperationService {
// Возвращает статус операции и ее результат, если она завершена
rpc Get (GetOperationRequest) returns (Operation) {}
// Отменяет выполнение операции, если это поддерживается сервисом
rpc Cancel (CancelOperationRequest) returns (Operation) {}
}
message GetOperationRequest {
string operation_id = 1 [(required) = true];
}
message CancelOperationRequest {
string operation_id = 1 [(required) = true];
}
syntax = "proto3";
package common;
option go_package = "git.perx.ru/perxis/perxis-go/proto/common;common";
import "google/protobuf/descriptor.proto";
extend google.protobuf.OneofOptions {
bool exactly_one = 101400;
}
extend google.protobuf.FieldOptions {
bool required = 101501;
string pattern = 101502;
string value = 101503;
string size = 101504;
string length = 101505;
bool unique = 101506;
MapKeySpec map_key = 101510;
string bytes = 101511;
}
message MapKeySpec {
string value = 1;
string pattern = 2;
string length = 3;
}
\ No newline at end of file
...@@ -6,7 +6,7 @@ import "collections/collections.proto"; ...@@ -6,7 +6,7 @@ import "collections/collections.proto";
import "items/items.proto"; import "items/items.proto";
import "google/protobuf/struct.proto"; import "google/protobuf/struct.proto";
option go_package = "git.perx.ru/perxis/perxis-go/delivery;delivery"; option go_package = "git.perx.ru/perxis/perxis-go/proto/delivery;delivery";
package delivery; package delivery;
......
...@@ -3,7 +3,7 @@ syntax = "proto3"; ...@@ -3,7 +3,7 @@ syntax = "proto3";
import "google/protobuf/empty.proto"; import "google/protobuf/empty.proto";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";
option go_package = "git.perx.ru/perxis/perxis-go/environments;environments"; option go_package = "git.perx.ru/perxis/perxis-go/proto/environments;environments";
package content.environments; package content.environments;
...@@ -92,7 +92,8 @@ message MigrateRequest { ...@@ -92,7 +92,8 @@ message MigrateRequest {
message MigrateOptions { message MigrateOptions {
// Ожидать завершения миграции в синхронном режиме. Если в запрос передан контекст с таймаутом, // Ожидать завершения миграции в синхронном режиме. Если в запрос передан контекст с таймаутом,
// то после истечения таймаута миграция продолжится в асинхронном режиме // то после истечения таймаута миграция продолжится в асинхронном режиме
bool wait = 1; bool wait = 1; // Deprecated - миграция по умолчанию выполняется синхронно
bool async = 2; // Выполнить миграцию в асинхронном режиме
} }
service Environments { service Environments {
...@@ -103,5 +104,13 @@ service Environments { ...@@ -103,5 +104,13 @@ service Environments {
rpc SetAlias(SetAliasRequest) returns(google.protobuf.Empty) {} rpc SetAlias(SetAliasRequest) returns(google.protobuf.Empty) {}
rpc RemoveAlias(RemoveAliasRequest) returns(google.protobuf.Empty) {} rpc RemoveAlias(RemoveAliasRequest) returns(google.protobuf.Empty) {}
rpc Delete(DeleteRequest) returns(google.protobuf.Empty) {} rpc Delete(DeleteRequest) returns(google.protobuf.Empty) {}
// Выполнить миграцию окружения. По умолчанию выполняется в синхронном режиме, для асинхронного выполнения можно
// передать соответствующую настройку в опциях `MigrateRequest.options`
//
// При вызове миграции:
// - выполняются миграции для всех коллекций окружения
//
// В случае возникновения ошибок миграции они записываются в поле `Environment.state`
rpc Migrate(MigrateRequest) returns(google.protobuf.Empty) {} rpc Migrate(MigrateRequest) returns(google.protobuf.Empty) {}
} }
\ No newline at end of file
...@@ -10,157 +10,27 @@ ...@@ -10,157 +10,27 @@
*/ */
syntax = "proto3"; syntax = "proto3";
option go_package = "git.perx.ru/perxis/perxis-go/extensions;extensions"; option go_package = "git.perx.ru/perxis/perxis-go/proto/extensions;extensions";
package extensions; package extensions;
import "references/references.proto"; import "references/references.proto";
// Extension - API расширения // Target - определяет как открывать результат выполнения действия в пользовательском интерфейсе
service Extension { enum Target {
DEFAULT = 0; // По умолчанию (если нет других условий, то MODAL)
// Для установки расширения выполняется запрос к сервису с указанием расширений которые должны быть установлены. Если MODAL = 1; // Открывать в модальном окне
// расширение уже установлено процесс возвращает ошибку. WIDE = 2; // Открывать в широком модальном окне
rpc Install(InstallRequest) returns (InstallResponse) {} MAIN = 4; // Открывать в главной рабочей области (часть без меню)
DRAWER = 5; // Открывать в боковой панели
// Можно запросить проверку статуса установки для расширения. При этом расширение проверяет наличие необходимых данных в NOTIFICATION = 6; // Открывать виде всплывающего уведомлении
// пространстве или наличие новой версии расширения и сообщает об этом. Никаких действий с данными пространства не BLANK = 7; // Открывать в новой вкладке
// производится. NONE = 100; // Не отображать результат
rpc Check(CheckRequest) returns (CheckResponse) {}
// Сервис выполняет необходимые действия с данными и миграции для соответствия нужной версии расширения.
// Если расширение не установлено процесс обновления возвращает ошибку.
rpc Update(UpdateRequest) returns (UpdateResponse) {}
// Удаление расширения из пространства.
rpc Uninstall(UninstallRequest) returns (UninstallResponse) {} // Удаление расширений
// Пользовательские Действия (Actions)
//
// Пользовательские действия позволяют расширить функционал пользовательского интерфейса путем
// добавления в интерфейс элементов взаимодействуя с которыми пользователь может вызывать реакцию на
// сервере или переход в интерфейсе.
//
// Пользовательские действия добавляются при установке расширений в системную коллекции `System/Actions`.
// Коллекция создается автоматически менеджером расширений. При установке так же отображается меню `Действия`
// доступное для всех пользователей.
//
// Примеры пользовательских действий:
// - "Собрать сайт" - добавляется Perxis.Web для сборки сайта, доступна пользователю через меню,
// параметры space_id, env_id. При вызове выполняется запрос на сервер ProcessAction.
// - "Посмотреть задачи" - добавляется Tasks для перехода на коллекцию задач. Отображается в меню,
// параметры space_id, env_id.
//
// Приложения так же могут использовать действия для вызова обработки в других приложениях при
// необходимости.
rpc Action(ActionRequest) returns(ActionResponse) {} // Выполнить указанное действие
}
message InstallRequest {
repeated string extensions = 10000; // Список расширений для установки
string space_id = 10010; // Пространство для установки расширений
string env_id = 10020; // Идентификатор окружения для установки (по умолчанию master)
bool force = 10100; // Игнорировать и автоматически исправлять ошибки установки
}
message ExtensionRequestResult {
enum State {
OK = 0; // Запрос завершен
ERROR = 1; // Возникла ошибка
PENDING = 2; // Запрос ожидает выполнения
IN_PROGRESS = 3; // Запрос выполняется
PARAMETERS_REQUIRED= 4; // Требуются дополнительные данные для выполнения запроса
}
State state = 10000; // Состояние расширение
string extension = 10100; // Имя расширения
string msg = 10200; // Сообщение
string error = 10300; // Ошибка (state == ERROR)
bool update_available = 10400; // Доступно обновление
}
message InstallResponse {
repeated ExtensionRequestResult results = 10000; // Список состояний расширений после установки
}
message UninstallRequest {
repeated string extensions = 10000; // Список расширений для удаления
string space_id = 10010; // Пространство для удаления расширений
string env_id = 10020; // Идентификатор окружения для установки (по умолчанию master)
bool remove = 10100; // Удалить все коллекции и данные
bool force = 10200; // Удалять расширения вне зависимости от возможных ошибок, без учета зависимостей
}
message UninstallResponse {
repeated ExtensionRequestResult results = 10000; // Список состояний расширений после удаления
}
message UpdateRequest {
repeated string extensions = 10000; // Список расширений для удаления
string space_id = 10010; // Пространство для удаления расширений
string env_id = 10020; // Идентификатор окружения для установки (по умолчанию master)
bool force = 10100; // Выполнять обновление и автоматически исправлять ошибки
}
message UpdateResponse {
repeated ExtensionRequestResult results = 10000; // Список состояний расширений после удаления
}
message CheckRequest {
repeated string extensions = 10000; // Список расширений для удаления
string space_id = 10010; // Пространство для удаления расширений
string env_id = 10020; // Идентификатор окружения для установки (по умолчанию master)
}
message CheckResponse {
repeated ExtensionRequestResult results = 10000; // Список состояний расширений
}
// ActionRequest - запрос на выполнение действия к расширению (или менеджеру расширений)
message ActionRequest {
string extension = 1000;
string action = 10100;
string space_id = 10500;
string env_id = 10510;
string collection_id = 10520;
string item_id = 10530;
repeated string item_ids = 10540;
// Поля к которым применимо действие. В случае если действие выполняется из списка записей, содержит перечень
// полей которые пользователь выбрал для отображения в интерфейсе.
repeated string fields = 10550;
map<string,string> metadata = 11000;
// Ссылки на записи используемые для выполнения действия (назначение ссылок зависит от действия и расширения)
repeated content.references.Reference refs = 11010;
// Ссылка на документ с параметрами выполнения Action.
// Чтобы при выполнении действия открывалась форма параметров, необходимо указать `Action.params_collection`
content.references.Reference params = 11020;
}
message ActionResponse {
enum State {
DONE = 0; // Запрос завершен
ERROR = 1; // Возникла ошибка
PENDING = 2; // Запрос ожидает выполнения
IN_PROGRESS = 3; // Запрос выполняется
PARAMETERS_REQUIRED = 4; // Требуются дополнительные данные для выполнения запроса
}
State state = 10000; // Состояние расширение
string msg = 10100; // Сообщение о выполнении действия
string error = 10200; // Сообщение в случае ошибки
repeated Action next = 10300; // Следующие возможные действия. Интерфейс отображает как варианты дальнейших действий пользователя
map<string,string>metadata = 10400; // Метаданные запроса
repeated content.references.Reference refs = 10320; // Ссылки на записи (назначение ссылок зависит от действия и расширения)
} }
/** /**
Action описывает как коллекцию в системе с предуставновленными действиями, так и возможные дальнейшие действия после Action описывает как коллекцию в системе с предустановленными действиями, так и возможные дальнейшие действия после
получения ответа (см. `ActionResponse.next`) получения ответа (см. `ActionResponse.next`)
Если поле `request` присутствует, но не все требуемые поля заполнены, то значения для них берутся из текущих значений. Если поле `request` присутствует, но не все требуемые поля заполнены, то значения для них берутся из текущих значений.
...@@ -178,7 +48,7 @@ message Action { ...@@ -178,7 +48,7 @@ message Action {
// Kind описывает c какой сущность системы связано действие и что требуется передать в качестве параметров // Kind описывает c какой сущность системы связано действие и что требуется передать в качестве параметров
// Интерфейс загружает пользовательские действия и отображает их в интерфейсе в зависимости от ActionType. // Интерфейс загружает пользовательские действия и отображает их в интерфейсе в зависимости от ActionType.
enum Kind { enum Kind {
DEFAULT = 0; // Действие не отображается в интерфейсе и могут используется для выполнения дополнительных запросов (см. `ActionResponse.next`) или напрямую из сторонних приложений. DEFAULT = 0; // Действие не отображается в интерфейсе и может использоваться для выполнения дополнительных запросов (см. `ActionResponse.next`) или напрямую из сторонних приложений.
SPACE = 1; // Действие связано с пространством (требуется передача space_id). Отображается в меню "Действия". SPACE = 1; // Действие связано с пространством (требуется передача space_id). Отображается в меню "Действия".
ENVIRONMENT = 2; // Действие связано с окружением (требуется передача space_id, env_id). Отображается в меню "Действия". ENVIRONMENT = 2; // Действие связано с окружением (требуется передача space_id, env_id). Отображается в меню "Действия".
COLLECTION = 3; // Действие связано с коллекцией (требуется передача space_id, env_id, collection_id). Отображается на экране списка записей. COLLECTION = 3; // Действие связано с коллекцией (требуется передача space_id, env_id, collection_id). Отображается на экране списка записей.
...@@ -188,14 +58,43 @@ message Action { ...@@ -188,14 +58,43 @@ message Action {
CREATE = 7; // Действие создание записи (требуется передача space_id, env_id, collection_id). CREATE = 7; // Действие создание записи (требуется передача space_id, env_id, collection_id).
} }
// DEPRECATED: Используйте `action` в формате URI
string extension = 10000; // Расширение string extension = 10000; // Расширение
string action = 10100; // Идентификатор действия
// Идентификатор действия (в формате URI)
// Варианты использования:
// - пустой - никаких действий не выполняется
// - `action_id` - простое действие (если установлено значение `extension`, то оно используется)
// - `grpc:///extension_id/action_id` - полное действие с указанием расширения
// - `https://host/path` - действие по HTTP(S)
// - `ui:///path` - действие в интерфейсе
// - `/path` - действие в интерфейсе - DEPRECATED: Используйте `ui:///path`
//
// Пример: `https://example.com/api/v1/action` - будет выполнен запрос HTTP по указанному URL.
// Сервер может вернуть ответ в формате JSON или HTML/MD. Дальнейшие действия определяется оп заголовку ответа
// `Content-Type`:
// - `application/json` - ответ в формате JSON. Структура ответа соответствует `ActionResponse` и интерпретируется
// тем же способом что и ответ от GRPC.
// - `text/html` - ответ в формате HTML. Интерфейс отображает ответ в виде сообщения в IFrame
// - `text/markdown` - ответ в формате MD. Интерфейс отображает ответ в виде сообщения.
//
// Переменные `:var` заменяются на текуще значение в пользовательском интерфейсе
// Перечень переменных для подстановки:
// - :spaceId
// - :envId
// - :colId
// - :itemId
//
// Пример: `ui:///spaces/:spaceId/envs/:envId/cols/:colId` - будет выполнено действие в интерфейсе.
string action = 10100;
Target target = 10110; // как должен отображаться результат действия
string parent = 10120; // Идентификатор родительского действия (для отображения в меню)
string name = 10200; // Название действия для отображения в интерфейсе (пункт меню, кнопка). string name = 10200; // Название действия для отображения в интерфейсе (пункт меню, кнопка).
string description = 10210; // Описание действия для отображения в интерфейсе string description = 10210; // Описание действия для отображения в интерфейсе
string icon = 10220; // Название иконки для отображения действия в интерфейсе string icon = 10220; // Название иконки для отображения действия в интерфейсе
content.references.Reference image = 10230; // Изображение для отображения в действия в интерфейсе content.references.Reference image = 10230; // Изображение для отображения в действия в интерфейсе
repeated string groups = 10240; // Группы отображения действия в интерфейсе repeated string groups = 10240; // Группы отображения действия в интерфейсе
Kind kind = 10300; // Указывает на что направлено действие Kind kind = 10300; // Указывает область действия (где отображается действие)
repeated string classes = 10310; // Классы данных к которым применимо действие (название коллекций или специальных групп в рамках которых данное действие применимо) repeated string classes = 10310; // Классы данных к которым применимо действие (название коллекций или специальных групп в рамках которых данное действие применимо)
// Для `CREATE` действуют следующие правила: // Для `CREATE` действуют следующие правила:
// - Для создание записей в коллекции применимы действия которые содержат в classes название коллекции // - Для создание записей в коллекции применимы действия которые содержат в classes название коллекции
...@@ -209,6 +108,8 @@ message Action { ...@@ -209,6 +108,8 @@ message Action {
string params_collection = 10330; string params_collection = 10330;
ActionRequest request = 10400; // Параметры запроса (используется в случае `ActionResponse.next`) ActionRequest request = 10400; // Параметры запроса (используется в случае `ActionResponse.next`)
// DEPRECATED: Используйте `action` вместо `navigation_route`
bool navigation_action = 10500; // Флаг указывающий что действие переносить пользователя в другую часть интерфейса, а не отправляет запрос на сервер bool navigation_action = 10500; // Флаг указывающий что действие переносить пользователя в другую часть интерфейса, а не отправляет запрос на сервер
// navigation_route - Строка шаблон для перехода в интерфейсе // navigation_route - Строка шаблон для перехода в интерфейсе
...@@ -222,5 +123,48 @@ message Action { ...@@ -222,5 +123,48 @@ message Action {
// - :colId // - :colId
// - :itemId // - :itemId
// //
// DEPRECATED: Используйте `action`
string navigation_route = 10510; string navigation_route = 10510;
}
\ No newline at end of file // Параметр указывающий что действие выполняется автоматически
// Если указано, то действие выполняется автоматически каждый раз при загрузке приложения
bool autorun = 10520;
// Параметр указывающий что действие требует подтверждения пользователя
// Перед выполнением действия пользователю отображается информация о действии и кнопки подтверждения/отмены
bool confirm = 10530;
enum View {
DEFAULT_VIEW = 0; // Отображать в интерфейсе по умолчанию
HIDDEN_VIEW = 1; // Не отображать в интерфейсе
MAIN_MENU_VIEW = 2; // Отображать в главном меню
MAIN_MENU_BOTTOM_VIEW = 3; // Отображать в главном меню внизу
}
View view = 10540; // Отображение действия в интерфейсе
int32 order = 10550; // Порядок отображения действия в интерфейсе (Для пунктов меню)
}
// ActionRequest - запрос на выполнение действия к расширению (или менеджеру расширений)
message ActionRequest {
string extension = 1000;
string action = 10100;
string space_id = 10500;
string env_id = 10510;
string collection_id = 10520;
string item_id = 10530;
repeated string item_ids = 10540;
// Поля к которым применимо действие. В случае если действие выполняется из списка записей, содержит перечень
// полей которые пользователь выбрал для отображения в интерфейсе.
repeated string fields = 10550;
map<string,string> metadata = 11000;
// Ссылки на записи используемые для выполнения действия (назначение ссылок зависит от действия и расширения)
repeated content.references.Reference refs = 11010;
// Ссылка на документ с параметрами выполнения Action.
// Чтобы при выполнении действия открывалась форма параметров, необходимо указать `Action.params_collection`
content.references.Reference params = 11020;
}
/**
# Расширения (Extensions)
Расширения представляют собой отдельные сервисы предоставляющие дополнительные возможности для пользователей. Сервис
может предоставлять несколько расширений одновременно.
Для координации взаимодействия используется сервис менеджер расширений (Extension Manager). Для предоставления своих функций в систему сервис должен
зарегистрироваться на контроллере.
*/
syntax = "proto3";
option go_package = "git.perx.ru/perxis/perxis-go/proto/extensions;extensions";
package extensions;
import "references/references.proto";
import "common/operation.proto";
import "extensions/extension.proto";
// ExtensionService - API расширения
// Сервис должен реализовывать методы `common.OperationService` для работы операциями.
service ExtensionService {
// Install выполняет установку указанных расширений. Если
// расширение уже установлены выполняет процесс переустановки. Возвращает longtime операцию
rpc Install(InstallRequest) returns (common.Operation) {}
// Uninstall выполняет удаление указанных расширений.
rpc Uninstall(UninstallRequest) returns (common.Operation) {}
// Check выполняет проверку установки для расширения. При этом расширение проверяет наличие необходимых данных в
// пространстве или наличие новой версии расширения и сообщает об этом. Никаких действий с данными пространства не
// производится.
rpc Check(CheckRequest) returns (common.Operation) {}
// Пользовательские Действия (Actions)
//
// Пользовательские действия позволяют расширить функционал пользовательского интерфейса путем
// добавления в интерфейс элементов взаимодействуя с которыми пользователь может вызывать реакцию на
// сервере или переход в интерфейсе.
//
// Пользовательские действия добавляются при установке расширений в системную коллекции `System/Actions`.
// Коллекция создается автоматически менеджером расширений. При установке так же отображается меню `Действия`
// доступное для всех пользователей.
//
// Примеры пользовательских действий:
// - "Собрать сайт" - добавляется Perxis.Web для сборки сайта, доступна пользователю через меню,
// параметры space_id, env_id. При вызове выполняется запрос на сервер ProcessAction.
// - "Посмотреть задачи" - добавляется Tasks для перехода на коллекцию задач. Отображается в меню,
// параметры space_id, env_id.
//
// Приложения так же могут использовать действия для вызова обработки в других приложениях при
// необходимости.
rpc Action(ActionRequest) returns(ActionResponse) {} // Выполнить указанное действие
}
// InstallRequest - запрос на установку расширений
message InstallRequest {
repeated string extensions = 10000; // Список расширений для установки
string space_id = 10010; // Пространство для установки расширений
string env_id = 10020; // Идентификатор окружения для установки
bool force = 10100; // Устанавливать расширения вне зависимости от возможных ошибок
}
// UninstallRequest - запрос на удаление расширений
message UninstallRequest {
repeated string extensions = 10000; // Список расширений для удаления
string space_id = 10010; // Пространство для удаления расширений
string env_id = 10020; // Идентификатор окружения для установки (по умолчанию master)
bool remove = 10100; // Удалить сделанные расширением изменения в пространстве, если возможно
bool force = 10200; // Удалять расширения вне зависимости от возможных ошибок, без учета зависимостей
}
// CheckRequest - запрос на проверку статуса установки расширений
message CheckRequest {
repeated string extensions = 10000; // Список расширений для проверки
string space_id = 10010; // Пространство
string env_id = 10020; // Идентификатор окружения (по умолчанию master)
}
message ActionResponse {
enum State {
DONE = 0; // Запрос завершен
ERROR = 1; // Возникла ошибка
PENDING = 2; // Запрос ожидает выполнения
IN_PROGRESS = 3; // Запрос выполняется
PARAMETERS_REQUIRED = 4; // Требуются дополнительные данные для выполнения запроса
}
enum Format {
PLAIN = 0;
HTML = 1;
MARKDOWN = 2;
}
State state = 10000; // Состояние расширение
Target target = 10010; // Как открывать результат выполнения действия в пользовательском интерфейсе (переопределяет значение в Action)
Format format = 10050; // Формат полей msg и error
string msg = 10100; // Сообщение о выполнении действия
string title = 10110; // Текст для отображения в интерфейсе
string image = 10140; // Изображение для отображения в интерфейсе (шапке окна)
string error = 10200; // Сообщение в случае ошибки (дополнительно к msg)
repeated Action next = 10300; // Следующие возможные действия. Интерфейс отображает как варианты дальнейших действий пользователя
map<string,string>metadata = 10400; // Метаданные запроса
repeated content.references.Reference refs = 10320; // Ссылки на записи (назначение ссылок зависит от действия и расширения)
}
...@@ -27,33 +27,72 @@ ...@@ -27,33 +27,72 @@
*/ */
syntax = "proto3"; syntax = "proto3";
option go_package = "git.perx.ru/perxis/perxis-go/extensions;extensions"; option go_package = "git.perx.ru/perxis/perxis-go/proto/extensions;extensions";
package extensions; package extensions;
// ExtensionManager - менеджер расширений. Должен реализовывать так же сервис Extension // ExtensionManager - менеджер расширений. Должен реализовывать так же сервис Extension
service ExtensionManager { service ExtensionManagerService {
// ## Регистрация расширений // ## Регистрация расширений
// //
// Регистрация\Дерегистрация происходить через сервис менеджера расширений (Extension Manager). В процессе регистрации сервис сообщает // Регистрация\Дерегистрация происходит через сервис менеджера расширений (Extension Manager). В процессе регистрации сервис сообщает
// о поддерживаемых сервисом действиях (Actions) и версии сервиса и зависимостях: // о поддерживаемых сервисом действиях (Actions) и версии сервиса и зависимостях:
// 1. Действия (Actions) - перечень действия которые обрабатываются сервисом. Включает в себя как системные действия, // ~~1. Действия (Actions) - перечень действия которые обрабатываются сервисом. Включает в себя как системные действия,
// так и пользовательские, которые могут быть использованы в интерфейсе; // так и пользовательские, которые могут быть использованы в интерфейсе;~~
// 2. Имя сервиса/расширения - название сервиса внутри системы; // 2. Имя сервиса/расширения - название сервиса внутри системы;
// 3. Версия сервиса - сервис сообщает текущую версию сервиса. Контроллер сообщает пользователю о возможности обновления // 3. Версия сервиса - сервис сообщает текущую версию сервиса. Контроллер сообщает пользователю о возможности обновления
// расширения при смене версии; // расширения при смене версии;
// 4. Описание версии - содержит информацию об изменениях в последних версиях расширения; // 4. Описание версии - содержит информацию об изменениях в последних версиях расширения;
// 5. Зависимости - перечень расширений которые необходимы сервису для функционирования. При установке сервиса // 5. Зависимости - перечень расширений которые необходимы сервису для функционирования. При установке сервиса
// все расширения от которых он зависит, будут так же установлены. // все расширения, от которых он зависит, будут также установлены.
rpc RegisterExtensions(RegisterExtensionsRequest) returns (RegisterExtensionsResponse) {} rpc RegisterExtensions(RegisterExtensionsRequest) returns (RegisterExtensionsResponse) {}
rpc UnregisterExtensions(UnregisterExtensionsRequest) returns (UnregisterExtensionsResponse) {} rpc UnregisterExtensions(UnregisterExtensionsRequest) returns (UnregisterExtensionsResponse) {}
// Получить список зарегистрированных сервисов // Получить список зарегистрированных сервисов
rpc ListExtensions(ListExtensionsRequest) returns (ListExtensionsResponse) {} // Получить список сервисов rpc ListRegisteredExtensions(ListRegisteredExtensionsRequest) returns (ListRegisteredExtensionsResponse) {} // Получить список сервисов
// ListExtensions - получить информацию о расширениях
rpc ListExtensions(ListExtensionsRequest) returns (ListExtensionsResponse) {} // Получить описание сервиса
} }
// ServiceDescription описание сервиса // ListExtensionsRequest - запрос на получение статуса расширений в пространстве и окружении
message ListExtensionsRequest {
// Имя расширения (опционально), regexp. Фильтр по расширениям является приоритетным
// относительно остальных фильтров - если в `ListExtensionsRequest.extensions` передано
// [ a, b, c ], то в `ListExtensionsResponse.extensions` вернется три элемента с информацией о
// каждом из расширений
repeated string extensions = 1;
string space_id = 2; // Пространство имен расширения
string env_id = 3; // Идентификатор окружения
// Вернуть список расширений, которые находятся в одном из переданных состояний
// Если список состояний пустой, по умолчанию возвращаются расширения в любом состоянии,
// кроме NOT_INSTALLED
repeated State state = 4;
}
// ListExtensionsResponse - описание расширений. Результирующий список возвращается всегда
// в отсортированном виде:
// - Если `ListExtensionsRequest.extensions` пустой, то отсортированный по идентификатору расширения
// - Если `ListExtensionsRequest.extensions` заполнен, то возвращаются расширения в соответствующем
// запросу порядке
message ListExtensionsResponse {
message ExtensionInfo {
string extension = 10100; // Имя расширения
string title = 10110;
State state = 10120;
string msg = 10200; // Сообщение
string error = 10300; // Ошибка (state == ERROR)
bool not_found = 10350; // Расширение не найдено
bool update_available = 10500; // Доступно обновление
string installed_version = 10510; // Установленная версия расширения
string available_version = 10520; // Доступная версия расширения
}
repeated ExtensionInfo extensions = 1;
}
// ExtensionDescriptor описание расширения (возвращается сервисом при регистрации)
message ExtensionDescriptor { message ExtensionDescriptor {
string extension = 10000; // Имя расширения string extension = 10000; // Имя расширения
string title = 10010; // Название расширения string title = 10010; // Название расширения
...@@ -78,30 +117,26 @@ message UnregisterExtensionsRequest { ...@@ -78,30 +117,26 @@ message UnregisterExtensionsRequest {
message UnregisterExtensionsResponse {} message UnregisterExtensionsResponse {}
message ListExtensionsFilter { message ListRegisteredExtensionsRequest {
repeated string extension = 1; // Список имен сервисов для получения результатов. Список может содержать регулярные выражения. repeated string extension = 1; // Список имен сервисов для получения результатов. Список может содержать регулярные выражения.
// repeated string action = 2; // Список действий обрабатываемых сервисами. Список может содержать регулярные выражения.
} }
message ListExtensionsRequest { message ListRegisteredExtensionsResponse {
ListExtensionsFilter filter = 1;
}
message ListExtensionsResponse {
repeated ExtensionDescriptor extensions = 1; repeated ExtensionDescriptor extensions = 1;
} }
// Описание коллекций // Описание коллекций
// space_extensions (Пространство/Расширения) // space_extensions (Пространство/Расширения)
enum State {
NOT_INSTALLED = 0;
INSTALLED = 1;
IN_PROGRESS = 2;
FAIL = 3;
PENDING = 4;
}
message SpaceExtensions { message SpaceExtensions {
enum State {
PENDING = 0;
INSTALLED = 1;
IN_PROGRESS = 2;
FAIL = 3;
}
string extension = 10000; string extension = 10000;
string title = 10010; string title = 10010;
string version = 10100; string version = 10100;
...@@ -109,4 +144,4 @@ message SpaceExtensions { ...@@ -109,4 +144,4 @@ message SpaceExtensions {
State state = 10300; State state = 10300;
string status_error = 10400; // Сообщение к ошибке string status_error = 10400; // Сообщение к ошибке
string status_msg = 10500; // Сообщение к статусу string status_msg = 10500; // Сообщение к статусу
} }
\ No newline at end of file
...@@ -2,7 +2,7 @@ syntax = "proto3"; ...@@ -2,7 +2,7 @@ syntax = "proto3";
import "google/protobuf/empty.proto"; import "google/protobuf/empty.proto";
option go_package = "git.perx.ru/perxis/perxis-go/files;files"; option go_package = "git.perx.ru/perxis/perxis-go/proto/files;files";
package files; package files;
......
...@@ -2,7 +2,7 @@ syntax = "proto3"; ...@@ -2,7 +2,7 @@ syntax = "proto3";
import "files/files.proto"; import "files/files.proto";
option go_package = "git.perx.ru/perxis/perxis-go/images;images"; option go_package = "git.perx.ru/perxis/perxis-go/proto/images;images";
package images; package images;
......
...@@ -4,7 +4,7 @@ import "google/protobuf/timestamp.proto"; ...@@ -4,7 +4,7 @@ import "google/protobuf/timestamp.proto";
import "google/protobuf/empty.proto"; import "google/protobuf/empty.proto";
import "google/protobuf/wrappers.proto"; import "google/protobuf/wrappers.proto";
option go_package = "git.perx.ru/perxis/perxis-go/invitations;invitations"; option go_package = "git.perx.ru/perxis/perxis-go/proto/invitations;invitations";
package content.invitations; package content.invitations;
......
...@@ -10,10 +10,11 @@ syntax = "proto3"; ...@@ -10,10 +10,11 @@ syntax = "proto3";
import "google/protobuf/empty.proto"; import "google/protobuf/empty.proto";
import "common/common.proto"; import "common/common.proto";
import "common/error.proto";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";
import "google/protobuf/struct.proto"; import "google/protobuf/struct.proto";
option go_package = "git.perx.ru/perxis/perxis-go/items;items"; option go_package = "git.perx.ru/perxis/perxis-go/proto/items;items";
package content.items; package content.items;
...@@ -66,10 +67,7 @@ message Item { ...@@ -66,10 +67,7 @@ message Item {
google.protobuf.Struct data = 11; google.protobuf.Struct data = 11;
map<string, google.protobuf.Struct> translations = 12; map<string, google.protobuf.Struct> translations = 12;
string revision_id = 13; string revision_id = 13;
google.protobuf.Timestamp published_at = 14; string revision_description = 14;
string published_by = 15;
google.protobuf.Timestamp archived_at = 16;
string archived_by = 17;
string locale = 18; string locale = 18;
bool deleted = 19; bool deleted = 19;
bool hidden = 20; bool hidden = 20;
...@@ -123,7 +121,7 @@ message Filter { ...@@ -123,7 +121,7 @@ message Filter {
} }
message CreateOptions { message CreateOptions {
bool update_attrs = 1; bool update_attrs = 1; // позволяет обновить системные поля: created_by, created_at, created_rev_at, updated_by, updated_at
} }
message FindOptions { message FindOptions {
...@@ -135,7 +133,7 @@ message FindOptions { ...@@ -135,7 +133,7 @@ message FindOptions {
} }
message UpdateOptions { message UpdateOptions {
bool update_attrs = 1; bool update_attrs = 1; // позволяет обновить системные поля: created_by, created_at, created_rev_at, updated_by, updated_at
} }
message GetPublishedOptions { message GetPublishedOptions {
...@@ -143,11 +141,20 @@ message GetPublishedOptions { ...@@ -143,11 +141,20 @@ message GetPublishedOptions {
} }
message DeleteOptions { message DeleteOptions {
bool erase = 1; bool update_attrs = 1; // позволяет обновить системные поля: created_by, created_at, created_rev_at, updated_by, updated_at
bool erase = 2; // полное удаление без сохранения удаленной версии объекта
}
message UndeleteOptions {
bool update_attrs = 1; // позволяет обновить системные поля: created_by, created_at, created_rev_at, updated_by, updated_at
} }
message PublishOptions { message PublishOptions {
bool update_attrs = 1; bool update_attrs = 1; // позволяет обновить системные поля: created_by, created_at, created_rev_at, updated_by, updated_at
}
message UnpublishOptions {
bool update_attrs = 1; // позволяет обновить системные поля: created_by, created_at, created_rev_at, updated_by, updated_at
} }
message FindPublishedOptions { message FindPublishedOptions {
...@@ -230,18 +237,13 @@ message UpdateRequest { ...@@ -230,18 +237,13 @@ message UpdateRequest {
} }
message DeleteRequest { message DeleteRequest {
string space_id = 1; Item item = 1; // важны только переданные внутри идентификаторы или, если указана опция update_attrs, поля которые изменяются: created_by, created_at, created_rev_at, updated_by, updated_at
string env_id = 2; DeleteOptions options = 2;
string collection_id = 3;
string item_id = 4;
DeleteOptions options = 5;
} }
message UndeleteRequest { message UndeleteRequest {
string space_id = 1; Item item = 1;
string env_id = 2; UndeleteOptions options = 2;
string collection_id = 3;
string item_id = 4;
} }
message PublishRequest { message PublishRequest {
...@@ -251,6 +253,7 @@ message PublishRequest { ...@@ -251,6 +253,7 @@ message PublishRequest {
message UnpublishRequest { message UnpublishRequest {
Item item = 1; Item item = 1;
UnpublishOptions options = 2;
} }
message GetPublishedRequest { message GetPublishedRequest {
......
...@@ -2,7 +2,7 @@ syntax = "proto3"; ...@@ -2,7 +2,7 @@ syntax = "proto3";
import "google/protobuf/empty.proto"; import "google/protobuf/empty.proto";
option go_package = "git.perx.ru/perxis/perxis-go/locales;locales"; option go_package = "git.perx.ru/perxis/perxis-go/proto/locales;locales";
package content.locales; package content.locales;
......
syntax = "proto3";
package logs;
import "google/protobuf/timestamp.proto";
import "google/protobuf/any.proto";
import "common/error.proto";
option go_package = "git.perx.ru/perxis/perxis-go/proto/logs;logs";
// 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_id = 8;
// caller содержит идентификатор сущности вызвавшей событиe, аналогично полю object
//
// Примеры:
// /users/<user_id> - пользователь
// /spaces/<space_id>/clients/<client_id> - клиент
// /services/<service_id> - сервис
string caller_id = 9;
// attr содержит дополнительные связанные с событием атрибуты в формате Any
// позволяет добавить дополнительные данные в событие
google.protobuf.Any attr = 10;
// tags содержит теги связанные с событием, на усмотрение сервиса
repeated string tags = 11;
}
\ No newline at end of file
syntax = "proto3";
package logs;
import "common/common.proto";
import "common/error.proto";
import "logs/log.proto";
import "google/protobuf/timestamp.proto";
option go_package = "git.perx.ru/perxis/perxis-go/proto/logs;logs";
// Сервис для записи активности в системе
// Позволяет всем компонентам системы записывать логи в единое хранилище и получать их оттуда
service LogsService {
// Метод для записи логов
rpc Log(LogRequest) returns (LogResponse) {}
// Метод для поиска логов по заданным параметрам
rpc Find(FindRequest) returns (FindResponse) {}
// Метод для удаления логов по заданным параметрам
rpc Delete(DeleteRequest) returns (DeleteResponse) {}
}
// Запрос для лога
message LogRequest {
// Запись лога
repeated LogEntry entries = 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