OTLP tracing: - libs/observability/otlp.rs: SdkTracerProvider via HTTP/proto OTLP exporter - libs/observability/tracing_middleware.rs: Actix-web span with trace_id propagation - libs/observability/tracing_fmt.rs: JSON fmt + registry.try_init for layered init - libs/rpc: gRPC method spans via info_span - libs/agent, libs/room, libs/service, libs/api: structured tracing throughout Prometheus metrics: - libs/observability/prometheus_exporter.rs: /metrics HTTP handler + metrics crate - libs/observability/metrics_middleware.rs: HttpMetrics middleware + AtomicU64 - libs/observability/redis_metrics.rs: Redis counter poller via RedisMetrics - libs/room/metrics.rs: RoomMetrics (connections, messages, presence counters) Config env vars: APP_OTEL_ENABLED, APP_OTEL_ENDPOINT, APP_OTEL_SERVICE_NAME
140 lines
3.7 KiB
Protocol Buffer
140 lines
3.7 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
package admin;
|
|
|
|
import "google/protobuf/timestamp.proto";
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Session entities
|
|
// ---------------------------------------------------------------------------
|
|
|
|
message UserSession {
|
|
string session_id = 1;
|
|
string user_id = 2;
|
|
string workspace_id = 3;
|
|
optional string ip_address = 4;
|
|
optional string user_agent = 5;
|
|
google.protobuf.Timestamp connected_at = 6;
|
|
google.protobuf.Timestamp last_heartbeat = 7;
|
|
}
|
|
|
|
message SessionInfo {
|
|
string user_id = 1;
|
|
uint32 session_count = 2;
|
|
repeated string workspaces = 3;
|
|
optional UserSession latest_session = 4;
|
|
}
|
|
|
|
enum OnlineStatus {
|
|
ONLINE_STATUS_UNSPECIFIED = 0;
|
|
ONLINE_STATUS_ONLINE = 1;
|
|
ONLINE_STATUS_IDLE = 2;
|
|
ONLINE_STATUS_OFFLINE = 3;
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Requests & Responses
|
|
// ---------------------------------------------------------------------------
|
|
|
|
message ListWorkspaceSessionsRequest {
|
|
string workspace_id = 1;
|
|
}
|
|
message ListWorkspaceSessionsResponse {
|
|
repeated UserSession sessions = 1;
|
|
}
|
|
|
|
message ListUserSessionsRequest {
|
|
string user_id = 1;
|
|
}
|
|
message ListUserSessionsResponse {
|
|
repeated UserSession sessions = 1;
|
|
}
|
|
|
|
message KickUserFromWorkspaceRequest {
|
|
string user_id = 1;
|
|
string workspace_id = 2;
|
|
}
|
|
message KickUserFromWorkspaceResponse {
|
|
uint32 kicked_count = 1;
|
|
}
|
|
|
|
message KickUserRequest {
|
|
string user_id = 1;
|
|
}
|
|
message KickUserResponse {
|
|
uint32 kicked_count = 1;
|
|
}
|
|
|
|
message GetUserStatusRequest {
|
|
string user_id = 1;
|
|
}
|
|
message GetUserStatusResponse {
|
|
OnlineStatus status = 1;
|
|
}
|
|
|
|
message GetUserInfoRequest {
|
|
string user_id = 1;
|
|
}
|
|
message GetUserInfoResponse {
|
|
optional SessionInfo info = 1;
|
|
}
|
|
|
|
message GetWorkspaceOnlineUsersRequest {
|
|
string workspace_id = 1;
|
|
}
|
|
message GetWorkspaceOnlineUsersResponse {
|
|
repeated string user_ids = 1;
|
|
}
|
|
|
|
message IsUserOnlineRequest {
|
|
string user_id = 1;
|
|
}
|
|
message IsUserOnlineResponse {
|
|
bool online = 1;
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Metrics
|
|
// ---------------------------------------------------------------------------
|
|
|
|
message GetMetricsRequest {
|
|
string instance_filter = 1; // filter by instance_id substring
|
|
uint32 limit = 2; // max snapshots per instance (default 100)
|
|
}
|
|
message GetMetricsResponse {
|
|
repeated InstanceMetrics instances = 1;
|
|
}
|
|
|
|
message InstanceMetrics {
|
|
string instance_id = 1;
|
|
int64 timestamp_secs = 2;
|
|
// HTTP metrics, key = metric name, value = JSON value
|
|
map<string, string> http = 3;
|
|
// Room/room metrics
|
|
map<string, string> room = 4;
|
|
}
|
|
|
|
message ExportMetricsCsvRequest {
|
|
string instance_filter = 1;
|
|
}
|
|
message ExportMetricsCsvResponse {
|
|
string csv = 1;
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Service
|
|
// ---------------------------------------------------------------------------
|
|
|
|
service SessionAdmin {
|
|
rpc ListWorkspaceSessions(ListWorkspaceSessionsRequest) returns (ListWorkspaceSessionsResponse);
|
|
rpc ListUserSessions(ListUserSessionsRequest) returns (ListUserSessionsResponse);
|
|
rpc KickUserFromWorkspace(KickUserFromWorkspaceRequest) returns (KickUserFromWorkspaceResponse);
|
|
rpc KickUser(KickUserRequest) returns (KickUserResponse);
|
|
rpc GetUserStatus(GetUserStatusRequest) returns (GetUserStatusResponse);
|
|
rpc GetUserInfo(GetUserInfoRequest) returns (GetUserInfoResponse);
|
|
rpc GetWorkspaceOnlineUsers(GetWorkspaceOnlineUsersRequest) returns (GetWorkspaceOnlineUsersResponse);
|
|
rpc IsUserOnline(IsUserOnlineRequest) returns (IsUserOnlineResponse);
|
|
rpc GetMetrics(GetMetricsRequest) returns (GetMetricsResponse);
|
|
rpc ExportMetricsCsv(ExportMetricsCsvRequest) returns (ExportMetricsCsvResponse);
|
|
}
|