diff --git a/entities/webservice.js b/entities/webservice.js index a002120..e536154 100644 --- a/entities/webservice.js +++ b/entities/webservice.js @@ -34,6 +34,7 @@ module.exports = { { label: 'endpoints to test', sections: [ 'autotestInterval', + 'testNow', 'autotest', ], }, @@ -206,6 +207,19 @@ module.exports = { }, ], }, + + testNow: { + label: 'test now', + fields: [ + { key: 'id', + label: 'click to test this endpoint now', + editor: 'button', + method: 'post', + url: '/status/webservices/:id/testnow', + translate: true, + }, + ], + }, }, }, }), diff --git a/index.js b/index.js index c3b583e..5fa3935 100644 --- a/index.js +++ b/index.js @@ -235,7 +235,7 @@ module.exports = { }, ], - routes: ({ server }) => [ + routes: ({ server, settings }) => [ // Get all services { route: '/status/webservices', @@ -286,6 +286,30 @@ module.exports = { }, }, + { route: '/status/webservices/:id/testnow', + method: 'post', + requires: 'smartyellow/status/editServices', + handler: async (req, res, user) => { + const item = await server.storage({ user }).store('smartyellow/webservice').get(req.params[0]); + const runtime = fork(__dirname + '/lib/runtime.js'); + runtime.send({ command: 'testOne', service: item }); + runtime.on('message', async message => { + res.json(message); + if (message.error) { + server.error(message.error); + } + else if (message.outage) { + await processOutage({ + outage: { [item.id]: message.outage }, + onDateUpdated: () => server.publish('cms', 'smartyellow/status/reload'), + server, + settings, + }); + } + }); + }, + }, + { route: '/status/webservices/search', method: 'post', requires: 'smartyellow/status/seeServices', diff --git a/lib/processoutage.js b/lib/processoutage.js index f5a2cd1..1e5b05b 100644 --- a/lib/processoutage.js +++ b/lib/processoutage.js @@ -2,13 +2,17 @@ const { makeId } = require('core/makeid'); -async function processOutage({ outage, server, settings }) { +async function processOutage({ outage, server, settings, onDateUpdated }) { + if (typeof onDateUpdated !== 'function') { + onDateUpdated = () => null; + } + for (const [ id, testResult ] of Object.entries(outage)) { // Update check date server.storage.store('smartyellow/webservice').update( { id }, { $set: { lastChecked: new Date() } } - ); + ).then(() => onDateUpdated(id)); // Get service entry const service = await server