From 92bb2928e1f84b4e8d6e82f0a88913c1edd85659 Mon Sep 17 00:00:00 2001 From: timm Date: Sun, 20 Apr 2025 02:14:28 +0200 Subject: [PATCH] h --- docker-compose.yml | 8 +++-- scheduler.js | 83 ---------------------------------------------- test/scheduler.js | 7 ---- 3 files changed, 5 insertions(+), 93 deletions(-) delete mode 100644 scheduler.js diff --git a/docker-compose.yml b/docker-compose.yml index b2cdd7b..3ac7af2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,12 +1,12 @@ version: '3.8' services: - e2e-monitor: + e2e-monitor-uam-prod: build: . restart: unless-stopped - env_file: .env + env_file: .env-uam-prod ports: - - "3020:3000" # Web API: /status, /healthz, /run-now + - "${APIPORT}:3000" # Web API: /status, /healthz, /run-now volumes: - ./test:/app/test:ro - ./test-results:/app/test-results @@ -22,6 +22,7 @@ services: image: prom/prometheus volumes: - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml + - ./data-prometheus:/prometheus ports: - "9090:9090" depends_on: @@ -32,6 +33,7 @@ services: ports: - "3031:3000" volumes: + - ./data-grafana:/var/lib/grafana - ./grafana/provisioning:/etc/grafana/provisioning - ./grafana/dashboards:/var/lib/grafana/dashboards depends_on: diff --git a/scheduler.js b/scheduler.js deleted file mode 100644 index e38201a..0000000 --- a/scheduler.js +++ /dev/null @@ -1,83 +0,0 @@ - -require('dotenv').config(); -const express = require('express'); -const { exec } = require('child_process'); -const axios = require('axios'); -const nodemailer = require('nodemailer'); - -const INTERVAL_MINUTES = 30; -const MAX_RETRIES = 3; -const PORT = process.env.PORT || 3000; -const app = express(); -let lastStatus = { success: null, message: null, timestamp: null, duration: null }; - -function runCheck(attempt = 1) { - const startTs = Date.now(); - console.log(`[{new Date().toISOString()}] ▶️ Starting OIDC check (try {attempt}/{MAX_RETRIES})...`); - - const child = exec('node /app/test/monitor.js', (error, stdout, stderr) => { - lastStatus.timestamp = new Date().toISOString(); - lastStatus.duration = Date.now() - startTs; - - if (stdout) console.log(stdout); - if (stderr) console.error(stderr); - - lastStatus.success = !error; - lastStatus.message = error ? `Fehlgeschlagen: ${error.message}` : 'Login erfolgreich'; - - if (error) { - notifySlack(`Fehler beim Login:\n${lastStatus.message}`); - sendEmail('❌ OIDC Monitoring Fehler', `Zeit: ${lastStatus.timestamp}\n${lastStatus.message}`); - } - - pushToPrometheus(!error, lastStatus.duration); - }); -} - -function pushToPrometheus(success, duration) { - const labels = `{job="oidc-monitor",instance="${process.env.PROMETHEUS_INSTANCE_ID}"}`; - const metrics = ` -oidc_login_success${labels} ${success ? 1 : 0} -oidc_login_duration_seconds${labels} ${(duration / 1000).toFixed(2)} -`; - axios.post(`${process.env.PUSHGATEWAY_URL}/metrics/job/oidc-monitor`, metrics, { - headers: { 'Content-Type': 'text/plain' } - }).then(() => console.log('📡 Prometheus Push erfolgreich')) - .catch(err => console.error('❌ Prometheus Push fehlgeschlagen:', err.message)); -} - -function notifySlack(message) { - if (!process.env.SLACK_WEBHOOK_URL) return; - axios.post(process.env.SLACK_WEBHOOK_URL, { text: `❗️OIDC Monitoring Alert:\n${message}` }) - .then(() => console.log('📣 Slack-Nachricht gesendet')) - .catch(err => console.error('❌ Slack fehlgeschlagen:', err.message)); -} - -function sendEmail(subject, text) { - const transporter = nodemailer.createTransport({ - host: process.env.SMTP_HOST, - port: parseInt(process.env.SMTP_PORT || '25', 10), - secure: false - }); - transporter.sendMail({ - from: process.env.MAIL_FROM, - to: process.env.MAIL_TO, - subject, - text - }).then(() => console.log('✉️ E-Mail gesendet')) - .catch(err => console.error('❌ Mail fehlgeschlagen:', err.message)); -} - -app.get('/run-now', (req, res) => { runCheck(); res.send('▶️ Check gestartet'); }); -app.get('/healthz', (req, res) => { - if (lastStatus.success === false) return res.status(500).send('Letzter Check fehlgeschlagen'); - res.send('OK'); -}); -app.get('/status', (req, res) => res.json(lastStatus)); - -app.listen(PORT, () => { - console.log(`🌐 Web API läuft auf Port ${PORT}`); -}); - -runCheck(); -setInterval(runCheck, INTERVAL_MINUTES * 60 * 1000); diff --git a/test/scheduler.js b/test/scheduler.js index e38201a..9084ca4 100644 --- a/test/scheduler.js +++ b/test/scheduler.js @@ -26,7 +26,6 @@ function runCheck(attempt = 1) { lastStatus.message = error ? `Fehlgeschlagen: ${error.message}` : 'Login erfolgreich'; if (error) { - notifySlack(`Fehler beim Login:\n${lastStatus.message}`); sendEmail('❌ OIDC Monitoring Fehler', `Zeit: ${lastStatus.timestamp}\n${lastStatus.message}`); } @@ -46,12 +45,6 @@ oidc_login_duration_seconds${labels} ${(duration / 1000).toFixed(2)} .catch(err => console.error('❌ Prometheus Push fehlgeschlagen:', err.message)); } -function notifySlack(message) { - if (!process.env.SLACK_WEBHOOK_URL) return; - axios.post(process.env.SLACK_WEBHOOK_URL, { text: `❗️OIDC Monitoring Alert:\n${message}` }) - .then(() => console.log('📣 Slack-Nachricht gesendet')) - .catch(err => console.error('❌ Slack fehlgeschlagen:', err.message)); -} function sendEmail(subject, text) { const transporter = nodemailer.createTransport({