From ee8ffd957976a21256f2b86e30f2f936cd68870f Mon Sep 17 00:00:00 2001 From: Vgorodilov Date: Wed, 10 Apr 2024 18:01:25 +0300 Subject: [PATCH] add restoring backup/history/backup list --- proto/v1/backup.proto | 96 +++++++++++++++++++++++++++++++++++++++ proto/v1/cloud.proto | 3 ++ proto/v1/structures.proto | 82 +++++++++++++++++++++++++++++++++ 3 files changed, 181 insertions(+) create mode 100644 proto/v1/backup.proto diff --git a/proto/v1/backup.proto b/proto/v1/backup.proto new file mode 100644 index 0000000..0f349c2 --- /dev/null +++ b/proto/v1/backup.proto @@ -0,0 +1,96 @@ +syntax = 'proto3'; + +package beget.cloud.v1.backup; + +import "google/api/annotations.proto"; +import "cloud/proto/v1/structures.proto"; + +service BackupService { + rpc getAvailableCopies(GetAvailableCopiesRequest) returns (GetAvailableCopiesResponse) { + option (google.api.http) = { + get: "/v1/cloud/backup" + }; + } + + rpc getOrders(GetOrdersRequest) returns (GetOrdersResponse) { + option (google.api.http) = { + get: "/v1/cloud/backup/orders" + }; + } + + rpc restore(RestoreRequest) returns (RestoreResponse) { + option (google.api.http) = { + post: "/v1/cloud/backup/{service_id}/restore" + body: "*" + }; + } +} + +message GetAvailableCopiesRequest { +} + +message GetAvailableCopiesResponse { + // Список доступных бекапов + repeated structures.CopyInfo copy = 1; +} + +message GetOrdersRequest { + // Количество записей на страницу + uint32 limit = 1; + + // Смещение относительно нулевой (последней) записи + uint32 offset = 2; +} + +message GetOrdersResponse { + // История заданий по восстановлению + repeated structures.OrderInfo order = 1; +} + +message RestoreRequest { + // Идентификатор бекапа + uint64 backup_id = 1; + + // Идентификатор сервиса в формате uuid v4 + string service_id = 2; +} + +message RestoreResponse { + oneof response { + // Информация о восстановлении + structures.OrderInfo order = 1; + + // Произошла ошибка при создании заявки на восстановление из бекапа + Error error = 2; + } + + message Error { + // Описание ошибки + string message = 1; + + // Код ошибки + Code code = 2; + + enum Code { + _ = 0; + + // Внутренняя ошибка + INTERNAL_ERROR = 1; + + // Бекап в процессе создания + BACKUP_NOT_DONE = 2; + + // Конфигурация VPS не подходит для данного бекапа + CONFIGURATION_NOT_ENOUGH = 3; + + // В данном статусе VPS невозможно восстановить бекап (VPS не в статусе running/stopped) + UNSUITABLE_VPS_STATUS = 4; + + // Регион бекапа не соответствует региону целевого сервера + REGION_MISMATCH = 5; + + // Тип сервиса не соответствует типу бекапа + INCORRECT_SERVICE_TYPE = 6; + } + } +} \ No newline at end of file diff --git a/proto/v1/cloud.proto b/proto/v1/cloud.proto index 47c6e7e..85fbdcc 100644 --- a/proto/v1/cloud.proto +++ b/proto/v1/cloud.proto @@ -132,6 +132,9 @@ message CreateRequest { // Регион, в котором будет создан сервис. По-умолчанию: ru1 string region = 6; + + // Идентификатор бекапа, который будет восстановлен на созданный сервер + string backup_id = 8; } message CreateResponse { diff --git a/proto/v1/structures.proto b/proto/v1/structures.proto index c3d45d9..42a55a3 100644 --- a/proto/v1/structures.proto +++ b/proto/v1/structures.proto @@ -75,3 +75,85 @@ message ParamConfig { repeated string value = 1; } } + +message CopyInfo { + // Идентификатор копии + uint64 id = 1; + + // Идентификатор сервиса, в формате uuid v4 + string service_id = 2; + + // Имя БД, с которой создавалась резервная копия + string database_name = 3; + + // Тип БД + string database_type = 4; + + // Версия БД + string database_version = 5; + + // Дата создания копии в RFC3339 + string date_create = 6; + + // Общий размер резервной копии в байтах + uint64 size = 7; + + // Регион, в котором доступна копия + string region = 8; + + // Конфигурация, которая использовалась сервером в момент создания резервной копии + Configuration configuration = 9; + + message Configuration { + // Количество ядер процессора + uint32 cpu_count = 1; + + // Объем дисковой квоты в Мб + uint32 disk_size = 2; + + // Объем оперативной памяти в Мб + uint32 memory = 3; + } +} + +message OrderInfo { + // Идентификатор задания + uint64 id = 1; + + // Информация о соответствующей резервной копии + CopyInfo copy_info = 2; + + // Дата создания задания в формате RFC3339 + string backup_date_create = 3; + + // Идентификатор сервиса, в формате uuid v4 + string service_id = 4; + + // Имя БД, на которую выполнялось восстановление + string database_name = 5; + + // Тип БД + string database_type = 6; + + // Дата создания задания в формате RFC3339 + string date_create = 7; + + // Дата завершения задания в формате RFC3339 + string date_complete = 8; + + // Статус задания + OrderStatus status = 9; + + enum OrderStatus { + _ = 0; + + // Восстанавливается + PROCESSING = 1; + + // Восстановление завершено + COMPLETED = 2; + + // Ошибка + ERROR = 3; + } +} \ No newline at end of file