Simple service monitoring with a status page, configurable and extensible protocols and notifications.
- Extensible monitoring protocols & notifications
- Status page
- REST API for status data
config.json structure:
{
"port": 3000,
"checkInterval": 30,
"globalNotifications": [
{
"type": "notifier-name",
"trigger": "change",
"config": {}
}
],
"watchers": [
{
"name": "Service Name",
"protocol": "protocol-name",
"checkInterval": 60,
"url": "https://example.com",
"hidden": false,
"failThreshold": 3,
"notifications": []
}
]
}Returns current status of all services.
{
"timestamp": "2024-03-12T12:34:56.789Z",
"services": [
{
"name": "Service Name",
"status": "up",
"responseTime": 123,
"lastChecked": "2024-03-12T12:34:56.789Z",
"message": "Status message"
}
]
}Checks if the response status code is in the allowed list.
{
"name": "Example HTTP watcher",
"protocol": "http",
"checkInterval": 60,
"url": "https://example.com",
"timeout": 5000,
"allowedStatusCodes": [200, 201, 204],
"notifications": []
}Checks if the response is valid JSON and if the specified JSON path exists.
{
"name": "Example JSON API watcher",
"protocol": "http-json",
"checkInterval": 15,
"url": "https://example.com/api",
"jsonPath": "data.status",
"timeout": 5000,
"allowedStatusCodes": [200, 201, 204],
"condition": {
"type": "equals",
"value": "online"
},
"notifications": []
}Checks if the JSON path exists and is an array with at least one element.
"jsonPath": "data.statuses",
"condition": {
"type": "array-length",
"min": 1
}Minecraft Java Edition, verifies server handshake.
{
"name": "Example Minecraft watcher",
"protocol": "minecraft",
"checkInterval": 60,
"host": "mc.example.com",
"port": 25565,
"timeout": 5000,
"notifications": []
}DPMaster compatible Call of Duty servers (IW4x, CoD4 etc). Sends getInfo packet and waits for infoResponse.
{
"name": "Example CoD Server",
"protocol": "cod",
"checkInterval": 60,
"host": "example.com",
"port": 28960,
"timeout": 5000,
"notifications": []
}Sends a message to a Discord webhook.
{
"type": "discord-webhook",
"webhookUrl": "<discord-webhook-url>"
}Sends a message to a Discord channel.
{
"type": "discord",
"botToken": "<discord-bot-token>",
"channelId": "<discord-channel-id>"
}Sends a message to a Telegram chat.
{
"type": "telegram",
"botToken": "<telegram-bot-token>",
"chatId": "<telegram-chat-id>"
}Sends a message to a webhook.
{
"type": "webhook",
"url": "<webhook-url>"
}Create new files in the protocols/ directory. See existing protocols for reference.
Each protocol must export:
name: Protocol identifier used in configcheck(watcher): Async function returning status object
Create new files in the notifiers/ directory. See existing notifiers for reference.
Each notifier must export:
name: Notifier identifier used in confignotify(changes, config): Async function to send notifications
