Zum Inhalt

Monitoring & Fehlerüberwachung

Errors-Seite

Seite: app/errors/page.tsx (143 Zeilen) API: app/api/errors/route.ts (74 Zeilen) Pfad: /errors

Übersicht

Zeigt fehlgeschlagene Buy Intents und User-Error-Logs mit Error-Aggregation der letzten 7 Tage.

Error-Aggregation (Top 20)

SELECT error_code, COUNT(*) as count,
       MAX(COALESCE(failed_at, created_at)) as last_occurrence
FROM buy_intents
WHERE status = 'FAILED'
  AND created_at > now() - interval '7 days'
GROUP BY error_code
ORDER BY count DESC
LIMIT 20

Failed Buy Intents

SELECT intent_id, buyer, pool_id, tip_count, total_cost,
       error_code, error_message, tx_hash, relayer_tx_hash,
       created_at, failed_at
FROM buy_intents
WHERE status = 'FAILED'
ORDER BY COALESCE(failed_at, created_at) DESC
LIMIT $1 OFFSET $2

User Error Logs

SELECT id, wallet_address, error_code, error_message, action,
       intent_id, tx_hash, created_at, resolved
FROM user_error_logs
ORDER BY created_at DESC
LIMIT $1 OFFSET $2

Watchdog

Seite: app/watchdog/page.tsx (615 Zeilen) API: app/api/watchdog/route.ts (82 Zeilen) Pfad: /watchdog

Übersicht

Echtzeit-System-Health-Monitoring mit Alerts und Check-Historie. Auto-Refresh alle 30 Sekunden.

System-Checks

Check-ID Name Kategorie
S2 RPC Provider On-Chain
C1 Settlement Status On-Chain
C4 Relayer ETH On-Chain
C5 VRF Seed On-Chain
D5 DB Connection Database
D1 Stuck Intents Database
D4 Settlement Pipeline Database
D6 Stats Freshness Database
S1 App Health Service

Watchdog-Queries

-- Letzte 20 Runs
SELECT id, started_at, finished_at, checks_total,
       checks_ok, checks_warn, checks_fail, duration_ms
FROM watchdog_runs
ORDER BY started_at DESC
LIMIT 20

-- Offene Alerts
SELECT id, check_id, level, message, details, alerted_at, notified
FROM watchdog_alerts
WHERE resolved_at IS NULL
ORDER BY alerted_at DESC

-- Letzte 50 Alerts
SELECT id, check_id, level, message, alerted_at, resolved_at, notified
FROM watchdog_alerts
ORDER BY alerted_at DESC
LIMIT 50

Status-Level

Level Farbe Hex
CRITICAL Rot #ef4444
HIGH Amber #f59e0b
MEDIUM Blau #3b82f6
LOW/INFO Grau #6b7280
OK Grün #22c55e

Aufbau

┌──────────────────────────────────────────────┐
│ Status-Karten                                 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐         │
│ │ Overall │ │Last Run │ │  Open   │         │
│ │ HEALTHY │ │ 30s ago │ │ Alerts:2│         │
│ └─────────┘ └─────────┘ └─────────┘         │
├──────────────────────────────────────────────┤
│ System Checks Grid                            │
│ [S2 ✅] [C1 ✅] [C4 ⚠️] [C5 ✅] [D5 ✅]     │
│ [D1 ✅] [D4 ✅] [D6 ✅] [S1 ✅]              │
├──────────────────────────────────────────────┤
│ Open Alerts                                   │
│ Check | Level | Message | Since               │
├──────────────────────────────────────────────┤
│ Recent Alerts                                 │
│ Check | Level | Message | Alerted | Resolved  │
├──────────────────────────────────────────────┤
│ Run History                                   │
│ ID | Started | Duration | OK | Warn | Fail    │
└──────────────────────────────────────────────┘

Workers & Cron-Jobs

Seite: app/workers/page.tsx (389 Zeilen) API: app/api/workers/route.ts (130 Zeilen) Pfad: /workers

Übersicht

Monitor für Cron-Jobs, RPC-Verbindungen und Maintenance-Mode. RPC-Status Auto-Refresh alle 15 Sekunden.

