You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
2.1 KiB
60 lines
2.1 KiB
const { MonitorType } = require("./monitor-type");
|
|
const { UP, log, DOWN, PENDING } = require("../../src/util");
|
|
const { client, v1 } = require("@datadog/datadog-api-client");
|
|
|
|
/**
|
|
* A DataDog class extends the MonitorType.
|
|
* It will query DataDog api to get datadog monitor state and sync the monitor status.
|
|
*/
|
|
class DataDog extends MonitorType {
|
|
|
|
name = "datadog";
|
|
/**
|
|
* Run the monitoring check on the given monitor
|
|
* @param {object} monitor - The monitor object associated with the check.
|
|
* @param {object} heartbeat - The heartbeat object to update.
|
|
* @returns {Promise<void>}
|
|
* @throws Will throw an error if the API call found any.
|
|
*/
|
|
async check(monitor, heartbeat) {
|
|
try {
|
|
const configurationOpts = {
|
|
authMethods: {
|
|
apiKeyAuth: monitor.datadog_api_key,
|
|
appKeyAuth: monitor.datadog_app_key
|
|
},
|
|
};
|
|
const configuration = client.createConfiguration(configurationOpts);
|
|
configuration.setServerVariables({
|
|
site: monitor.datadog_site
|
|
});
|
|
const apiInstance = new v1.MonitorsApi(configuration);
|
|
let params = {
|
|
monitorId: monitor.datadog_monitor_id,
|
|
};
|
|
let status = await apiInstance.getMonitor(params).then((data) => {
|
|
log.debug("datadog", "DataDog API called successfully");
|
|
let state = data["overallState"];
|
|
if (state === "OK") {
|
|
log.debug("datadog", "UP");
|
|
return UP;
|
|
} else if (state === "No Data") {
|
|
log.debug("datadog", "PENDING");
|
|
return PENDING;
|
|
} else {
|
|
log.debug("datadog", "DOWN");
|
|
return DOWN;
|
|
}
|
|
});
|
|
heartbeat.status = status;
|
|
} catch (err) {
|
|
// trigger log function somewhere to display a notification or alert to the user (but how?)
|
|
throw new Error(`Error checking datadog monitor: ${err}`);
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
DataDog,
|
|
};
|