Agent Stats
Fetches runtime statistics from a given agent or agents. Useful for monitoring connection counts, queue depths, RTT metrics, and overall agent health.
Invoke the $stats operation
Single Agent
[base]/Agent/[id]/$stats
For example:
medplum get 'Agent/[id]/$stats'
Multiple Agents
[base]/Agent/$stats
For example:
medplum get 'Agent/$stats?_tag=Group+A'
Here, _tag=Group+A is an Agent search parameter used to select which agents to fetch stats from. For example, to fetch stats from all active agents use status=active. See Using Agent search parameters in bulk operations for more ways to select operation targets.
Single Agent Response
When querying a single agent by ID, the response is a Parameters resource containing the stats payload.
Valid Response
Example response when stats are successfully retrieved:
{
"resourceType": "Parameters",
"parameter": [
{
"name": "stats",
"valueString": "{\"hl7ConnectionsOpen\":1,\"ping\":5,\"webSocketQueueDepth\":0,\"hl7QueueDepth\":0,\"hl7ClientCount\":0,\"live\":true,\"outstandingHeartbeats\":0,\"channelStats\":{},\"clientStats\":{}}"
}
]
}
The stats parameter contains a JSON-encoded object describing the agent's runtime state. Known fields include:
hl7ConnectionsOpen: Number of currently open inbound HL7 connectionsping: Most recent measured ping (round-trip time) to the Medplum server, in millisecondswebSocketQueueDepth: Number of messages currently queued for delivery over the WebSockethl7QueueDepth: Number of HL7 messages currently queued for processinghl7ClientCount: Number of outbound HL7 client connections currently held in the poollive: Whether the agent considers itself live and connected to the serveroutstandingHeartbeats: Number of outstanding (unacknowledged) heartbeats sent to the serverchannelStats: Per-channel statistics, including round-trip-time metrics for inbound channelsclientStats: Per-remote statistics for outbound HL7 clients, including round-trip-time metrics
Additional fields may be present and should be treated as informational.
Multi-Agent Response
When querying multiple agents, the response is a Bundle of Parameters. Each Parameters within the Bundle contains an agent and a result, which is the result of calling the $stats operation on this Agent, either a Parameters or OperationOutcome resource.
Valid Response
Example response for multiple agents:
{
"resourceType": "Bundle",
"type": "collection",
"entry": [
{
"resource": {
"resourceType": "Parameters",
"parameter": [
{
"name": "agent",
"resource": {
"resourceType": "Agent",
"name": "Test Agent 1",
"status": "active",
"id": "93f8b2fb-65a3-4977-a175-71b73b26fde7",
"meta": {
"versionId": "e182201a-6925-467f-a92b-496193fb4c39",
"lastUpdated": "2024-04-19T20:29:25.087Z"
}
}
},
{
"name": "result",
"resource": {
"resourceType": "Parameters",
"parameter": [
{
"name": "stats",
"valueString": "{\"hl7ConnectionsOpen\":1,\"ping\":5,\"webSocketQueueDepth\":0,\"hl7QueueDepth\":0,\"hl7ClientCount\":0,\"live\":true,\"outstandingHeartbeats\":0,\"channelStats\":{},\"clientStats\":{}}"
}
]
}
}
]
}
},
{
"resource": {
"resourceType": "Parameters",
"parameter": [
{
"name": "agent",
"resource": {
"resourceType": "Agent",
"name": "Test Agent 2",
"status": "active",
"id": "a1b2c3d4-5e6f-7890-abcd-ef1234567890",
"meta": {
"versionId": "f293201a-6925-467f-a92b-496193fb4c39",
"lastUpdated": "2024-04-19T20:29:25.087Z"
}
}
},
{
"name": "result",
"resource": {
"resourceType": "OperationOutcome",
"issue": [
{
"severity": "error",
"code": "exception",
"details": {
"text": "Failed to fetch stats: Agent not responding"
}
}
]
}
}
]
}
}
]
}
Invalid Response
Example outcome when an ID was not supplied to the operation:
{
"resourceType": "OperationOutcome",
"issue": [
{
"severity": "error",
"code": "invalid",
"details": {
"text": "Must specify agent ID or identifier"
}
}
]
}
Using search parameters
All of the Agent search parameters can be used to select which agents to query stats from when using the multi-agent endpoint.
Some useful search parameters are:
namestatus_countand_offset
When _count is omitted, the operation fetches stats from at most the default page of 20 agents — it does not automatically run against every matching agent. The maximum allowed _count is 100. To cover more agents than fit on one page, use _count and _offset to page through the results (see Paging Through Agent Stats).
For more recipes and details on selecting operation targets, see Using Agent search parameters in bulk operations.
Recipes
Single Agent by ID
Fetch stats from a specific agent by ID:
medplum get 'Agent/93f8b2fb-65a3-4977-a175-71b73b26fde7/$stats'
Single Agent by Identifier
Fetch stats from a specific agent by identifier:
medplum get 'Agent/$stats?identifier=agent-007'
Multiple Agents by Name
Fetch stats from agents with a specific name prefix (without a _count, this acts on at most the default page of 20 agents):
medplum get 'Agent/$stats?name=Production+Agent'
Multiple Agents by Status
Fetch stats from active agents (without a _count, this acts on at most the default page of 20 agents):
medplum get 'Agent/$stats?status=active'
Paging Through Agent Stats
Fetch stats from agents in batches, 50 agents at a time:
medplum get 'Agent/$stats?_count=50&_offset=0'
medplum get 'Agent/$stats?_count=50&_offset=50'