mirror of https://github.com/dragonflyoss/api.git
406 lines
14 KiB
Protocol Buffer
406 lines
14 KiB
Protocol Buffer
/*
|
|
* Copyright 2022 The Dragonfly Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
syntax = "proto3";
|
|
|
|
package scheduler.v2;
|
|
|
|
import "pkg/apis/common/v2/common.proto";
|
|
import "pkg/apis/errordetails/v2/errordetails.proto";
|
|
import "validate/validate.proto";
|
|
import "google/protobuf/empty.proto";
|
|
import "google/protobuf/duration.proto";
|
|
import "google/protobuf/timestamp.proto";
|
|
|
|
option go_package = "d7y.io/api/pkg/apis/scheduler/v2;scheduler";
|
|
|
|
// RegisterPeerRequest represents peer registered request of AnnouncePeerRequest.
|
|
message RegisterPeerRequest {
|
|
// Download information.
|
|
common.v2.Download download = 1 [(validate.rules).message.required = true];
|
|
}
|
|
|
|
// DownloadPeerStartedRequest represents peer download started request of AnnouncePeerRequest.
|
|
message DownloadPeerStartedRequest {
|
|
}
|
|
|
|
// DownloadPeerBackToSourceStartedRequest represents peer download back-to-source started request of AnnouncePeerRequest.
|
|
message DownloadPeerBackToSourceStartedRequest {
|
|
// Download back-to-source reason.
|
|
string reason = 1 [(validate.rules).string.min_len = 1];
|
|
}
|
|
|
|
// DownloadPeerFinishedRequest represents peer download finished request of AnnouncePeerRequest.
|
|
message DownloadPeerFinishedRequest {
|
|
// Total content length.
|
|
int64 content_length = 1 [(validate.rules).int64.gte = 0];
|
|
// Total piece count.
|
|
int64 piece_count = 2 [(validate.rules).int64.gte = 0];
|
|
}
|
|
|
|
// DownloadPeerBackToSourceFinishedRequest represents peer download back-to-source finished request of AnnouncePeerRequest.
|
|
message DownloadPeerBackToSourceFinishedRequest {
|
|
// Total content length.
|
|
int64 content_length = 1 [(validate.rules).int64.gte = 0];
|
|
// Total piece count.
|
|
int64 piece_count = 2 [(validate.rules).int64.gte = 0];
|
|
}
|
|
|
|
// DownloadPieceFinishedRequest represents piece download finished request of AnnouncePeerRequest.
|
|
message DownloadPieceFinishedRequest {
|
|
// Piece info.
|
|
common.v2.Piece piece = 1 [(validate.rules).message.required = true];
|
|
}
|
|
|
|
// DownloadPieceBackToSourceFinishedRequest represents piece download back-to-source finished request of AnnouncePeerRequest.
|
|
message DownloadPieceBackToSourceFinishedRequest {
|
|
// Piece info.
|
|
common.v2.Piece piece = 1 [(validate.rules).message.required = true];
|
|
}
|
|
|
|
// AnnouncePeerRequest represents request of AnnouncePeer.
|
|
message AnnouncePeerRequest {
|
|
// Task id.
|
|
string task_id = 1 [(validate.rules).string.min_len = 1];
|
|
// Peer id.
|
|
string peer_id = 2 [(validate.rules).string.min_len = 1];
|
|
|
|
oneof request {
|
|
option (validate.required) = true;
|
|
|
|
RegisterPeerRequest register_peer_request = 3;
|
|
DownloadPeerStartedRequest download_peer_started_request = 4;
|
|
DownloadPeerBackToSourceStartedRequest download_peer_back_to_source_started_request = 5;
|
|
DownloadPeerFinishedRequest download_peer_finished_request = 6;
|
|
DownloadPeerBackToSourceFinishedRequest download_peer_back_to_source_finished_request = 7;
|
|
DownloadPieceFinishedRequest download_piece_finished_request = 8;
|
|
DownloadPieceBackToSourceFinishedRequest download_piece_back_to_source_finished_request = 9;
|
|
}
|
|
|
|
oneof errordetails {
|
|
errordetails.v2.DownloadPeerBackToSourceFailed download_peer_back_to_source_failed = 10;
|
|
errordetails.v2.DownloadPieceBackToSourceFailed download_piece_back_to_source_failed = 11;
|
|
errordetails.v2.SyncPiecesFailed sync_pieces_failed = 12;
|
|
errordetails.v2.DownloadPieceFailed download_piece_failed = 13;
|
|
}
|
|
}
|
|
|
|
// TinyTaskResponse represents tiny task response of AnnouncePeerResponse.
|
|
message TinyTaskResponse {
|
|
bytes data = 1 [(validate.rules).bytes.min_len = 1];
|
|
}
|
|
|
|
// SmallTaskResponse represents small task response of AnnouncePeerResponse.
|
|
message SmallTaskResponse {
|
|
// Piece info.
|
|
common.v2.Piece piece = 1 [(validate.rules).message.required = true];
|
|
}
|
|
|
|
// NormalTaskResponse represents normal task response of AnnouncePeerResponse.
|
|
message NormalTaskResponse {
|
|
// Candidate parents.
|
|
repeated common.v2.Peer candidate_parents = 1 [(validate.rules).repeated = {min_items: 1}];
|
|
// Concurrent downloading piece count from the peers.
|
|
int32 concurrent_piece_count = 2 [(validate.rules).int32.gte = 1];
|
|
}
|
|
|
|
// NeedBackToSourceResponse represents need back-to-source response of AnnouncePeerResponse.
|
|
message NeedBackToSourceResponse {
|
|
// Download back-to-source reason.
|
|
string reason = 1 [(validate.rules).string.min_len = 1];
|
|
}
|
|
|
|
// AnnouncePeerResponse represents response of AnnouncePeer.
|
|
message AnnouncePeerResponse {
|
|
oneof response {
|
|
option (validate.required) = true;
|
|
|
|
TinyTaskResponse tiny_task_response = 1;
|
|
SmallTaskResponse small_task_response = 2;
|
|
NormalTaskResponse normal_task_response = 3;
|
|
NeedBackToSourceResponse need_back_to_source_response = 4;
|
|
}
|
|
|
|
oneof errordetails {
|
|
errordetails.v2.SchedulePeerForbidden schedule_peer_forbidden = 5;
|
|
errordetails.v2.SchedulePeerFailed schedule_peer_failed = 6;
|
|
}
|
|
}
|
|
|
|
// StatPeerRequest represents request of StatPeer.
|
|
message StatPeerRequest {
|
|
// Task id.
|
|
string task_id = 1 [(validate.rules).string.min_len = 1];
|
|
// Peer id.
|
|
string peer_id = 2 [(validate.rules).string.min_len = 1];
|
|
}
|
|
|
|
// TODO exchange peer request definition.
|
|
// ExchangePeerRequest represents request of ExchangePeer.
|
|
message ExchangePeerRequest {
|
|
// Task id.
|
|
string task_id = 1 [(validate.rules).string.min_len = 1];
|
|
// Peer id.
|
|
string peer_id = 2 [(validate.rules).string.min_len = 1];
|
|
}
|
|
|
|
// TODO exchange peer response definition.
|
|
// ExchangePeerResponse represents response of ExchangePeer.
|
|
message ExchangePeerResponse {
|
|
}
|
|
|
|
// LeavePeerRequest represents request of LeavePeer.
|
|
message LeavePeerRequest {
|
|
// Task id.
|
|
string task_id = 1 [(validate.rules).string.min_len = 1];
|
|
// Peer id.
|
|
string peer_id = 2 [(validate.rules).string.min_len = 1];
|
|
}
|
|
|
|
// StatTaskRequest represents request of StatTask.
|
|
message StatTaskRequest {
|
|
// Task id.
|
|
string id = 1 [(validate.rules).string.min_len = 1];
|
|
}
|
|
|
|
// AnnounceHostRequest represents request of AnnounceHost.
|
|
message AnnounceHostRequest {
|
|
// Host id.
|
|
string id = 1 [(validate.rules).string.min_len = 1];
|
|
// Host type.
|
|
uint32 type = 2 [(validate.rules).uint32.lte = 3];
|
|
// Hostname.
|
|
string hostname = 3 [(validate.rules).string.min_len = 1];
|
|
// Host ip.
|
|
string ip = 4 [(validate.rules).string.ip = true];
|
|
// Port of grpc service.
|
|
int32 port = 5 [(validate.rules).int32 = {gte: 1024, lt: 65535}];
|
|
// Port of download server.
|
|
int32 download_port = 6 [(validate.rules).int32 = {gte: 1024, lt: 65535}];
|
|
// Host OS.
|
|
string os = 7;
|
|
// Host platform.
|
|
string platform = 8;
|
|
// Host platform family.
|
|
string platform_family = 9;
|
|
// Host platform version.
|
|
string platform_version = 10;
|
|
// Host kernel version.
|
|
string kernel_version = 11;
|
|
// CPU Stat.
|
|
CPU cpu = 12 [(validate.rules).message.required = true];
|
|
// Memory Stat.
|
|
Memory memory = 13 [(validate.rules).message.required = true];
|
|
// Network Stat.
|
|
Network network = 14 [(validate.rules).message.required = true];
|
|
// Disk Stat.
|
|
Disk disk = 15 [(validate.rules).message.required = true];
|
|
// Build information.
|
|
Build build = 16 [(validate.rules).message.required = true];
|
|
}
|
|
|
|
// CPU Stat.
|
|
message CPU {
|
|
// Number of logical cores in the system.
|
|
uint32 logical_count = 1;
|
|
// Number of physical cores in the system
|
|
uint32 physical_count = 2;
|
|
// Percent calculates the percentage of cpu used.
|
|
double percent = 3 [(validate.rules).double = {gte: 0, lte: 100}];
|
|
// Calculates the percentage of cpu used by process.
|
|
double process_percent = 4 [(validate.rules).double = {gte: 0, lte: 100}];
|
|
// CPUTimes contains the amounts of time the CPU has spent performing different kinds of work.
|
|
CPUTimes times = 5 [(validate.rules).message.required = true];
|
|
}
|
|
|
|
// CPUTimes contains the amounts of time the CPU has spent performing different
|
|
// kinds of work. Time units are in seconds.
|
|
message CPUTimes {
|
|
// CPU time of user.
|
|
double user = 1 [(validate.rules).double.gte = 0];
|
|
// CPU time of system.
|
|
double system = 2 [(validate.rules).double.gte = 0];
|
|
// CPU time of idle.
|
|
double idle = 3 [(validate.rules).double.gte = 0];
|
|
// CPU time of nice.
|
|
double nice = 4 [(validate.rules).double.gte = 0];
|
|
// CPU time of iowait.
|
|
double iowait = 5 [(validate.rules).double.gte = 0];
|
|
// CPU time of irq.
|
|
double irq = 6 [(validate.rules).double.gte = 0];
|
|
// CPU time of softirq.
|
|
double softirq = 7 [(validate.rules).double.gte = 0];
|
|
// CPU time of steal.
|
|
double steal = 8 [(validate.rules).double.gte = 0];
|
|
// CPU time of guest.
|
|
double guest = 9 [(validate.rules).double.gte = 0];
|
|
// CPU time of guest nice.
|
|
double guest_nice = 10 [(validate.rules).double.gte = 0];
|
|
}
|
|
|
|
// Memory Stat.
|
|
message Memory {
|
|
// Total amount of RAM on this system.
|
|
uint64 total = 1;
|
|
// RAM available for programs to allocate.
|
|
uint64 available = 2;
|
|
// RAM used by programs.
|
|
uint64 used = 3;
|
|
// Percentage of RAM used by programs.
|
|
double used_percent = 4 [(validate.rules).double = {gte: 0, lte: 100}];
|
|
// Calculates the percentage of memory used by process.
|
|
double process_used_percent = 5 [(validate.rules).double = {gte: 0, lte: 100}];
|
|
// This is the kernel's notion of free memory.
|
|
uint64 free = 6;
|
|
}
|
|
|
|
// Network Stat.
|
|
message Network {
|
|
// Return count of tcp connections opened and status is ESTABLISHED.
|
|
uint32 tcp_connection_count = 1;
|
|
// Return count of upload tcp connections opened and status is ESTABLISHED.
|
|
uint32 upload_tcp_connection_count = 2;
|
|
// Security domain for network.
|
|
string security_domain = 3;
|
|
// Location path(area|country|province|city|...).
|
|
string location = 4;
|
|
// IDC where the peer host is located
|
|
string idc = 5;
|
|
}
|
|
|
|
// Disk Stat.
|
|
message Disk {
|
|
// Total amount of disk on the data path of dragonfly.
|
|
uint64 total = 1;
|
|
// Free amount of disk on the data path of dragonfly.
|
|
uint64 free = 2;
|
|
// Used amount of disk on the data path of dragonfly.
|
|
uint64 used = 3;
|
|
// Used percent of disk on the data path of dragonfly directory.
|
|
double used_percent = 4 [(validate.rules).double = {gte: 0, lte: 100}];
|
|
// Total amount of indoes on the data path of dragonfly directory.
|
|
uint64 inodes_total = 5;
|
|
// Used amount of indoes on the data path of dragonfly directory.
|
|
uint64 inodes_used = 6;
|
|
// Free amount of indoes on the data path of dragonfly directory.
|
|
uint64 inodes_free = 7;
|
|
// Used percent of indoes on the data path of dragonfly directory.
|
|
double inodes_used_percent = 8 [(validate.rules).double = {gte: 0, lte: 100}];
|
|
}
|
|
|
|
// Build information.
|
|
message Build {
|
|
// Git version.
|
|
string git_version = 1;
|
|
// Git commit.
|
|
string git_commit = 2;
|
|
// Golang version.
|
|
string go_version = 3;
|
|
// Build platform.
|
|
string platform = 4;
|
|
}
|
|
|
|
// LeaveHostRequest represents request of LeaveHost.
|
|
message LeaveHostRequest{
|
|
// Host id.
|
|
string id = 1 [(validate.rules).string.min_len = 1];
|
|
}
|
|
|
|
// Probe information.
|
|
message Probe {
|
|
// Host metadata.
|
|
common.v2.Host host = 1 [(validate.rules).message.required = true];
|
|
// RTT is the round-trip time sent via this pinger.
|
|
google.protobuf.Duration rtt = 2 [(validate.rules).duration.required = true];
|
|
// Task update time.
|
|
google.protobuf.Timestamp updated_at = 3 [(validate.rules).timestamp.required = true];
|
|
}
|
|
|
|
// ProbesOfHost represents probes information of the host.
|
|
message ProbesOfHost {
|
|
// Host metadata.
|
|
common.v2.Host host = 1 [(validate.rules).message.required = true];
|
|
// Probes information.
|
|
repeated Probe probes = 2 [(validate.rules).repeated = {min_items: 1, ignore_empty: true}];
|
|
}
|
|
|
|
// SyncProbesRequest represents request of SyncProbes.
|
|
message SyncProbesRequest {
|
|
// Probes information of the host.
|
|
ProbesOfHost probes_of_host = 1 [(validate.rules).message.required = true];
|
|
}
|
|
|
|
// SyncProbesResponse represents response of SyncProbes.
|
|
message SyncProbesResponse {
|
|
// Hosts needs to be probed.
|
|
repeated common.v2.Host hosts = 1 [(validate.rules).repeated = {min_items: 1, ignore_empty: true}];
|
|
// Probe interval.
|
|
google.protobuf.Duration probe_interval = 2 [(validate.rules).duration.required = true];
|
|
}
|
|
|
|
// UpdateHostsRequest represents update hosts request of SyncNetworkTopologyRequest.
|
|
message UpdateHostsRequest {
|
|
// Hosts needs to be updated.
|
|
repeated ProbesOfHost probes_of_hosts = 1 [(validate.rules).repeated = {min_items: 1}];
|
|
}
|
|
|
|
// DeleteHostsRequest represents delete hosts request of SyncNetworkTopologyRequest.
|
|
message DeleteHostsRequest {
|
|
// Hosts needs to be deleted.
|
|
repeated ProbesOfHost probes_of_hosts = 1 [(validate.rules).repeated = {min_items: 1}];
|
|
}
|
|
|
|
// SyncProbesRequest represents request of SyncProbes.
|
|
message SyncNetworkTopologyRequest {
|
|
oneof request {
|
|
option (validate.required) = true;
|
|
|
|
UpdateHostsRequest update_probes_of_hosts_request = 1;
|
|
DeleteHostsRequest delete_probes_of_hosts_request = 2;
|
|
}
|
|
}
|
|
|
|
// Scheduler RPC Service.
|
|
service Scheduler{
|
|
// AnnouncePeer announces peer to scheduler.
|
|
rpc AnnouncePeer(stream AnnouncePeerRequest) returns(stream AnnouncePeerResponse);
|
|
|
|
// Checks information of peer.
|
|
rpc StatPeer(StatPeerRequest)returns(common.v2.Peer);
|
|
|
|
// LeavePeer releases peer in scheduler.
|
|
rpc LeavePeer(LeavePeerRequest)returns(google.protobuf.Empty);
|
|
|
|
// TODO exchange peer api definition.
|
|
// ExchangePeer exchanges peer information.
|
|
rpc ExchangePeer(ExchangePeerRequest)returns(ExchangePeerResponse);
|
|
|
|
// Checks information of task.
|
|
rpc StatTask(StatTaskRequest)returns(common.v2.Task);
|
|
|
|
// AnnounceHost announces host to scheduler.
|
|
rpc AnnounceHost(AnnounceHostRequest)returns(google.protobuf.Empty);
|
|
|
|
// LeaveHost releases host in scheduler.
|
|
rpc LeaveHost(LeaveHostRequest)returns(google.protobuf.Empty);
|
|
|
|
// SyncProbes sync probes of the host.
|
|
rpc SyncProbes(stream SyncProbesRequest)returns(stream SyncProbesResponse);
|
|
|
|
// SyncNetworkTopology sync network topology of the hosts.
|
|
rpc SyncNetworkTopology(stream SyncNetworkTopologyRequest)returns(google.protobuf.Empty);
|
|
}
|