import { PrometheusDriver } from 'prometheus-query'; const prom = new PrometheusDriver({ endpoint: "https://admin.autistici.org", baseURL: "/api/v1", withCredentials: true }); const accountsQuery = "sum(max(accounts_count) by (shard,type,status)) by (type)"; const alertsURL = "https://admin.autistici.org/alerts.json"; const alertsQuery = { filters: ["@state=active", "severity=page"], gridLabel: "", gridSortReverse: false, gridLimits: {}, sortOrder: "", sortLabel: "", sortReverse: false, defaultGroupLimit: 5, groupLimits: {} }; const accountNiceNames = { mail: "email accounts", web: "websites", lists: "lists", newsletters: "newsletters" }; function queryAccounts(el) { prom.instantQuery(accountsQuery) .then((res) => { const series = res.result; var tmp = []; series.forEach((serie) => { tmp.push('' + serie.value.value + ' ' + accountNiceNames[serie.metric.labels.type]); }); var txt = 'We are currently hosting ' + tmp.join(', ') + '.'; var p = document.createElement('p'); p.appendChild(document.createTextNode(txt)); el.append(p); }) .catch((err) => { dashboardError('Failed to fetch account metrics', err); }); } function queryAlerts(el) { fetch(alertsURL, { method: 'POST', body: JSON.stringify(alertsQuery), credentials: 'include' }) .then((resp) => { if (!resp.ok) { throw new Error('HTTP request failed'); } return resp.json(); }) .then((result) => { if (result.status != "success") { throw new Error('JSON API request failed'); } var numFiring = result.totalAlerts; var txt = 'No active alerts.'; if (numFiring > 0) { txt = '' + numFiring + ' active alerts!'; } var p = document.createElement('p'); p.appendChild(document.createTextNode(txt)); el.append(p); }) .catch((err) => { dashboardError('Failed to fetch active alerts', err); }); } function dashboardError(msg, err) { var p = document.createElement('p'); var errmsg = err.error; if (!errmsg) { errmsg = err.message; } p.appendChild(document.createTextNode(msg + ': ' + errmsg)); document.getElementById('errors').append(p); } window.addEventListener('load', () => { console.log('Populating data items...'); queryAccounts(document.getElementById('accountInfo')); queryAlerts(document.getElementById('alertInfo')); });