Files
matrix/hookshot/grafana.js
Jared Vititoe 0e275d725e refactor: replace old bot code with Matrix infra configs and scripts
- Remove obsolete Python bot (Wordle, commands, callbacks, welcome)
- Add hookshot/ — all 11 webhook transformation functions + deploy.sh
- Add cinny/ — config.json and dev-update.sh (nightly dev branch build)
- Add landing/ — matrix.lotusguild.org landing page HTML
- Add systemd/ — livekit-server, draupnir, cinny cron unit files
- Add draupnir/ — production config (access token redacted)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 10:36:51 -04:00

32 lines
1.9 KiB
JavaScript

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' };