74 lines
2.8 KiB
JavaScript
74 lines
2.8 KiB
JavaScript
|
|
const ExternalAlert = require('../models/ExternalAlert');
|
|||
|
|
const Ticket = require('../models/Ticket');
|
|||
|
|
|
|||
|
|
const getAll = (req, res) => {
|
|||
|
|
try {
|
|||
|
|
const acknowledged = req.query.acknowledged !== undefined
|
|||
|
|
? req.query.acknowledged === 'true'
|
|||
|
|
: undefined;
|
|||
|
|
const alerts = ExternalAlert.getAll({ acknowledged });
|
|||
|
|
res.json({ status: 'success', data: alerts });
|
|||
|
|
} catch (err) {
|
|||
|
|
res.status(500).json({ status: 'error', message: err.message });
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const acknowledge = (req, res) => {
|
|||
|
|
try {
|
|||
|
|
const alert = ExternalAlert.acknowledge(req.params.id);
|
|||
|
|
if (!alert) return res.status(404).json({ status: 'error', message: 'Alert nicht gefunden' });
|
|||
|
|
res.json({ status: 'success', data: alert });
|
|||
|
|
} catch (err) {
|
|||
|
|
res.status(500).json({ status: 'error', message: err.message });
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const createTicket = (req, res) => {
|
|||
|
|
try {
|
|||
|
|
const alert = ExternalAlert.getById(req.params.id);
|
|||
|
|
if (!alert) return res.status(404).json({ status: 'error', message: 'Alert nicht gefunden' });
|
|||
|
|
|
|||
|
|
const priorityMap = { CRIT: 'kritisch', WARN: 'hoch', OK: 'niedrig', UNKNOWN: 'mittel' };
|
|||
|
|
|
|||
|
|
const title = alert.device
|
|||
|
|
? `[${alert.source?.toUpperCase()}] ${alert.device} – ${alert.message || alert.state_transition}`.substring(0, 200)
|
|||
|
|
: (alert.message || 'Monitoring Alert').substring(0, 200);
|
|||
|
|
|
|||
|
|
const description = [
|
|||
|
|
alert.device ? `**Gerät:** ${alert.device}` : '',
|
|||
|
|
alert.service ? `**Service:** ${alert.service}` : '',
|
|||
|
|
alert.state_transition ? `**Status:** ${alert.state_transition}` : '',
|
|||
|
|
alert.severity ? `**Severity:** ${alert.severity}` : '',
|
|||
|
|
alert.message ? `\n**Meldung:** ${alert.message}` : '',
|
|||
|
|
alert.customer ? `**Kunde:** ${alert.customer}` : '',
|
|||
|
|
alert.monitored_by ? `**Überwacht von:** ${alert.monitored_by}` : '',
|
|||
|
|
alert.state_time ? `**Zeitpunkt:** ${alert.state_time}` : '',
|
|||
|
|
].filter(Boolean).join('\n');
|
|||
|
|
|
|||
|
|
const ticket = Ticket.create({
|
|||
|
|
title,
|
|||
|
|
description,
|
|||
|
|
source: 'monitoring',
|
|||
|
|
category: 'Netzwerk',
|
|||
|
|
priority: priorityMap[alert.severity] || 'mittel',
|
|||
|
|
status: 'offen',
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
ExternalAlert.setTicket(alert.id, ticket.id);
|
|||
|
|
res.json({ status: 'success', data: { ticket, alert: ExternalAlert.getById(alert.id) } });
|
|||
|
|
} catch (err) {
|
|||
|
|
res.status(500).json({ status: 'error', message: err.message });
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const remove = (req, res) => {
|
|||
|
|
try {
|
|||
|
|
ExternalAlert.delete(req.params.id);
|
|||
|
|
res.json({ status: 'success' });
|
|||
|
|
} catch (err) {
|
|||
|
|
res.status(500).json({ status: 'error', message: err.message });
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
module.exports = { getAll, acknowledge, createTicket, remove };
|