Registrierte Worker

Worker Schedule Beschreibung Log-Pfad
updatePotSizes */15 * * * * Pot-Größen von On-Chain aktualisieren /var/log/update-pot-sizes.log
cron-settle 0 0 * * * Täglicher Settlement-Prozessor bo-engine/logs/settlement/
awardAffiliateBonus (12:00) 0 12 * * * Affiliate-Bonus Mittag /var/log/affiliate-bonus.log
awardAffiliateBonus (00:30) 30 0 * * * Affiliate-Bonus nach Settlement /var/log/affiliate-bonus.log
awardLeaderboardBonus 0 1 1 * * Monatlicher Leaderboard-Bonus /var/log/leaderboard-bonus.log

Worker-Status-Erkennung

  • Log-Dateien: Letzte 30 Zeilen für Vorschau, 100 für Detailansicht
  • Settlement-Logs: Verzeichnis-Scan für neueste settle-*.log
  • Health-Indikatoren:
  • Grün: Letzte Änderung < 24h
  • Amber: Letzte Änderung > 24h
  • Rot: Nie ausgeführt

Maintenance-Mode

-- Status abfragen
SELECT stat_value FROM chain_stats WHERE stat_key = 'maintenance_mode'

-- Umschalten
UPDATE chain_stats SET stat_value = $1, updated_at = NOW()
WHERE stat_key = 'maintenance_mode'
  • Werte: 1 = aktiv (Käufe blockiert), 0 = inaktiv
  • Toggle mit Bestätigungsdialog auf der Workers-Seite

RPC-Verbindungen

  • Monitoring via host und ss Shell-Befehle
  • Anzeige aktiver Verbindungen zum RPC-Provider

Seeds / VRF-Monitor

Seite: app/seeds/page.tsx (294 Zeilen) API: app/api/seeds/route.ts (112 Zeilen) Pfad: /seeds

Übersicht

Monitor für VRF- und Drand-Seed-Status, Ticket-Counter und Seed-Update-Historie. Auto-Refresh alle 30 Sekunden.

On-Chain-Abfragen

GameManager-Contract:

Funktion Rückgabe Beschreibung
vrfSeed() uint256 Aktueller VRF-Seed
drandSeed() uint256 Aktueller Drand-Seed
vrfTicketCounter() uint256 Ticket-Zähler seit letztem Seed
vrfTicketSoftThreshold() uint256 Schwellwert für Seed-Rotation

VRFReceiver-Contract:

Funktion Rückgabe Beschreibung
lastVrfSeed() uint256 Letzter empfangener VRF-Seed
fulfilledTimestamp() uint256 Zeitpunkt der Chainlink-Lieferung

Seed-Update-Historie

SELECT id, seed_type, seed_value, trigger_info, tx_hash, created_at
FROM seed_updates
ORDER BY created_at DESC
LIMIT 20

Seed-Alter-Indikatoren

Alter Farbe Bedeutung
< 30 Min Grün Aktuell
30-90 Min Amber Warnung
≥ 90 Min Rot Veraltet

Worker-Status

  • Prüfung ob refreshSeeds-Daemon läuft (PID-Check)
  • TX-Links zum Explorer (Arbiscan)

Test Players

Seite: app/testplayers/page.tsx (133 Zeilen) API: app/api/testplayers/route.ts (57 Zeilen) Pfad: /testplayers

Übersicht

Monitor für den Test-Player Bulk-Buy-Cron-Job (stündlich 02:00-22:00 UTC, 1 Ticket pro Spieler pro Lauf).

Log-Dateien

Log Pfad Inhalt
Balance Alerts bo-engine/logs/bulk-buy/alerts.log Balance-Warnungen
Run Log bo-engine/logs/bulk-buy/bulk-buy-*.log Tägliche Ausführungslogs

Aufbau

  • Zwei Tabs: "Balance Alerts" und "Run Log (today)"
  • Scrollbare Log-Anzeige (500px max. Höhe)
  • Letzte Änderungszeitstempel
  • Refresh-Button pro Tab