Below is a minimal example of making an HTTP request to Framasoft cron’s health checks from Node.js.
var https = require('https');
https.get('https://hc.framasoft.org/ping/your-uuid-here').on('error', (err) => {
console.log('Ping failed: ' + err)
});
Note: the "https" library executes requests asynchronously. If you send both "start" and "success" signals, you can encounter a race condition where the "success" signal arrives before the "start" signal. Avoid the race condition by using callbacks, promises or the async/await feature. Here is an example that uses async/await and the axios library:
const axios = require("axios");
async function ping(url) {
try {
await axios.get(url, {timeout: 5000});
} catch(error) {
// Log the error and continue. A ping failure should
// not prevent the job from running.
console.error("Ping failed: " + error);
}
}
async function runJob() {
var pingUrl = "https://hc.framasoft.org/ping/your-uuid-here";
await ping(pingUrl + "/start");
try {
console.log("TODO: run the job here");
await ping(pingUrl); // success
} catch(error) {
await ping(pingUrl + "/fail");
}
}
runJob();
You can also send pings from a browser environment. Framasoft cron’s health checks sets the
Access-Control-Allow-Origin:*
CORS header, so cross-domain AJAX requests work.
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://hc.framasoft.org/ping/your-uuid-here', true);
xhr.send(null);