# Device health

## Get Health

> Get health information for the system, all controllers and all modules

```json
{"openapi":"3.1.1","info":{"title":"HOLOPLOT Public System API","version":"1.5.1"},"servers":[{"url":"http://ABC-1234.local/psapi"}],"paths":{"/status/health":{"get":{"description":"Get health information for the system, all controllers and all modules","summary":"Get Health","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api.Health"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api.Error"}}}}}}}},"components":{"schemas":{"api.Health":{"type":"object","properties":{"arrays":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/api.ArrayHealth"}},"controllers":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/api.ControllerHealth"}},"modules":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/api.ModuleHealth"}},"processors":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/api.ProcessorExtendedHealth"}},"system":{"$ref":"#/components/schemas/api.SystemHealth"}}},"api.ArrayHealth":{"type":"object","properties":{"message":{"description":"currently not used and left empty","type":"string"},"status":{"description":"aggregated health status of the array","allOf":[{"$ref":"#/components/schemas/api.HealthStatus"}]}}},"api.HealthStatus":{"type":"string","enum":["unknown","okay","warning","error","critical"]},"api.ControllerHealth":{"type":"object","properties":{"hardware_status":{"description":"status of hardware components (hard drives, fans, PSUs, etc.)","allOf":[{"$ref":"#/components/schemas/api.HealthStatus"}]},"message":{"description":"currently not used and left empty","type":"string"},"network_status":{"description":"status of network setup (network interfaces, NTP, internet connection, etc.)","allOf":[{"$ref":"#/components/schemas/api.HealthStatus"}]},"status":{"description":"combined health status","allOf":[{"$ref":"#/components/schemas/api.HealthStatus"}]}}},"api.ModuleHealth":{"type":"object","properties":{"hardware_status":{"description":"status of hardware components (amplifiers, drivers, PSUs, etc.)","allOf":[{"$ref":"#/components/schemas/api.HealthStatus"}]},"message":{"description":"currently not used and left empty","type":"string"},"network_status":{"description":"status of network setup (network interfaces, NTP, PTP, etc.)","allOf":[{"$ref":"#/components/schemas/api.HealthStatus"}]},"status":{"description":"combined health status","allOf":[{"$ref":"#/components/schemas/api.HealthStatus"}]}}},"api.ProcessorExtendedHealth":{"type":"object","properties":{"health":{"$ref":"#/components/schemas/api.ProcessorHealth"},"pairing":{"type":"string","format":"uuid"}}},"api.ProcessorHealth":{"type":"object","properties":{"hardware_status":{"description":"status of hardware components (hard drives, fans, PSUs, etc.)","allOf":[{"$ref":"#/components/schemas/api.HealthStatus"}]},"message":{"description":"currently not used and left empty","type":"string"},"network_status":{"description":"status of network setup (network interfaces, NTP, internet connection, etc.)","allOf":[{"$ref":"#/components/schemas/api.HealthStatus"}]},"software_status":{"description":"status of software setup (configuration and audio engine state, CPU usage,  etc.)","allOf":[{"$ref":"#/components/schemas/api.HealthStatus"}]},"status":{"description":"combined health status","allOf":[{"$ref":"#/components/schemas/api.HealthStatus"}]}}},"api.SystemHealth":{"type":"object","properties":{"message":{"description":"currently not used and left empty","type":"string"},"status":{"description":"aggregated health status of the system","allOf":[{"$ref":"#/components/schemas/api.HealthStatus"}]}}},"api.Error":{"type":"object","properties":{"message":{"type":"string"}}}}}}
```

## Stream System Health

> This endpoint can be used to stream system health status information through WebSockets.\
> The payload returned is the same as in \`GET /status/health\` but only the fields that have\
> changed will be populated.\
> \
> Upon reception of a message through the WebSocket, a full system status can be\
> retrieved by issuing a \`GET\` request to \`/status/health\`.\
> \
> Find a Javascript client to use use this endpoint below.\
> \
> \`\`\`js\
> const WebSocket = require('ws');\
> \
> const client = new WebSocket('ws\://localhost:6789/ws/status/health');\
> client.on('message', msg => console.log("Health status update:" + msg.toString()));\
> \`\`\`<br>

````json
{"openapi":"3.1.1","info":{"title":"HOLOPLOT Public System API","version":"1.5.1"},"tags":[{"description":"Get updates via WebSockets","name":"stream"}],"servers":[{"url":"http://ABC-1234.local/psapi"}],"paths":{"/ws/status/health":{"get":{"description":"This endpoint can be used to stream system health status information through WebSockets.\nThe payload returned is the same as in `GET /status/health` but only the fields that have\nchanged will be populated.\n\nUpon reception of a message through the WebSocket, a full system status can be\nretrieved by issuing a `GET` request to `/status/health`.\n\nFind a Javascript client to use use this endpoint below.\n\n```js\nconst WebSocket = require('ws');\n\nconst client = new WebSocket('ws://localhost:6789/ws/status/health');\nclient.on('message', msg => console.log(\"Health status update:\" + msg.toString()));\n```\n","tags":["stream"],"summary":"Stream System Health","responses":{"200":{"description":"OK"}}}}}}
````
