Documentation Index
Fetch the complete documentation index at: https://mintlify.com/pixlcore/xyops/llms.txt
Use this file to discover all available pages before exploring further.
Overview
Monitors track a single numeric server metric over time. Each monitor points to one value in the live server data, casts it to a specific data type (integer, float, bytes, seconds, or milliseconds), and xyOps stores the samples in a time-series database.A monitor evaluates its expression once per minute on each matching server. Results are stored and graphed at multiple resolutions (hourly, daily, monthly, yearly).
How It Works
Every minute, each satellite sends a fresh ServerMonitorData snapshot to the primary conductor:Expression Evaluation
xyOps evaluates the monitor’s source expression against the current server monitor data sample
Delta Computation
If the monitor is configured as a delta monitor, its rate is computed from the previous absolute value (and optionally divided by elapsed seconds)
Monitor expressions run against the live ServerMonitorData context only. They do not depend on other monitors. Alerts evaluate immediately after monitors are computed.
Storage Systems
Monitors are stored in four time-series systems with different granularities:- Date format:
[yyyy]/[mm]/[dd]/[hh] - Epoch division: 60 (1 sample per minute)
- Single only: true (prevents duplicate submissions)
- Date format:
[yyyy]/[mm]/[dd] - Epoch division: 120 (~720 samples per day, every 2 minutes)
- Date format:
[yyyy]/[mm] - Epoch division: 3600 (~720 samples per month, every hour)
- Date format:
[yyyy] - Epoch division: 43200 (~730 samples per year, every 12 hours)
Creating and Editing Monitors
Go to Admin → Monitors to configure:Display name for the graph
Toggle to show/hide graph in the UI without deleting it
Optional Material Design Icon displayed next to the title
Restrict evaluation to specific groups (leave blank for all servers)
An expression that extracts or computes a single numeric value from ServerMonitorData
Optional regular expression to extract a number from a string value
Controls parsing and display:
integer, float, bytes, seconds, millisecondsFor counter-style sources, compute a delta and optionally divide by elapsed time to get a rate per second. Supports zero-minimum clamp.
Set a minimum Y-axis range (e.g., 100 for percentages)
Optional unit shown in labels (e.g.,
%, /sec, ms)Use the “Test…” button to evaluate your expression on a live server before saving. Click the search icon to open the Server Data Explorer and browse live ServerMonitorData paths.
Expressions
Monitor expressions are evaluated in xyOps Expression Syntax (JavaScript-style) using the current ServerMonitorData object as context.Examples
Data Match
If your expression yields a string and the number is embedded within it, setData Match to a regular expression to extract exactly one numeric value.
Example: Open Files Monitor
Example: Open Files Monitor
- Expression:
commands.open_files - Data Match:
(\d+) - Result: Extracts the first integer from a string like
"1056\t0\t9223372036854775807"
Delta Monitors
Some data sources are absolute counters that only ever increase (OS network byte totals, disk I/O byte counters). For these:Stores the change since the previous minute instead of the absolute counter
Divides the delta by elapsed seconds between samples to produce a per-second rate
Clamp negative spikes to a specific minimum (commonly
0) to avoid dips after reboots or counter resetsCode Implementation
Delta calculation from/workspace/source/lib/monitor.js:255-289:
monitor.js:255-289
QuickMon (Quick Monitors)
QuickMon are lightweight, predefined real-time monitors sampled every second on each server:- Retention: Last 60 seconds per server stored in memory
- Display: Real-time graphs and gauges on Server and Group pages
- Snapshots: Most recent 60-second series embedded into all snapshots
- Config: Defined in
config.jsonunderquick_monitors
Configuration from config.json
config.json:136-148
Default Monitors
xyOps ships with a set of standard monitors:| Monitor | Expression | Type | Delta | Notes |
|---|---|---|---|---|
| Load Average | load[0] | float | No | 1-minute load average |
| CPU Usage | cpu.currentLoad | float | No | Suffix: %, Min range: 100 |
| Memory in Use | memory.used | bytes | No | Total memory in use |
| Memory Available | memory.available | bytes | No | Available memory |
| Network Connections | stats.network.conns | integer | No | Active socket connections |
| Disk Usage | mounts.root.use | float | No | Root filesystem usage %, Min range: 100 |
| Disk Read | stats.fs.rx | bytes | Yes | Bytes/sec, Delta + Divide by Time |
| Disk Write | stats.fs.wx | bytes | Yes | Bytes/sec, Delta + Divide by Time |
| Disk I/O | stats.io.tIO | integer | Yes | Total I/O ops/sec |
| I/O Wait | cpu.totals.iowait | float | No | CPU I/O wait % (Linux only) |
| Open Files | commands.open_files | integer | No | Uses Data Match: (\d+) (Linux only) |
| Network In | stats.network.rx_bytes | bytes | Yes | Bytes/sec in |
| Network Out | stats.network.tx_bytes | bytes | Yes | Bytes/sec out |
| Processes | processes.all | integer | No | Total number of processes |
| Active Jobs | jobs | integer | No | Number of active xyOps jobs |
Examples and Recipes
Track Specific Process Memory
Track Specific Process Memory
bytesMemory Used Percentage
Memory Used Percentage
float, Suffix: %, Min Vert Range: 100Root Free Space (in GB)
Root Free Space (in GB)
float, Suffix: GBTCP LISTEN Sockets
TCP LISTEN Sockets
integerFor advanced metrics, write a Monitor Plugin that emits structured data, then point a monitor expression at it and optionally use
data_match to extract the value.