System Status¶
Adds a System Status button to the Smart Client toolbar. Hovering the button shows a live summary such as 3/19 Cameras 4 Users. Clicking it opens the System Health window, a resizable overview with a summary header and three tables: recording servers and their storage, cameras with live stream statistics, and connected users.
The plugin also ships a Folder & Role - Camera User Status view item you can drop into any view, showing online cameras per folder and logged-in users per role. See Folder & Role view item.
Quick Start¶
- Install the plugin and open Smart Client.
- In the Live or Playback workspace, find the System Status button in the top toolbar.
- Hover the button to read the quick counts in the tooltip.
- Click the button to open the System Health window. Click again, press Esc, or click the X to close it.
What it shows¶
The window stacks three tables, each with its own section header, summary line, and CSV export button. The dividers between them can be dragged to give a table more room, and the whole window can be enlarged up to your screen.
Summary header¶
The header carries a row of summary chips that update live with the tables:
| Chip | Meaning |
|---|---|
| Recorders | Number of recording servers. |
| Cameras | Total number of enabled cameras. |
| Cameras Offline | Cameras currently offline. Shown only when at least one is offline. |
| Storage Alerts | Storages at or above 90 percent used. Shown only when at least one is in alert. |
The About button next to Refresh shows the plugin version.
Recording Servers¶
One row per storage on each recording server, plus the recorder's attach and connection state.
| Column | Meaning |
|---|---|
| Status dot | Green when the recorder is attached and connected, red otherwise. |
| Site | The federated site the recorder belongs to. Shown only when more than one site is present. |
| Recorder | The recording server host. |
| State | The attach and connection state reported by the recorder. |
| Storage | The recording or archive storage name. |
| Path | The media database path. |
| Cameras | Online and total cameras on this recorder, for example 14/16. The online count is green and the total is blue. |
| Bandwidth | The recorder's aggregate live bandwidth, summed across its cameras. The unit scales with the value (kB/s, MB/s, GB/s). |
| Storage usage | A bar showing used percent, green under 90, orange under 95, red at 95 and above. Hover for the used, free, and total figures. |
Cameras¶
One row per enabled camera. A toggle above the table switches between Cameras and Streams.
In Cameras mode each row aggregates the camera and its streams:
| Column | Meaning |
|---|---|
| Status dot | Green online, red offline, gray when the camera's recorder did not answer (state unknown). |
| Site | The federated site the camera belongs to. Shown only when more than one site is present. |
| Camera | The camera name. |
| Recorder | The owning recording server. Shown in red when that recorder is offline. |
| Streams | How many video streams the recorder is currently serving for the camera. |
| Resolution, Codec, FPS, Bitrate | Live figures for the camera's primary stream (FPS and bitrate update on the live refresh). Bitrate is the sum across the camera's streams, with the unit scaling to the value (kB/s, MB/s, GB/s). |
| Storage used | How much recording space the camera occupies on its recorder. |
| Storage % | That used space as a percentage of the recorder's total configured storage. |
| First rec, Last rec | The oldest and newest recorded timestamps. These are pre-loaded in the background from the moment the Smart Client starts, so they are usually already present when the window opens. A cell still being loaded shows Loading. |
| Span | The recorded coverage between first and last, shown compactly (for example 89.9 Days). |
In Streams mode the table flattens to one row per stream across all cameras, so you can see every stream at once without expanding anything. It lists camera, recorder, stream name, resolution, codec, FPS, requested FPS, bitrate, and the stream role (recording, live, or both).
Users¶
One row per connected user, with the client type.
| Client type | Source |
|---|---|
| Smart Client | An operator running the Smart Client. |
| Management Client | An administrator running the Management Client. |
| Standalone | A standalone MIP application or integration. |
Background services such as the Event Server and the Log Server are filtered out, so the list reflects real people and integrations rather than system accounts. When one user holds more than one session, the row shows a count such as Smart Client (x2). On a federated system a Site column shows which site each session is connected to.
Working with the tables¶
| Action | How |
|---|---|
| Sort | Click any column header. An arrow shows the active sort direction. Numbers, sizes, FPS, bitrate, storage, and span sort by value. |
| Filter cameras | Type in the Filter box to match camera or recorder name, or use the All / Online / Offline buttons. The filter also applies in Streams mode. |
| Group | The Group button groups cameras by recorder, and streams by camera, with collapsible group headers. |
| Folders | The Folders button groups cameras by folders, only available for camera table. |
| Resize columns | Drag the divider between two column headers. |
| Export | The CSV icon on each table exports exactly what is shown, respecting the current sort and filter. |
Live auto-refresh¶
The Auto 2s button toggles live updates. While it is on, the camera stream figures (FPS, bitrate, resolution, online state, used storage) refresh every two seconds. The update is merged in place, so your selection, scroll position, and sort order are preserved. The first / last recording cells are read from the background range cache and refresh on the slower cycle, not on every tick. Storage figures and recorder state refresh on a slower cycle and on a manual Refresh (or F5). Turn auto off to hold the current view. All per-recorder querying stops the moment the window is closed; the background range cache keeps refreshing for the session.
Folder & Role view item¶
Alongside the toolbar button, the plugin ships a Folder & Role - Camera User Status view item you can drop into any Smart Client view. It shows two live lists:
- Camera Folders - one row per Management Client device-group folder, with the number of online cameras out of the total, for example
5 / 8 Devices. - Roles - one row per role, with how many of its assigned users are currently logged in, for example
1 / 4 Users.
The online and logged-in number is coloured so a glance tells you coverage, and the counts update live from the same background layer that feeds the toolbar.
Setting it up¶
In setup mode the tile shows a centered Open configuration... button. It opens a configuration window with the settings on the left and a live preview of the tile on the right, so every change is visible before you apply it.
| Setting | What it does |
|---|---|
| Selection | Show every folder and role, or tick Show only the folders / roles I pick to choose them individually from two lists. |
| Recording-server prefix | Keep or drop the leading server / segment from folder names. Same-named groups across recorders merge into one row when the prefix is off. |
| Render mode | List shows stacked rows; Dashboard shows rectangular cards that wrap to fill the tile. |
| Show | All sections, Cameras only, or Roles only. |
| Folders section on top | Choose which of the two sections comes first when both are shown. |
| Sort rows | Alphabetical, or most-offline-first for monitoring at a glance. |
| Row spacing | Comfortable or compact, in list mode. |
| Card min width | Minimum card width in dashboard mode. Cards grow past it to fit long folder names, so set a larger value for uniform cards. |
| Text size | Size of the row and card text. |
| Count colour | Colour of the online and logged-in number. |
| Offline highlight | Optionally colour the count when some members are offline, with its own colour. |
How the counts are worked out¶
| Question | Source |
|---|---|
| Which folders exist and which cameras they hold | The Management Client device-group tree (user-defined folders). |
| Which cameras are online | The current device state reported by the Event Server. |
| Which roles exist and their users | The configuration role and user lists. |
| Which users are logged in | The MIP environments currently connected to the Event Server, matched to role members. |
Role membership is matched to logins by user name, since the connected-client list does not expose a SID. Active Directory users are matched on account and display name.
Federated Architecture¶
The plugin supports Milestone Federated Architecture. On startup it enumerates the master site and every federated child site, so a parent site that has no recording server of its own still shows the recorders, cameras, storage and users of its child sites.
Each site is queried with its own session token (the Smart Client already holds the federated logins) and gets its own message channel for online state and connected users. Recorders, cameras and users are tagged with the site they came from, and on a multi-site system a Site column appears in each table and in the CSV exports. On a single, non-federated site the Site columns stay hidden and the window behaves exactly as before.
The discovered sites are logged once at startup (Sites: N (names)) under category SystemStatus - SC BG, which is the quickest way to confirm all expected child sites were found.
How it works¶
Three layers feed the window.
A background component runs for the whole Smart Client session and talks to each site's Event Server over a per-site message channel. It keeps the per-camera online state and the connected-user list current, which powers the toolbar tooltip and the online dots even before the window is opened. This layer is light and does not talk to the recording servers.
A second background layer pre-loads the first and last recorded timestamp of every camera. It starts as soon as the Smart Client starts, walks the cameras at a gentle pace (two recorders at a time) into a cache, and rescans the whole cache every 30 minutes. Loading the ranges up front and in small batches avoids the SequencesGetAroundWithSpan request timeout that a single all-cameras-at-once query can hit on large systems. The window simply reads this cache.
While the System Health window is open, it queries each recording server's status service directly for storage, recorder state, and the live video statistics of that recorder's cameras. These per-recorder calls run in parallel, across all sites.
| Question | Source |
|---|---|
| Which sites exist | The master site and its federated child sites. |
| Which cameras are enabled | The configuration device tree of each site, walked down to the real camera devices. |
| Which cameras are online | The current device state reported by each site's Event Server. |
| FPS, bitrate, resolution, codec, used storage | The recording server's status service (video device statistics). |
| Per-recorder bandwidth and camera count | Derived in the client by summing and counting that recorder's cameras. |
| Storage used and free per server | The recording server's recording and archive storage status. |
| First and last recording, span | The recorded-sequence data for the camera, pre-loaded into the background range cache. |
| Who is connected, and client type | The MIP environments currently connected to each site's Event Server. |
When a recording server is offline¶
If a recording server does not answer, its cameras are shown with a gray dot and the recorder name in red, since their real state is unknown. That recorder still appears in the Recording Servers table with a red dot and an Unknown state. The plugin fails fast on an unreachable recorder rather than waiting on long timeouts, and it skips recording-range queries for those cameras. When the server comes back, storage, state, and recording ranges recover on their own within a few seconds.
Where it works¶
| Workspace | Behavior |
|---|---|
| Live | Button visible, window available. |
| Playback | Button visible, window available. |
Permissions¶
The connected user needs the rights to read device status, storage and recorder status, recorded sequences, and to see other connected clients. If the logged-in account lacks those rights, cameras can read as offline, storage and statistics can come back empty, and the user list can be short. Use an account with the appropriate view and status permissions.
Troubleshooting¶
| Problem | Fix |
|---|---|
| System Status button missing from the toolbar | Plugin DLLs must be in MIPPlugins\SystemStatus\. Unblock the ZIP if you copied it manually, then restart Smart Client. |
| Cameras show but stream statistics are empty | A camera only reports statistics while it is actively streaming or recording. An enabled but idle camera shows online with no live figures. |
| A whole recorder's cameras are gray | That recording server did not answer. Confirm it is running and reachable from the client, then check MIPLog.txt under category SystemStatus - SC BG. |
| Storage % is empty for a camera | The percentage needs the recorder's total configured storage, which arrives with the storage refresh. It fills in once a full refresh completes. |
| First and last recording read as a dash or stay on Loading | Ranges are pre-loaded in the background and skipped for offline recorders. A cell shows Loading until its background query returns; a failed query reads as error in MIPLog.txt. The cache is rescanned every 30 minutes. |
| A child site is missing | Check the startup Sites: N (names) line under category SystemStatus - SC BG to confirm the site was enumerated. The connected account must have access to that federated site. |
| Performance on large systems | The log records per-recorder status-service timings on each full fetch (with a per-call breakdown for slow recorders) and a batch summary (min / avg / max / p95 / slowest) for each background range sweep, which helps pinpoint a slow or unreachable server. |