syntax = "proto3"; package collector.proto; message Endpoint { oneof address { string host = 1; // dotted-decimal (IPv4), RFC 5952 (IPv6) bytes octets = 2; // size 4 (IPv4), size 16 (IPv6) } optional uint32 port = 3; // [1, 2^16-1] } message ProxyRules { message Exporter { Endpoint endpoint = 1; } message Collector { Endpoint endpoint = 1; } message Output { repeated Collector collectors = 1; } message Rule { Exporter exporter = 1; repeated Output outputs = 2; } repeated Rule rules = 1; repeated Output default_outputs = 2; } message ProxyRuleSelector { repeated Endpoint endpoints = 1; } message ProxyStats { message Counter { uint64 packets = 1; uint64 bytes = 2; } message Exporter { Endpoint endpoint = 1; Counter input = 2; } message Collector { Endpoint endpoint = 1; Counter output = 2; } message Output { repeated Collector collectors = 1; } message Rule { Exporter exporter = 1; repeated Output outputs = 2; } Counter mismatched = 1; repeated Rule rules = 2; repeated Output default_outputs = 3; } message BuildInfo { string version = 1; } message SystemStatus { enum State { Offline = 0; Configuring = 1; NotConfigured = 2; OK = 3; } message Status { State state = 1; string error = 2; } reserved 1; Status proxy = 2; } message Empty {} service Settings { rpc GetBuildInfo(Empty) returns (BuildInfo); rpc GetSystemStatus(Empty) returns (SystemStatus); rpc ListProxyRules(Empty) returns (ProxyRules); rpc ReplaceProxyRules(ProxyRules) returns (Empty); rpc UpdateProxyRules(ProxyRules) returns (Empty); rpc DeleteProxyRules(ProxyRuleSelector) returns (Empty); } service Metrics { rpc GetProxyStats(ProxyRuleSelector) returns (ProxyStats); }