From 500516e784262038dbff3896c7be05014594820a Mon Sep 17 00:00:00 2001 From: Robert Richter Date: Fri, 12 Jun 2020 21:31:01 +0200 Subject: [PATCH] update Fr 12. Jun 21:31:01 CEST 2020 --- server/api.js | 4 +-- server/udp.js | 2 +- server/waip.js | 68 ++++++++++++++++++++++++++++++++------------------ 3 files changed, 47 insertions(+), 27 deletions(-) diff --git a/server/api.js b/server/api.js index 4aa7d6e..96487fb 100755 --- a/server/api.js +++ b/server/api.js @@ -30,7 +30,7 @@ module.exports = function (io, sql, app_cfg, waip) { var app_id = raw_data.app_id; // nur speichern wenn app_id nicht eigenen globalen app_id entspricht if (app_id != app_cfg.global.app_id) { - waip.einsatz_speichern(data, app_id); + waip.waip_speichern(data, app_id); sql.db_log('API', 'Neuer Wachalarm von ' + remote_ip + ': ' + data); }; }); @@ -119,7 +119,7 @@ module.exports = function (io, sql, app_cfg, waip) { var app_id = raw_data.app_id; // nur speichern wenn app_id nicht eigenen globalen app_id entspricht if (app_id != app_cfg.global.app_id) { - waip.einsatz_speichern(data); + waip.waip_speichern(data, app_id); sql.db_log('API', 'Neuer Wachalarm von ' + app_cfg.endpoint.host + ': ' + data); }; }); diff --git a/server/udp.js b/server/udp.js index 589fec0..0fefca7 100644 --- a/server/udp.js +++ b/server/udp.js @@ -25,7 +25,7 @@ module.exports = function(app_cfg, waip, sql) { udp_server.on('message', function(message, remote) { if (isValidJSON(message)) { sql.db_log('WAIP', 'Neuer Einsatz von ' + remote.address + ':' + remote.port + ': ' + message); - waip.einsatz_speichern(message, 'udp'); + waip.waip_speichern(message, 'udp'); } else { sql.db_log('Fehler-WAIP', 'Fehler: Einsatz von ' + remote.address + ':' + remote.port + ' Fehlerhaft: ' + message); } diff --git a/server/waip.js b/server/waip.js index 737eec5..3345f21 100755 --- a/server/waip.js +++ b/server/waip.js @@ -2,16 +2,17 @@ module.exports = function (io, sql, fs, brk, async, app_cfg, api, proof) { // Module laden const json2csv = require('json2csv'); - const sendmail = require('sendmail')({silent: true}); + const sendmail = require('sendmail')({ + silent: true + }); - function einsatz_speichern(einsatz_rohdaten, app_id) { + function waip_speichern(einsatz_rohdaten, app_id) { // Einsatzmeldung in Datenbank speichern und verteilen proof.validate_waip(einsatz_rohdaten, function (valid) { if (valid) { - // Einsatzmeldung (JSON) speichern sql.db_einsatz_speichern(einsatz_rohdaten, function (waip_id) { - sql.db_log('WAIP', 'DEBUG: Neuer Einsatz mit der ID ' + waip_id); + sql.db_log('DEBUG', 'Neuen Einsatz mit der ID ' + waip_id + ' gespeichert.'); // nach dem Speichern anhand der waip_id die beteiligten Wachennummern zum Einsatz ermitteln sql.db_einsatz_get_rooms(waip_id, function (socket_rooms) { if (socket_rooms) { @@ -27,11 +28,12 @@ module.exports = function (io, sql, fs, brk, async, app_cfg, api, proof) { }; }); } else { + // wenn kein Raum (keine Wache) in der DB hinterlegt ist, dann Einsatz direkt wieder loeschen sql.db_log('Fehler-WAIP', 'Fehler: Keine Wache für den Einsatz mit der ID ' + waip_id + ' vorhanden! Einsatz wird gelöscht!'); sql.db_einsatz_loeschen(waip_id); }; }); - // pruefen ob für die beteiligten Wachen eine Verteiler-Liste hinterlegt ist, falls ja, Rueckmeldungs-Link senden + // pruefen ob für die beteiligten Wachen eine Verteiler-Liste hinterlegt ist, falls ja: Rueckmeldungs-Link senden sql.db_vmtl_get_list(waip_id, function (list) { if (list) { brk.alert_vmtl_list(list, function (result) { @@ -47,13 +49,13 @@ module.exports = function (io, sql, fs, brk, async, app_cfg, api, proof) { }); }); // Einsatzdaten per API weiterleiten (entweder zum Server oder zum verbunden Client) + // TODO TEST: Api WAIP api.server_to_client_new_waip(einsatz_rohdaten, app_id); api.client_to_server_new_waip(einsatz_rohdaten, app_id); }; }); }; - function waip_verteilen(waip_id, socket, wachen_nr) { // Einsatzdaten für eine Wache aus Datenbank laden und an Client verteilen var user_obj = socket.request.user; @@ -116,6 +118,7 @@ module.exports = function (io, sql, fs, brk, async, app_cfg, api, proof) { callback && callback(result); }; }); + // TODO TEST: Api WAIP api.server_to_client_new_rmld(rueckmeldung, app_id); api.client_to_server_new_rmld(rueckmeldung, app_id); }; @@ -389,24 +392,24 @@ module.exports = function (io, sql, fs, brk, async, app_cfg, api, proof) { // beteiligte Wachen aus den Einsatz-Rueckmeldungen filtern var arry_wachen = full_rmld.map(a => a.wache_nr); sql.db_export_get_for_rmld(arry_wachen, function (export_data) { - // db.each - // FIXME remove alle daten aus full_rmld die nicht mit export_filter übereinstimmen (left von) - + // SQL gibt ist eine Schliefe (db.each), fuer jedes Ergebnis wird eine CSV/Mail erstellt + var part_rmld = full_rmld.filter(obj => obj.wache_id.startsWith(export_data.export_filter)); // CSV-Spalten definieren var csv_col = ['id', 'einsatznummer', 'waip_uuid', 'rmld_uuid', 'alias', 'einsatzkraft', 'maschinist', 'fuehrungskraft', 'agt', 'set_time', 'arrival_time', 'wache_id', 'wache_nr', 'wache_name']; json2csv({ - data: full_rmld, + data: part_rmld, fields: csv_col }, function (err, csv) { // TODO TEST: CSV und Mail if (err) { sql.db_log('EXPORT', 'Fehler beim erstellen der Export-CSV: ' + err); } else { + // CSV Dateiname und Pfad festlegen + var csv_filename = part_rmld[0].einsatznummer + '_export_rmld_' + export_data.export_name + '.csv'; + csv_filename = process.cwd() + app_cfg.global.backup_path + csv_filename; // CSV in Backup-Ordner speichern, falls aktiviert if (app_cfg.global.backup_rmld_to_file) { - // CSV Dateiname und Pfad festlegen - var csv_filename = full_rmld.einsatznummer + '_export_rmld_' + export_data.export_name + '.csv'; - csv_filename = process.cwd() + app_cfg.global.backup_path + csv_filename; + // CSV speichern fs.writeFile(csv_filename, csv, function (err) { if (err) { @@ -414,17 +417,34 @@ module.exports = function (io, sql, fs, brk, async, app_cfg, api, proof) { }; }); }; - // FIXME CSV per Mail versenden, falls aktiviert + // CSV per Mail versenden, falls aktiviert if (app_cfg.global.backup_rmld_to_mail) { - + // pruefen ob Mail plausibel ist + var validmail = /\S+@\S+\.\S+/; + if (validmail.test(export_data.export_recipient)) { + var mail_from = 'keineantwort@' + app_cfg.global.url.replace(/(^\w+:|^)\/\//, ''); + var mail_subject = 'Automatischer Export Rückmeldungen Wachalarm-IP - ' + export_data.export_name + ' - Einsatz ' + part_rmld[0].einsatznummer; + var mail_html = 'Hallo,

anbei der automatische Export aller Einsatz-Rückmeldungen für den Einsatz ' + part_rmld[0].einsatznummer + '

Mit freundlichen Grüßen

' + app_cfg.global.company; + sendmail({ + from: mail_from, + to: export_data.export_recipient, + subject: mail_subject, + html: mail_html, + attachments: [{ + filename: csv_filename, + content: csv + }] + }, function (err, reply) { + if (!err) { + sql.db_log('EXPORT', 'Mail an ' + export_data.mail_subject + ' gesendet - ' + reply); + } else { + sql.db_log('EXPORT', 'Fehler beim senden der Export-Mail an ' + export_data.mail_subject + ' - ' + err + '; ' + err.stack); + }; + }) + } else { + sql.db_log('EXPORT', 'Fehler beim versenden der Export-Mail an ' + export_data.mail_subject + ' - keine richtige Mail-Adresse!'); + }; }; - - //export_data.export_recipient if valide mail-adresse - - - //export_data.export_name - //export_data.export_text - //export_data.export_filter }; }); }); @@ -445,7 +465,7 @@ module.exports = function (io, sql, fs, brk, async, app_cfg, api, proof) { if (!data) { fs.unlink(process.cwd() + app_cfg.global.soundpath + file, function (err) { if (err) return sql.db_log('Fehler-WAIP', err); - sql.db_log('WAIP', file + ' wurde erfolgreich geloescht'); + sql.db_log('WAIP', 'Veraltete Sound-Datei ' + file + ' wurde gelöscht.'); }); }; }); @@ -455,7 +475,7 @@ module.exports = function (io, sql, fs, brk, async, app_cfg, api, proof) { return { - einsatz_speichern: einsatz_speichern, + waip_speichern: waip_speichern, waip_verteilen: waip_verteilen, rmld_speichern: rmld_speichern, dbrd_verteilen: dbrd_verteilen,