Add WatchEvents, enable/disable/weight RPCs, and config check
gRPC / proto - Rename WatchBackendEvents → WatchEvents; return a stream of Event oneof (LogEvent, BackendEvent, FrontendEvent) with optional filter flags (log, log_level, backend, frontend) - Add EnableBackend, DisableBackend, SetFrontendPoolBackendWeight RPCs - Rename PauseResumeRequest → BackendRequest - Add CheckConfig RPC returning ok/parse_error/semantic_error maglevd - Route slog through a LogBroadcaster (slog.Handler) so WatchEvents subscribers can receive structured log records independently of the daemon's own --log-level - Add --reflection flag (default true) to toggle gRPC server reflection - Add --check flag: validates config file and exits 0/1/2 - SIGHUP: use config.Check before applying reload; log parse vs semantic error separately; refuse reload on any error - Rename default config path /etc/maglev → /etc/vpp-maglev maglevc - Add 'watch events [num <n>] [log [level <level>]] [backend] [frontend]' command; prints compact protojson, stops on any keypress or Ctrl-C; uses cbreak mode (not raw) so output post-processing is preserved - Add 'set backend <name> enable|disable' - Add 'set frontend <name> pool <pool> backend <name> weight <0-100>' - Add 'config check' command Debian packaging - Rename service unit to vpp-maglevd.service - Rename conffiles to /etc/default/vpp-maglev and /etc/vpp-maglev/ - Create maglevd system user/group in postinst; add to vpp group if present - Add postrm; add adduser to Depends
This commit is contained in:
@@ -10,11 +10,15 @@ service Maglev {
|
||||
rpc GetFrontend(GetFrontendRequest) returns (FrontendInfo);
|
||||
rpc ListBackends(ListBackendsRequest) returns (ListBackendsResponse);
|
||||
rpc GetBackend(GetBackendRequest) returns (BackendInfo);
|
||||
rpc PauseBackend(PauseResumeRequest) returns (BackendInfo);
|
||||
rpc ResumeBackend(PauseResumeRequest) returns (BackendInfo);
|
||||
rpc PauseBackend(BackendRequest) returns (BackendInfo);
|
||||
rpc ResumeBackend(BackendRequest) returns (BackendInfo);
|
||||
rpc EnableBackend(BackendRequest) returns (BackendInfo);
|
||||
rpc DisableBackend(BackendRequest) returns (BackendInfo);
|
||||
rpc ListHealthChecks(ListHealthChecksRequest) returns (ListHealthChecksResponse);
|
||||
rpc GetHealthCheck(GetHealthCheckRequest) returns (HealthCheckInfo);
|
||||
rpc WatchBackendEvents(WatchRequest) returns (stream BackendEvent);
|
||||
rpc SetFrontendPoolBackendWeight(SetWeightRequest) returns (FrontendInfo);
|
||||
rpc WatchEvents(WatchRequest) returns (stream Event);
|
||||
rpc CheckConfig(CheckConfigRequest) returns (CheckConfigResponse);
|
||||
}
|
||||
|
||||
// ---- requests ---------------------------------------------------------------
|
||||
@@ -31,7 +35,7 @@ message GetBackendRequest {
|
||||
string name = 1;
|
||||
}
|
||||
|
||||
message PauseResumeRequest {
|
||||
message BackendRequest {
|
||||
string name = 1;
|
||||
}
|
||||
|
||||
@@ -41,7 +45,29 @@ message GetHealthCheckRequest {
|
||||
string name = 1;
|
||||
}
|
||||
|
||||
message WatchRequest {}
|
||||
message CheckConfigRequest {}
|
||||
|
||||
message CheckConfigResponse {
|
||||
bool ok = 1;
|
||||
string parse_error = 2; // set when YAML cannot be read or parsed
|
||||
string semantic_error = 3; // set when YAML is valid but semantically incorrect
|
||||
}
|
||||
|
||||
message SetWeightRequest {
|
||||
string frontend = 1;
|
||||
string pool = 2;
|
||||
string backend = 3;
|
||||
int32 weight = 4; // 0-100
|
||||
}
|
||||
|
||||
// WatchRequest controls which event types are streamed. All fields default to
|
||||
// true (i.e. an empty request subscribes to everything at info level).
|
||||
message WatchRequest {
|
||||
optional bool log = 1; // include log events (default: true)
|
||||
string log_level = 2; // minimum log level: debug|info|warn|error (default: info)
|
||||
optional bool backend = 3; // include backend transition events (default: true)
|
||||
optional bool frontend = 4; // include frontend events (default: true)
|
||||
}
|
||||
|
||||
// ---- responses --------------------------------------------------------------
|
||||
|
||||
@@ -123,7 +149,36 @@ message TransitionRecord {
|
||||
int64 at_unix_ns = 3;
|
||||
}
|
||||
|
||||
// ---- event stream -----------------------------------------------------------
|
||||
|
||||
// LogAttr is a single key/value attribute from a structured log record.
|
||||
message LogAttr {
|
||||
string key = 1;
|
||||
string value = 2;
|
||||
}
|
||||
|
||||
// LogEvent carries a single structured log record.
|
||||
message LogEvent {
|
||||
int64 at_unix_ns = 1;
|
||||
string level = 2;
|
||||
string msg = 3;
|
||||
repeated LogAttr attrs = 4;
|
||||
}
|
||||
|
||||
// BackendEvent is emitted on every backend state transition.
|
||||
message BackendEvent {
|
||||
string backend_name = 1;
|
||||
TransitionRecord transition = 2;
|
||||
}
|
||||
|
||||
// FrontendEvent is reserved for future frontend-level events.
|
||||
message FrontendEvent {}
|
||||
|
||||
// Event is the envelope returned by WatchEvents.
|
||||
message Event {
|
||||
oneof event {
|
||||
LogEvent log = 1;
|
||||
BackendEvent backend = 2;
|
||||
FrontendEvent frontend = 3;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user