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