Files
matrix/hookshot/grafana.js

32 lines
1.9 KiB
JavaScript
Raw Normal View History

var status = data.status || 'unknown';
var emoji = status === 'firing' ? '🔴' : (status === 'resolved' ? '🟢' : '🟡');
var title = data.title || ('[' + status.toUpperCase() + '] Grafana Alert');
var alerts = data.alerts || [];
var lines = [emoji + ' ' + title];
var htmlParts = ['<b>' + emoji + ' ' + title + '</b>'];
for (var i = 0; i < alerts.length && i < 5; i++) {
var a = alerts[i];
var labels = a.labels || {};
var ann = a.annotations || {};
var name = labels.alertname || '';
var summary = ann.summary || ann.description || '';
var instance = labels.instance || labels.job || '';
var severity = labels.severity || '';
var aStatus = a.status || '';
var genURL = a.generatorURL || '';
var aEmoji = aStatus === 'resolved' ? '🟢' : '🔴';
if (alerts.length > 1) {
var alertLine = aEmoji + ' ' + (name || 'Alert') + (severity ? ' [' + severity + ']' : '') + (instance ? ' \u2014 ' + instance : '') + (summary ? ': ' + summary : '');
lines.push(alertLine);
htmlParts.push(alertLine + (genURL ? ' <a href="' + genURL + '">\u2197</a>' : ''));
} else {
if (name && name !== title) { lines.push('Alert: ' + name); htmlParts.push('Alert: ' + name); }
if (severity) { lines.push('Severity: ' + severity); htmlParts.push('Severity: ' + severity); }
if (instance) { lines.push('Instance: ' + instance); htmlParts.push('Instance: ' + instance); }
if (summary) { lines.push(summary); htmlParts.push(summary); }
if (genURL) { lines.push('View: ' + genURL); htmlParts.push('<a href="' + genURL + '">View in Grafana</a>'); }
}
}
if (alerts.length === 0 && data.message) { lines.push(data.message); htmlParts.push(data.message); }
if (alerts.length > 5) { var more = '(+' + (alerts.length - 5) + ' more alerts)'; lines.push(more); htmlParts.push('<i>' + more + '</i>'); }
result = { version: 'v2', plain: lines.join('\n'), html: htmlParts.join('<br>'), msgtype: 'm.notice' };