---
title: "Live server health: CPU per core, load, memory, swap, disk and disk I/O, network, uptime, containers, the customer resources using the most CPU and memory (organization, project, plan), Free vs paid, running builds and the queue, and alerts"
method: GET
path: "/operator/server/live"
tags: ["Operator"]
---

# Live server health: CPU per core, load, memory, swap, disk and disk I/O, network, uptime, containers, the customer resources using the most CPU and memory (organization, project, plan), Free vs paid, running builds and the queue, and alerts

`GET /operator/server/live`

## Request

- Base URL: `https://hostingsurge.com/api/v1`
- URL: `https://hostingsurge.com/api/v1/operator/server/live`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `__Host-hs_session`

Read every few seconds by the admin console. The host part is read from /proc (cached 2 seconds, so any number of open consoles share one reading); the rest comes from the database in one query.

## Response `200`

Live health

- object
  - `readAt` string, required: ISO-8601 timestamp
  - `host` object, required
    - `available` boolean, required
    - `reason` 'unsupported_platform' | 'disabled' | 'unreadable' | 'container_view' | 'null', nullable, required
    - `facts` object, nullable, required
      - `cpu` object, required
        - `cores` integer, required
        - `busyPercent` number, nullable, required
        - `iowaitPercent` number, nullable, required
        - `stealPercent` number, nullable, required
        - `perCore` number[], required: busy share per logical CPU, cpu0 first
        - `load1` number, required
        - `load5` number, required
        - `load15` number, required
      - `memory` object, required
        - `totalBytes` number, required
        - `usedBytes` number, required: total minus available: cannot be freed without swapping
        - `cacheBytes` number, required: available minus free: page cache the kernel frees when programs need it
        - `freeBytes` number, required
        - `availableBytes` number, required
        - `swapTotalBytes` number, required
        - `swapUsedBytes` number, required
      - `disk` object, nullable, required
        - `path` string, required
        - `totalBytes` number, required
        - `usedBytes` number, required
        - `freeBytes` number, required
        - `usedPercent` number, required: like df
      - `diskIo` object, nullable, required
        - `readBytesPerSecond` number, required
        - `writeBytesPerSecond` number, required
        - `busyPercent` number, nullable, required: the busiest physical disk's share of time with I/O in flight
        - `devices` string[], required: what the throughput is summed over (the RAID arrays, else the whole disks)
      - `network` object, nullable, required: the host's physical interfaces, measured by the host collector (deploy/metrics); null until it reports them
        - `rxBytesPerSecond` number, required
        - `txBytesPerSecond` number, required
        - `measuredAt` string, required: the host collector's reading (once a minute)
      - `uptimeSeconds` number, required
      - `kernel` string, nullable, required
      - `readAt` string, required: ISO-8601 timestamp
      - `windowSeconds` number, nullable, required: what the CPU and disk rates were measured over
  - `collector` object, required
    - `state` 'ok' | 'stale' | 'missing', required: ok: the host collector reported in the last 3 minutes; stale: earlier; missing: never
    - `host` string, nullable, required
    - `reportedAt` string, nullable, required: ISO-8601 timestamp
    - `containers` integer, nullable, required: running containers on the host (Docker's own count once the collector reports it, else the running containers of compose projects)
    - `containersTotal` integer, nullable, required: every container including stopped ones; null until the collector reports it
    - `customerContainers` integer, nullable, required: containers matched to a customer project, preview or database
    - `oomKillsCounted` boolean, required
  - `top` object, required
    - `byCpu` object[], required
      - `kind` 'project' | 'preview' | 'database', required
      - `id` string, uuid, required
      - `name` string, required
      - `projectId` string, uuid, nullable, required
      - `projectName` string, nullable, required
      - `organizationId` string, uuid, required
      - `organizationName` string, required
      - `planId` string, required
      - `planClass` 'free' | 'paid' | 'unlimited', required
      - `cpuCores` number, nullable, required: measured CPU over the last minute, in cores
      - `memoryBytes` number, nullable, required
      - `cpuLimitCores` number, nullable, required
      - `memoryLimitBytes` number, nullable, required
      - `containers` integer, required
      - `sampledAt` string, required: ISO-8601 timestamp
    - `byMemory` object[], required
      - `kind` 'project' | 'preview' | 'database', required
      - `id` string, uuid, required
      - `name` string, required
      - `projectId` string, uuid, nullable, required
      - `projectName` string, nullable, required
      - `organizationId` string, uuid, required
      - `organizationName` string, required
      - `planId` string, required
      - `planClass` 'free' | 'paid' | 'unlimited', required
      - `cpuCores` number, nullable, required: measured CPU over the last minute, in cores
      - `memoryBytes` number, nullable, required
      - `cpuLimitCores` number, nullable, required
      - `memoryLimitBytes` number, nullable, required
      - `containers` integer, required
      - `sampledAt` string, required: ISO-8601 timestamp
    - `sampledWithinSeconds` integer, required: only samples this recent count (the collector reports once a minute)
  - `others` object[], required: containers that belong to no customer resource, the largest first
    - `name` string, required: the container's name (the platform, Coolify, mail, builds and anything not matched to a customer resource)
    - `project` string, nullable, required: its Docker compose project
    - `cpuCores` number, nullable, required
    - `memoryBytes` number, nullable, required
  - `plans` object, required: measured use of the resources above, per plan class
    - `free` object, required
      - `resources` integer, required: measured projects, previews and databases
      - `cpuCores` number, required
      - `memoryBytes` number, required
    - `paid` object, required
      - `resources` integer, required: measured projects, previews and databases
      - `cpuCores` number, required
      - `memoryBytes` number, required
    - `unlimited` object, required
      - `resources` integer, required: measured projects, previews and databases
      - `cpuCores` number, required
      - `memoryBytes` number, required
  - `builds` object, required
    - `queued` integer, required
    - `building` integer, required
    - `deploying` integer, required
    - `oldestQueuedAt` string, nullable, required: ISO-8601 timestamp
    - `items` object[], required: the running ones first, then the queue in order, at most 20
      - `id` string, uuid, required
      - `state` 'queued' | 'building' | 'deploying', required
      - `trigger` string, required
      - `target` string, required
      - `projectId` string, uuid, required
      - `projectName` string, required
      - `organizationId` string, uuid, required
      - `organizationName` string, required
      - `planClass` 'free' | 'paid' | 'unlimited', required
      - `createdAt` string, required: ISO-8601 timestamp
      - `startedAt` string, nullable, required: ISO-8601 timestamp
  - `alerts` object, required
    - `settings` object, required
      - `memoryPercent` integer, nullable, required
      - `diskPercent` integer, nullable, required
      - `swapPercent` integer, nullable, required
      - `cpuPercent` integer, nullable, required
      - `loadPerCore` number, nullable, required: alert when the 1-minute load divided by the logical CPUs reaches this (1 = load equal to the number of cores)
      - `forMinutes` integer, required: an alert starts once every minute sample of this many minutes is at or above its threshold
      - `notify` boolean, required: send a server_alert notification (in-app and email) to the operators when an alert starts and ends
      - `isDefault` boolean, required: true: nothing saved, the defaults apply
      - `note` string, nullable, required
      - `updatedAt` string, nullable, required: ISO-8601 timestamp
      - `updatedByEmail` string, nullable, required
    - `items` object[], required
      - `kind` 'memory' | 'disk' | 'swap' | 'cpu' | 'load', required: memory: memory in use (total minus available) in %; disk: the Docker data filesystem used like df in %; swap: swap used in %; cpu: all cores busy in %; load: the 1-minute load average per logical CPU
      - `state` 'off' | 'ok' | 'pending' | 'firing', required: off: no threshold; ok: below it; pending: at or above it now, not yet for the whole period; firing: an alert is open
      - `value` number, nullable, required: the current value (percent, or load per core); null when not measured
      - `threshold` number, nullable, required
      - `since` string, nullable, required: when the open alert started
      - `peak` number, nullable, required: the highest value of the open alert
      - `notifiedAt` string, nullable, required: when the operators were told about the open alert

## Other responses

- `400`: Invalid request (code invalid_request)
- `403`: A change on an operator-console session older than 5 minutes (code forbidden, details.reauthenticate: sign in again at /admin/login), or an operator removed since the session was resolved
- `404`: Not found (code not_found); also the answer to any request without a live operator-console session
- `429`: Too many requests (code rate_limited); see Retry-After
- `501`: Not available on this server (code not_configured): migration 156 is not applied

---

[API](https://skmtc.dev/hostingsurge/apis/hostingsurge-platform-api.md) · [All operations](https://skmtc.dev/hostingsurge/apis/hostingsurge-platform-api/llms.txt) · [OpenAPI document](https://skmtc.dev/hostingsurge/apis/hostingsurge-platform-api/revisions/4d08337cdff1?raw)
