diff --git a/AppImage/ProxMenux-1.2.1.1-beta.AppImage b/AppImage/ProxMenux-1.2.1.1-beta.AppImage index 39cafa30..7d65f661 100755 Binary files a/AppImage/ProxMenux-1.2.1.1-beta.AppImage and b/AppImage/ProxMenux-1.2.1.1-beta.AppImage differ diff --git a/AppImage/ProxMenux-1.2.1.1-beta.AppImage.sha256 b/AppImage/ProxMenux-1.2.1.1-beta.AppImage.sha256 index 85811672..4b46045b 100644 --- a/AppImage/ProxMenux-1.2.1.1-beta.AppImage.sha256 +++ b/AppImage/ProxMenux-1.2.1.1-beta.AppImage.sha256 @@ -1 +1 @@ -250799bdf2b84c89b2db1a7ae7cfe2f16239169157c7d9d14371887c37f0fb03 /tmp/ProxMenux-1.2.1.1-beta.AppImage +78dee82f335a54bd82a22f778de7e5391272b91c28bc7cfd1bffcd9091c62395 /tmp/ProxMenux-1.2.1.1-beta.AppImage diff --git a/AppImage/scripts/flask_server.py b/AppImage/scripts/flask_server.py index 8e2c5b69..8a134c67 100644 --- a/AppImage/scripts/flask_server.py +++ b/AppImage/scripts/flask_server.py @@ -1204,23 +1204,37 @@ def _health_collector_loop(): severity = max_sev try: - notification_manager.send_notification( + # Use emit_event (not send_notification) so the + # 24h fingerprint cooldown applies. send_notification + # was bypassing the cooldown — every 5-min run of + # this loop fired a fresh notification, producing a + # cascade like "PVE storage ≥85%" every 6-10 min for + # the same condition. The fingerprint includes the + # set of degraded categories, so a *different* + # category degrading later still notifies. + cat_signature = ','.join(sorted( + d.get('cat_key', d.get('category', '').lower()) + for d in degraded + )) + notification_manager.emit_event( event_type='health_degraded', severity=severity, - title=title, - message=body, data={ 'hostname': hostname, 'count': str(len(degraded)), - '_journal_context': journal_context, # For AI enrichment + 'title': title, + 'reason': body, + '_journal_context': journal_context, }, source='health_monitor', + entity='node', + entity_id=f'health_{cat_signature}', ) except Exception as e: print(f"[ProxMenux] Health notification error: {e}") except Exception as e: print(f"[ProxMenux] Health collector error: {e}") - + time.sleep(300) # Every 5 minutes