Skip to main content

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 connections
  • ping: Most recent measured ping (round-trip time) to the Medplum server, in milliseconds
  • webSocketQueueDepth: Number of messages currently queued for delivery over the WebSocket
  • hl7QueueDepth: Number of HL7 messages currently queued for processing
  • hl7ClientCount: Number of outbound HL7 client connections currently held in the pool
  • live: Whether the agent considers itself live and connected to the server
  • outstandingHeartbeats: Number of outstanding (unacknowledged) heartbeats sent to the server
  • channelStats: Per-channel statistics, including round-trip-time metrics for inbound channels
  • clientStats: 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:

  • name
  • status
  • _count and _offset
Default page size

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'