From 7772adc812e4281b33545bcff585779dcc6385fa Mon Sep 17 00:00:00 2001 From: samuel-p Date: Fri, 27 Nov 2020 22:37:24 +0100 Subject: [PATCH] added shields endpoint (closes #45) --- src/main.status.ts | 50 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/src/main.status.ts b/src/main.status.ts index 8b466bd..db41deb 100644 --- a/src/main.status.ts +++ b/src/main.status.ts @@ -1,5 +1,5 @@ import {json, Router} from 'express'; -import {CurrentStatus, State} from './app/_data/data'; +import {CurrentStatus, Service, State} from './app/_data/data'; import {existsSync, readFileSync, writeFileSync} from 'fs'; import {join} from 'path'; import {JSONPath} from 'jsonpath-plus'; @@ -83,7 +83,53 @@ api.post('/update/health', (req, res) => { }); api.get('/status', (req, res) => { - return res.json(cache); + return res.json(cache); +}); + +api.get('/badge', (req, res) => { + const serviceId = req.query.service as string; + if (!serviceId) { + return res.json({ + "schemaVersion": 1, + "label": "sp-status", + "message": "service not provided", + "isError": true + }); + } + const service = cache.groups + .map(g => g.services).reduce((x, y) => x.concat(y), []) + .find(s => s.id === serviceId); + if (!service) { + return res.json({ + "schemaVersion": 1, + "label": "sp-status", + "message": "service not found", + "isError": true + }); + } + const label = req.query.label || service.name; + let message; + let color; + switch (service.state) { + case 'operational': + message = req.query.operational || service.state; + color = '#7ed321'; + break; + case 'outage': + message = req.query.outage || service.state; + color = '#ff6f6f'; + break; + case 'maintenance': + message = req.query.maintenance || service.state; + color = '#f7ca18'; + break; + } + return res.json({ + "schemaVersion": 1, + "label": label, + "message": message, + "color": color + }); }); api.get('/info', (req, res) => {