digraph GrpcServices { rankdir=LR; compound=true; fontname="Helvetica"; node [fontname="Helvetica", fontsize=10]; edge [fontname="Helvetica", fontsize=9]; labelloc="t"; label="gRPC Service Definitions"; fontsize=14; node [shape=record, style=filled]; // MetricsService subgraph cluster_metrics { label="MetricsService"; style=filled; fillcolor="#E8F5E9"; metrics_svc [label="{MetricsService|+ StreamMetrics(stream Metric) → StreamAck\l+ GetCurrentState(StateRequest) → MachineState\l+ GetAllStates(Empty) → AllMachinesState\l}", fillcolor="#C8E6C9"]; metric_msg [label="{Metric|machine_id: string\lhostname: string\ltimestamp_ms: int64\ltype: MetricType\lvalue: double\llabels: map\l}", fillcolor="#A5D6A7"]; machine_state [label="{MachineState|machine_id: string\lhostname: string\llast_seen_ms: int64\lcurrent_metrics: Metric[]\lhealth: HealthStatus\lmetadata: map\l}", fillcolor="#A5D6A7"]; } // ControlService subgraph cluster_control { label="ControlService"; style=filled; fillcolor="#E3F2FD"; control_svc [label="{ControlService|+ Control(stream Command) → stream Response\l}", fillcolor="#90CAF9"]; commands [label="{ControlCommand|command_id: string\l|UpdateIntervalCommand\lRestartCollectionCommand\lShutdownCommand\l}", fillcolor="#64B5F6"]; } // ConfigService subgraph cluster_config { label="ConfigService"; style=filled; fillcolor="#FFF3E0"; config_svc [label="{ConfigService|+ GetConfig(ConfigRequest) → CollectorConfig\l+ WatchConfig(ConfigRequest) → stream CollectorConfig\l}", fillcolor="#FFE0B2"]; collector_config [label="{CollectorConfig|collection_interval_seconds: int32\lenabled_metrics: MetricType[]\llabels: map\lthresholds: ThresholdConfig[]\l}", fillcolor="#FFCC80"]; } // Enums subgraph cluster_enums { label="Enums"; style=filled; fillcolor="#F3E5F5"; metric_type [label="{MetricType|CPU_PERCENT\lMEMORY_PERCENT\lDISK_PERCENT\lNETWORK_*\lLOAD_AVG_*\l...}", fillcolor="#E1BEE7"]; health_status [label="{HealthStatus|HEALTHY\lWARNING\lCRITICAL\lUNKNOWN\lOFFLINE\l}", fillcolor="#CE93D8"]; } // Relationships metrics_svc -> metric_msg [style=dashed]; metrics_svc -> machine_state [style=dashed]; control_svc -> commands [style=dashed]; config_svc -> collector_config [style=dashed]; metric_msg -> metric_type [style=dotted]; machine_state -> health_status [style=dotted]; }