Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -34,5 +34,6 @@ plugins/WorldCup2026/* @TimWheeler-SQUP
plugins/Notion/* @clarkd
plugins/Algolia/* @andrewmumblebee
plugins/Vercel/* @andrewmumblebee
plugins/Healthchecks.io/ @adamkinniburgh


13 changes: 13 additions & 0 deletions plugins/Healthchecks.io/v1/configValidation.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"steps": [
{
"displayName": "Authenticate",
"dataStream": {
"name": "checks"
},
"required": true,
"error": "Could not connect. Check the API key is a project API key (not a ping key) and the server URL is correct.",
"success": "Connected successfully."
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"displayName": "Check has Tag",
"source": {
"types": "Check"
},
"target": {
"types": "Tag"
},
"conditions": [
{
"sourceProperty": "checkTags",
"operator": "equals",
"targetProperty": "name"
}
],
"labels": {
"forward": "has tag",
"reverse": "tag of"
}
}
3 changes: 3 additions & 0 deletions plugins/Healthchecks.io/v1/cspell.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"words": ["healthchecks", "OnCalendar", "systemd"]
}
16 changes: 16 additions & 0 deletions plugins/Healthchecks.io/v1/custom_types.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
[
{
"name": "Check",
"sourceType": "Check",
"icon": "heart-pulse",
"singular": "Check",
"plural": "Checks"
},
{
"name": "Tag",
"sourceType": "Tag",
"icon": "tag",
"singular": "Tag",
"plural": "Tags"
}
]
188 changes: 188 additions & 0 deletions plugins/Healthchecks.io/v1/dataStreams/checks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,188 @@
{
"name": "checks",
"displayName": "Checks",
"description": "Current status, schedule and last ping of each check in the project",
"tags": ["Monitoring", "Status"],
"baseDataSourceName": "httpRequestUnscoped",
"config": {
"httpMethod": "get",
"endpointPath": "checks/",
"getArgs": [
{
"key": "tag",
"value": "{{ (typeof tag !== 'undefined' && tag && tag.length) ? tag.flatMap((o) => o.rawId) : null }}"
}
],
"paging": {
"mode": "none"
},
"postRequestScript": "checks.js"
},
"matches": "none",
"ui": [
{
"type": "objects",
"name": "checks",
"label": "Filter by check",
"matches": {
"sourceType": {
"type": "oneOf",
"values": ["Check"]
}
}
},
{
"type": "objects",
"name": "tag",
"label": "Filter by tag",
"help": "Returns only checks that have every selected tag.",
"matches": {
"sourceType": {
"type": "oneOf",
"values": ["Tag"]
}
}
}
],
"metadata": [
{
"name": "id",
"displayName": "Check ID",
"shape": "string",
"role": "id",
"visible": false
},
{
"name": "name",
"displayName": "Name",
"shape": "string",
"role": "label"
},
{
"name": "status",
"displayName": "Status",
"shape": [
"state",
{
"map": {
"success": ["up"],
"warning": ["grace"],
"error": ["down"],
"unmonitored": ["paused"],
"unknown": ["new"]
}
}
]
},
{
"name": "started",
"displayName": "Running",
"shape": "boolean"
},
{
"name": "last_ping",
"displayName": "Last ping",
"shape": "date",
"role": "timestamp"
},
{
"name": "next_ping",
"displayName": "Next ping due",
"shape": "date"
},
{
"name": "secondsSinceLastPing",
"displayName": "Time since last ping",
"computed": true,
"valueExpression": "{{ $['last_ping'] ? Math.max(0, Math.round((Date.now() - Date.parse($['last_ping'])) / 1000)) : null }}",
"shape": "seconds"
},
{
"name": "kind",
"displayName": "Kind",
"shape": "string"
},
{
"name": "timeout",
"displayName": "Period",
"shape": "seconds"
},
{
"name": "schedule",
"displayName": "Schedule",
"shape": "string"
},
{
"name": "tz",
"displayName": "Time zone",
"shape": "string"
},
{
"name": "grace",
"displayName": "Grace time",
"shape": "seconds"
},
{
"name": "tags",
"displayName": "Tags",
"shape": ["array", { "itemShape": "string" }]
},
{
"name": "slug",
"displayName": "Slug",
"shape": "string"
},
{
"name": "desc",
"displayName": "Description",
"shape": "string",
"role": "description"
},
{
"name": "n_pings",
"displayName": "Total pings",
"shape": "number"
},
{
"name": "manual_resume",
"displayName": "Manual resume",
"shape": "boolean",
"visible": false
},
{
"name": "ping_url",
"displayName": "Ping URL",
"shape": "url",
"visible": false
},
{
"name": "update_url",
"displayName": "API URL",
"visible": false
},
{
"name": "uuid",
"displayName": "UUID",
"shape": "string",
"visible": false
},
{
"name": "badge_url",
"displayName": "Badge URL",
"visible": false
},
{
"name": "checkUrl",
"displayName": "Link",
"computed": true,
"valueExpression": "{{ $['update_url'] ? $['update_url'].replace(/[/]api[/]v[0-9]+[/]checks[/]/, '/checks/') + '/details/' : ($['badge_url'] ? $['badge_url'].replace(/[/]b[/].*$/, '') + '/cloaked/' + $['id'] + '/' : null) }}",
"shape": ["url", { "label": "Open in Healthchecks.io" }]
},
{
"sourceId": "id",
"sourceType": "Check",
"name": "name"
}
],
"timeframes": false
}
133 changes: 133 additions & 0 deletions plugins/Healthchecks.io/v1/dataStreams/pings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
{
"name": "pings",
"displayName": "Pings",
"description": "Pings received by a check, including job run times (requires a read-write API key)",
"tags": ["Monitoring", "Events"],
"baseDataSourceName": "httpRequestScopedSingle",
"config": {
"httpMethod": "get",
"endpointPath": "checks/{{object.uuid || object.rawId}}/pings/",
"paging": {
"mode": "none"
},
"postRequestScript": "pings.js",
"errorHandling": {
"type": "script",
"script": "errorHandling/pings.js"
}
},
"matches": {
"sourceType": {
"type": "oneOf",
"values": ["Check"]
}
},
"metadata": [
{
"name": "checkId",
"displayName": "Check ID",
"shape": "string",
"visible": false
},
{
"name": "checkName",
"displayName": "Check",
"shape": "string",
"role": "label"
},
{
"name": "checkTags",
"displayName": "Tags",
"sourceId": "checkId",
"sourceType": "Check",
"objectPropertyPath": "checkTags",
"shape": ["array", { "itemShape": "string" }]
},
{
"name": "date",
"displayName": "Date",
"shape": "date",
"role": "timestamp"
},
{
"name": "type",
"displayName": "Type",
"shape": "string"
},
{
"name": "result",
"displayName": "Result",
"computed": true,
"valueExpression": "{{ $['type'] }}",
"shape": [
"state",
{
"map": {
"success": ["success"],
"error": ["fail"],
"unknown": ["start", "log", "ign"]
}
}
]
},
{
"name": "duration",
"displayName": "Duration",
"shape": "seconds"
},
{
"name": "exitstatus",
"displayName": "Exit status",
"shape": "number"
},
{
"name": "method",
"displayName": "Method",
"shape": "string"
},
{
"name": "scheme",
"displayName": "Scheme",
"shape": "string"
},
{
"name": "remote_addr",
"displayName": "Source IP",
"shape": "string"
},
{
"name": "ua",
"displayName": "User agent",
"shape": "string"
},
{
"name": "rid",
"displayName": "Run ID",
"shape": "string",
"visible": false
},
{
"name": "n",
"displayName": "Ping number",
"shape": "number",
"visible": false
},
{
"sourceId": "checkId",
"sourceType": "Check",
"name": "checkName"
}
],
"timeframes": [
"last1hour",
"last12hours",
"last24hours",
"last7days",
"last30days"
],
"defaultShaping": {
"sort": {
"by": [["date", "desc"]]
}
}
}
Loading
Loading