What it does
Track your game servers like first-class citizens: player counts, current map, FPS and arbitrary custom metrics — shown on your status page with the same uptime, alerting and incident machinery as every other monitor.
Supported game types
game_type |
Server |
|---|---|
fivem |
FiveM / RedM (GTA V, RDR2) |
minecraft |
Minecraft (Java) |
rust |
Rust |
cs2 |
Counter-Strike 2 |
ark |
ARK: Survival Evolved/Ascended |
valheim |
Valheim |
custom |
Anything else — use push or tcp_connect |
Query methods
query_method |
How it works |
|---|---|
query |
We query the game's public query protocol on query_port |
rest_api |
We poll an HTTP JSON endpoint on the server |
tcp_connect |
Simple TCP reachability — server accepts connections = up |
push |
Your server/plugin pushes metrics to us (below) |
Push-based reporting
A plugin or script on your server pushes metrics — required for custom games and the most detailed data for all others:
POST https://api.shxrk.systems/api/v1/uptime/game-server/push
Authorization: Bearer <push_key>
Content-Type: application/json
{
"player_count": 42,
"max_players": 64,
"fps": 59.7,
"map_name": "de_dust2",
"server_name": "ShxrkSystems #1",
"resources": [
{ "name": "es_extended", "state": "started" },
{ "name": "ox_inventory", "state": "started" }
],
"custom_metrics": { "tick_rate": 128 }
}
| Field | Type | Description |
|---|---|---|
player_count |
int | Current players |
max_players |
int | Slot limit |
fps |
float | Server FPS / tick rate |
map_name |
string | Current map |
server_name |
string | Display name |
resources |
object[] | Running resources/plugins — { "name", "state" } (FiveM-style) |
custom_metrics |
object | Any additional numeric/string metrics |
If pushes stop within expected_interval seconds, the monitor goes down — a crashed server is caught even when it can't report. A push also resets the staleness timer and records an up-check.
FiveM: drop-in resource
For FiveM/RedM there is a ready-made server resource — no Lua needed. Download shxrk-monitor:
Drop the folder into resources/, then add to server.cfg:
ensure shxrk-monitor
set shxrk_push_key "YOUR_PUSH_KEY"
It pushes player_count, max_players (sv_maxclients), server FPS (from tick timing), map_name, sv_hostname and every resource's state every 60 seconds — so you can alert when es_extended, ox_inventory or any critical resource leaves the started state. Optional convars: shxrk_push_interval (min 15s) and shxrk_push_endpoint.
Managing monitors
| Method | Path | Description |
|---|---|---|
| GET | /api/v1/uptime/game-server/monitors |
List game server monitors |
| GET | /api/v1/uptime/game-server/monitors/:id |
Detail |
| PUT | /api/v1/uptime/game-server/monitors/:id/config |
Update game_type, query_method, query_port, widgets, interval |
| GET | /api/v1/uptime/game-server/monitors/:id/metrics |
Recent metrics |
| GET | /api/v1/uptime/game-server/monitors/:id/plugin |
Download the server plugin |
| POST | /api/v1/uptime/game-server/monitors/:id/regenerate-key |
Rotate the push key |
The legacy push path POST /api/v2/uptime/game-server/push remains reachable for already-deployed scripts, but new code should use /api/v1.
The push key is scoped to the single monitor — rotating it never affects other monitors.
Widgets
The widgets config controls which metrics render publicly on your status page — players over time, current map, FPS — so players see server health without logging in.