SimTX API/Packets/ServerHealthReport: Difference between revisions
Appearance
Protocol v25 reference: ServerHealthReport Tag: Removed redirect |
Remove development history and server internals |
||
| Line 306: | Line 306: | ||
== Usage == | == Usage == | ||
* Useful summary values for a status page: <code>status</code>, <code>connected_stations</code>, <code>active_transmitters</code>, <code>process_cpu_load</code>, and the ratio <code>world_tick_duration_nanos / world_tick_interval_nanos</code> (below 1 means the simulation keeps up with real time). | * Useful summary values for a status page: <code>status</code>, <code>connected_stations</code>, <code>active_transmitters</code>, <code>process_cpu_load</code>, and the ratio <code>world_tick_duration_nanos / world_tick_interval_nanos</code> (below 1 means the simulation keeps up with real time). | ||
* <code>receiver_overrun_chunks</code> rising quickly means that clients are not reading fast enough, or that the server cannot keep up. | * <code>receiver_overrun_chunks</code> rising quickly means that clients are not reading fast enough, or that the server cannot keep up. | ||
Latest revision as of 17:16, 24 October 2026
| Frame | ServerFrame, field 34
|
|---|---|
| Member | health
|
| Direction | Server → client |
| Session | Control |
| Roles | ROLE_CONTROL.
|
| Permission | None |
| Answers | ServerHealthRequest |
| Defined in | control.proto
|
ServerHealthReport describes the load and internal state of a game server: CPU and memory, simulation timing, worker queues, and per-session statistics for every transmitter and receiver. It is meant for status pages, dashboards and operators. Most fields are diagnostic and follow the server implementation; treat them as informational.
Definition[edit | edit source]
message ServerHealthReport {
int64 request_id = 1;
int64 captured_at_ms = 2;
string status = 3;
int64 uptime_ms = 4;
int32 available_processors = 5;
float process_cpu_load = 6;
float system_cpu_load = 7;
double system_load_average = 8;
int64 process_cpu_time_nanos = 9;
int64 heap_used_bytes = 10;
int64 heap_committed_bytes = 11;
int64 heap_max_bytes = 12;
int64 non_heap_used_bytes = 13;
int64 physical_memory_used_bytes = 14;
int64 physical_memory_total_bytes = 15;
int64 open_file_descriptors = 16;
int64 max_file_descriptors = 17;
int32 live_threads = 18;
int32 peak_threads = 19;
int32 connected_clients = 20;
int32 connected_stations = 21;
int32 active_transmitters = 22;
int32 receiver_groups = 23;
bool acceptor_alive = 24;
int64 world_tick = 25;
int64 world_tick_duration_nanos = 26;
int64 world_tick_interval_nanos = 27;
int64 simulation_time_ms = 28;
int32 session_tasks_active = 29;
int32 session_tasks_queued = 30;
int32 receiver_dsp_active = 31;
int32 receiver_dsp_queued = 32;
int32 propagation_jobs_active = 33;
int32 propagation_jobs_queued = 34;
int64 streamed_receiver_chunks = 35;
int64 receiver_overrun_chunks = 36;
int32 stalled_transmitter_writes = 37;
int32 stalled_receiver_groups = 38;
repeated TransmitterHealth transmitters = 39;
repeated ReceiverHealth receivers = 40;
}
Fields[edit | edit source]
| # | Field | Type | Description |
|---|---|---|---|
| 1 | request_id |
int64 |
The request this answers. |
| 2 | captured_at_ms |
int64 |
When the report was captured, Unix ms. |
| 3 | status |
string |
OK, DEGRADED or STOPPED; UNKNOWN if not set.
|
| 4 | uptime_ms |
int64 |
Process uptime, ms. |
| 5 | available_processors |
int32 |
CPU cores available. |
| 6 | process_cpu_load |
float |
Process CPU load, 0 to 1. |
| 7 | system_cpu_load |
float |
Whole-machine CPU load, 0 to 1. |
| 8 | system_load_average |
double |
One-minute load average. |
| 9 | process_cpu_time_nanos |
int64 |
Cumulative process CPU time. |
| 10 | heap_used_bytes |
int64 |
JVM heap in use. |
| 11 | heap_committed_bytes |
int64 |
JVM heap committed. |
| 12 | heap_max_bytes |
int64 |
JVM heap maximum. |
| 13 | non_heap_used_bytes |
int64 |
JVM non-heap memory in use. |
| 14 | physical_memory_used_bytes |
int64 |
Machine memory in use. |
| 15 | physical_memory_total_bytes |
int64 |
Machine memory total. |
| 16 | open_file_descriptors |
int64 |
Open file descriptors. |
| 17 | max_file_descriptors |
int64 |
File descriptor limit. |
| 18 | live_threads |
int32 |
Live threads. |
| 19 | peak_threads |
int32 |
Peak threads. |
| 20 | connected_clients |
int32 |
Open client connections. |
| 21 | connected_stations |
int32 |
Sessions (receivers and transmitters). |
| 22 | active_transmitters |
int32 |
Transmitters on air. |
| 23 | receiver_groups |
int32 |
Groups of receivers sharing DSP work. |
| 24 | acceptor_alive |
bool |
Whether the connection acceptor is running. |
| 25 | world_tick |
int64 |
Simulation tick counter. |
| 26 | world_tick_duration_nanos |
int64 |
Duration of the last simulation tick. |
| 27 | world_tick_interval_nanos |
int64 |
Interval between simulation ticks. |
| 28 | simulation_time_ms |
int64 |
Current simulated time, Unix ms. |
| 29 | session_tasks_active |
int32 |
Session worker tasks running. |
| 30 | session_tasks_queued |
int32 |
Session worker tasks waiting. |
| 31 | receiver_dsp_active |
int32 |
Receiver DSP jobs running. |
| 32 | receiver_dsp_queued |
int32 |
Receiver DSP jobs waiting. |
| 33 | propagation_jobs_active |
int32 |
Propagation jobs running. |
| 34 | propagation_jobs_queued |
int32 |
Propagation jobs waiting. |
| 35 | streamed_receiver_chunks |
int64 |
IQ blocks delivered since start. |
| 36 | receiver_overrun_chunks |
int64 |
IQ blocks dropped because a client queue was full. |
| 37 | stalled_transmitter_writes |
int32 |
Transmitter sessions currently stalled writing. |
| 38 | stalled_receiver_groups |
int32 |
Receiver groups currently stalled. |
| 39 | transmitters |
repeated TransmitterHealth |
One TransmitterHealth per live transmitter, at most 4,096. |
| 40 | receivers |
repeated ReceiverHealth |
One ReceiverHealth per live receiver, at most 4,096. |
TransmitterHealth[edit | edit source]
message TransmitterHealth {
bytes session_id = 1;
string callsign = 2;
string address = 3;
string source_type = 4; // string enum (common.proto)
double frequency_hz = 5;
string modulation = 6; // string enum (common.proto)
int32 sample_rate = 7;
int32 buffer_capacity_samples = 8;
int32 buffer_retained_samples = 9;
int64 buffer_sequence = 10;
int64 wire_components_received = 11;
int64 processed_blocks = 12;
int64 total_processing_nanos = 13;
int64 connected_duration_nanos = 14;
int64 last_progress_age_nanos = 15;
int64 recent_processing_nanos = 16;
int64 max_processing_nanos = 17;
int64 current_write_stall_nanos = 18;
int64 recent_write_nanos = 19;
int64 max_write_nanos = 20;
int64 total_write_nanos = 21;
}
| # | Field | Type | Description |
|---|---|---|---|
| 1 | session_id |
bytes |
16-byte transmission id. |
| 2 | callsign |
string |
Callsign. |
| 3 | address |
string |
Client address. Empty unless the session holds monitor.any or moderation.manage.
|
| 4 | source_type |
string |
Source type name. |
| 5 | frequency_hz |
double |
Carrier frequency, Hz. |
| 6 | modulation |
string |
Modulation name. |
| 7 | sample_rate |
int32 |
Declared input sample rate. |
| 8 | buffer_capacity_samples |
int32 |
Playout buffer capacity, samples. |
| 9 | buffer_retained_samples |
int32 |
Samples held in the playout buffer. |
| 10 | buffer_sequence |
int64 |
Write position of the playout buffer. |
| 11 | wire_components_received |
int64 |
Sample values received from the client. |
| 12 | processed_blocks |
int64 |
Blocks processed. |
| 13 | total_processing_nanos |
int64 |
Total processing time. |
| 14 | connected_duration_nanos |
int64 |
Time since the session started. |
| 15 | last_progress_age_nanos |
int64 |
Time since the session last made progress. |
| 16 | recent_processing_nanos |
int64 |
Processing time in the recent window. |
| 17 | max_processing_nanos |
int64 |
Longest processing step. |
| 18 | current_write_stall_nanos |
int64 |
Duration of the current stalled write, 0 if none. |
| 19 | recent_write_nanos |
int64 |
Write time in the recent window. |
| 20 | max_write_nanos |
int64 |
Longest write. |
| 21 | total_write_nanos |
int64 |
Total write time. |
ReceiverHealth[edit | edit source]
message ReceiverHealth {
bytes session_id = 1;
string callsign = 2;
string address = 3;
double center_frequency_hz = 4;
int32 sample_rate = 5;
int32 chunk_samples = 6;
bool wideband = 7;
int32 shared_group_members = 8;
int32 queued_frames = 9;
int32 max_queued_frames = 10;
int32 queue_capacity = 11;
int64 frames_written = 12;
int64 frames_dropped = 13;
int64 group_processed_chunks = 14;
int64 total_group_processing_nanos = 15;
int64 total_group_dsp_nanos = 16;
int64 connected_duration_nanos = 17;
int64 group_progress_age_nanos = 18;
int64 recent_group_processing_nanos = 19;
int64 max_group_processing_nanos = 20;
int64 recent_group_dsp_nanos = 21;
int64 max_group_dsp_nanos = 22;
int64 current_write_stall_nanos = 23;
int64 recent_write_nanos = 24;
int64 max_write_nanos = 25;
int64 total_write_nanos = 26;
}
| # | Field | Type | Description |
|---|---|---|---|
| 1 | session_id |
bytes |
16-byte session id. |
| 2 | callsign |
string |
Callsign. |
| 3 | address |
string |
Client address. Empty unless the session holds monitor.any or moderation.manage.
|
| 4 | center_frequency_hz |
double |
Centre frequency, Hz. |
| 5 | sample_rate |
int32 |
Negotiated sample rate. |
| 6 | chunk_samples |
int32 |
Negotiated block size. |
| 7 | wideband |
bool |
True for a wideband receiver. |
| 8 | shared_group_members |
int32 |
Receivers sharing this receiver's DSP group. |
| 9 | queued_frames |
int32 |
Frames waiting in the output queue. |
| 10 | max_queued_frames |
int32 |
Highest queue level seen. |
| 11 | queue_capacity |
int32 |
Output queue capacity. |
| 12 | frames_written |
int64 |
Frames written to the client. |
| 13 | frames_dropped |
int64 |
Frames dropped because the queue was full. |
| 14 | group_processed_chunks |
int64 |
Blocks processed by the DSP group. |
| 15 | total_group_processing_nanos |
int64 |
Total group processing time. |
| 16 | total_group_dsp_nanos |
int64 |
Total group DSP time. |
| 17 | connected_duration_nanos |
int64 |
Time since the session started. |
| 18 | group_progress_age_nanos |
int64 |
Time since the group last made progress. |
| 19 | recent_group_processing_nanos |
int64 |
Group processing time in the recent window. |
| 20 | max_group_processing_nanos |
int64 |
Longest group processing step. |
| 21 | recent_group_dsp_nanos |
int64 |
Group DSP time in the recent window. |
| 22 | max_group_dsp_nanos |
int64 |
Longest group DSP step. |
| 23 | current_write_stall_nanos |
int64 |
Duration of the current stalled write, 0 if none. |
| 24 | recent_write_nanos |
int64 |
Write time in the recent window. |
| 25 | max_write_nanos |
int64 |
Longest write. |
| 26 | total_write_nanos |
int64 |
Total write time. |
Usage[edit | edit source]
- Useful summary values for a status page:
status,connected_stations,active_transmitters,process_cpu_load, and the ratioworld_tick_duration_nanos / world_tick_interval_nanos(below 1 means the simulation keeps up with real time). receiver_overrun_chunksrising quickly means that clients are not reading fast enough, or that the server cannot keep up.- Durations are in nanoseconds. Recent values cover a short sliding window.
session_idin the per-session entries is the same 16-byte id as in SessionStatus and StationList.