Implementiere Multi-Endpoint Support und konfigurierbare Benachrichtigungsregeln (Version 3.0)
This commit is contained in:
183
test_apprise.py
183
test_apprise.py
@ -1,47 +1,93 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Einfacher Test für Apprise Mattermost-Verbindung
|
||||
Erweiterter Test für Apprise-Verbindungen mit mehreren Endpunkten
|
||||
"""
|
||||
|
||||
import os
|
||||
from dotenv import load_dotenv
|
||||
import apprise
|
||||
from datetime import datetime
|
||||
|
||||
# Lade .env Datei
|
||||
load_dotenv()
|
||||
|
||||
def test_mattermost_connection():
|
||||
"""Testet die Mattermost-Verbindung über Apprise"""
|
||||
def get_apprise_urls():
|
||||
"""Holt alle konfigurierten Apprise URLs aus der .env"""
|
||||
urls = {}
|
||||
|
||||
# Hole Apprise URL aus .env
|
||||
apprise_url = os.getenv('APPRISE_URL')
|
||||
# Prüfe alle möglichen URL-Konfigurationen
|
||||
url_keys = [
|
||||
'APPRISE_URL_MATTERMOST',
|
||||
'APPRISE_URL_SLACK',
|
||||
'APPRISE_URL_TELEGRAM',
|
||||
'APPRISE_URL_DISCORD',
|
||||
'APPRISE_URL_EMAIL',
|
||||
'APPRISE_URL_PUSHOVER',
|
||||
'APPRISE_URL_TEAMS'
|
||||
]
|
||||
|
||||
if not apprise_url:
|
||||
print("❌ APPRISE_URL nicht in .env gefunden!")
|
||||
print("Bitte erstelle eine .env Datei mit deiner Apprise URL")
|
||||
for key in url_keys:
|
||||
url = os.getenv(key)
|
||||
if url:
|
||||
service_name = key.replace('APPRISE_URL_', '').lower()
|
||||
urls[service_name] = url
|
||||
|
||||
# Fallback für alte Konfiguration
|
||||
if not urls:
|
||||
legacy_url = os.getenv('APPRISE_URL')
|
||||
if legacy_url:
|
||||
urls['legacy'] = legacy_url
|
||||
|
||||
return urls
|
||||
|
||||
def is_debug_mode():
|
||||
"""Prüft ob Debug-Modus aktiviert ist"""
|
||||
return os.getenv('DEBUG_MODE', 'false').lower() == 'true'
|
||||
|
||||
def test_all_endpoints():
|
||||
"""Testet alle konfigurierten Endpunkte"""
|
||||
|
||||
urls = get_apprise_urls()
|
||||
|
||||
if not urls:
|
||||
print("❌ Keine Apprise URLs konfiguriert!")
|
||||
print("Bitte erstelle eine .env Datei basierend auf env.example")
|
||||
return False
|
||||
|
||||
print(f"🔗 Teste Apprise URL: {apprise_url}")
|
||||
print(f"🔗 Gefundene Endpunkte: {len(urls)}")
|
||||
for service, url in urls.items():
|
||||
print(f" - {service}: {url}")
|
||||
|
||||
print("\n🧪 Teste alle Endpunkte...")
|
||||
|
||||
# Erstelle Apprise Objekt
|
||||
apobj = apprise.Apprise()
|
||||
|
||||
# Füge alle URLs hinzu
|
||||
for service, url in urls.items():
|
||||
apobj.add(url)
|
||||
|
||||
# Sende Test-Nachricht
|
||||
test_message = f"""🧪 **TI-Status Test-Nachricht**
|
||||
|
||||
Dies ist eine Test-Nachricht von der TI-Status2Mattermost App.
|
||||
|
||||
**Konfiguration:**
|
||||
- Endpunkte: {len(urls)}
|
||||
- Services: {', '.join(urls.keys())}
|
||||
- Zeit: {datetime.now().strftime('%d.%m.%Y %H:%M:%S')}
|
||||
|
||||
✅ Apprise-Verbindung funktioniert!"""
|
||||
|
||||
try:
|
||||
# Erstelle Apprise Objekt
|
||||
apobj = apprise.Apprise()
|
||||
|
||||
# Füge die URL hinzu
|
||||
apobj.add(apprise_url)
|
||||
|
||||
# Teste die Verbindung
|
||||
print("📡 Sende Test-Nachricht...")
|
||||
|
||||
# Sende eine Test-Nachricht
|
||||
result = apobj.notify(
|
||||
title="🧪 TI-Status Test",
|
||||
body="Dies ist eine Test-Nachricht von der TI-Status2Mattermost App.\n\n✅ Apprise-Verbindung funktioniert!",
|
||||
title="🧪 TI-Status Multi-Endpoint Test",
|
||||
body=test_message,
|
||||
body_format=apprise.NotifyFormat.MARKDOWN
|
||||
)
|
||||
|
||||
if result:
|
||||
print("✅ Test erfolgreich! Nachricht wurde gesendet.")
|
||||
print("✅ Test erfolgreich! Nachricht wurde an alle Endpunkte gesendet.")
|
||||
return True
|
||||
else:
|
||||
print("❌ Test fehlgeschlagen. Keine Nachricht gesendet.")
|
||||
@ -51,23 +97,78 @@ def test_mattermost_connection():
|
||||
print(f"❌ Fehler beim Test: {e}")
|
||||
return False
|
||||
|
||||
def test_individual_endpoints():
|
||||
"""Testet jeden Endpunkt einzeln"""
|
||||
|
||||
urls = get_apprise_urls()
|
||||
|
||||
if not urls:
|
||||
print("❌ Keine Endpunkte zum Testen verfügbar")
|
||||
return
|
||||
|
||||
print("\n🔍 Teste Endpunkte einzeln...")
|
||||
|
||||
for service, url in urls.items():
|
||||
print(f"\n📡 Teste {service}...")
|
||||
|
||||
try:
|
||||
apobj = apprise.Apprise()
|
||||
apobj.add(url)
|
||||
|
||||
result = apobj.notify(
|
||||
title=f"🧪 {service.title()} Test",
|
||||
body=f"Einzeltest für {service} erfolgreich!\n\nZeit: {datetime.now().strftime('%H:%M:%S')}",
|
||||
body_format=apprise.NotifyFormat.MARKDOWN
|
||||
)
|
||||
|
||||
if result:
|
||||
print(f"✅ {service}: Erfolgreich")
|
||||
else:
|
||||
print(f"❌ {service}: Fehlgeschlagen")
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ {service}: Fehler - {e}")
|
||||
|
||||
def test_configuration():
|
||||
"""Zeigt die aktuelle Konfiguration an"""
|
||||
|
||||
print("📋 Aktuelle Konfiguration:")
|
||||
print("=" * 40)
|
||||
|
||||
# Apprise URLs
|
||||
urls = get_apprise_urls()
|
||||
print(f"🔗 Endpunkte: {len(urls)}")
|
||||
for service, url in urls.items():
|
||||
print(f" - {service}: {url}")
|
||||
|
||||
# Benachrichtigungsregeln
|
||||
print(f"\n📋 Benachrichtigungslevel: {os.getenv('NOTIFICATION_LEVEL', 'all')}")
|
||||
print(f"🔍 Filter: {os.getenv('NOTIFICATION_FILTERS', 'keine')}")
|
||||
print(f"⏰ Benachrichtigungszeiten: {os.getenv('NOTIFICATION_HOURS', '24/7')}")
|
||||
print(f"⏳ Verzögerung: {os.getenv('NOTIFICATION_DELAY', '0')}s")
|
||||
print(f"🔧 Debug-Modus: {os.getenv('DEBUG_MODE', 'false')}")
|
||||
|
||||
def test_without_env():
|
||||
"""Testet mit einer direkten Mattermost URL"""
|
||||
"""Testet mit direkten URLs"""
|
||||
|
||||
print("\n🔧 Alternative: Teste mit direkter URL")
|
||||
print("Beispiel für Mattermost Webhook:")
|
||||
print("mattermost://username:password@mattermost.medisoftware.org/channel?webhook=your_webhook_id")
|
||||
print("\n🔧 Alternative: Teste mit direkten URLs")
|
||||
print("Beispiele:")
|
||||
print("- Mattermost: mattermost://username:password@server/channel?webhook=id")
|
||||
print("- Slack: slack://token_a/token_b/token_c/#channel")
|
||||
print("- Telegram: telegram://bottoken/ChatID")
|
||||
|
||||
# Hier könntest du eine Test-URL direkt eingeben
|
||||
test_url = input("Gib deine Apprise URL ein (oder Enter für Skip): ").strip()
|
||||
test_urls = input("Gib deine Apprise URLs ein (kommagetrennt, oder Enter für Skip): ").strip()
|
||||
|
||||
if not test_url:
|
||||
if not test_urls:
|
||||
print("⏭️ Test übersprungen")
|
||||
return
|
||||
|
||||
urls = [url.strip() for url in test_urls.split(',')]
|
||||
|
||||
try:
|
||||
apobj = apprise.Apprise()
|
||||
apobj.add(test_url)
|
||||
for url in urls:
|
||||
apobj.add(url)
|
||||
|
||||
result = apobj.notify(
|
||||
title="🧪 Direkter Test",
|
||||
@ -84,16 +185,24 @@ def test_without_env():
|
||||
print(f"❌ Fehler beim direkten Test: {e}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("🧪 Apprise Mattermost-Verbindungstest")
|
||||
print("=" * 40)
|
||||
print("🧪 Erweiterter Apprise-Verbindungstest")
|
||||
print("=" * 50)
|
||||
|
||||
# Test mit .env
|
||||
success = test_mattermost_connection()
|
||||
# Zeige Konfiguration
|
||||
test_configuration()
|
||||
|
||||
if not success:
|
||||
# Teste alle Endpunkte zusammen
|
||||
success = test_all_endpoints()
|
||||
|
||||
if success:
|
||||
# Teste Endpunkte einzeln
|
||||
test_individual_endpoints()
|
||||
else:
|
||||
# Fallback: Direkter Test
|
||||
test_without_env()
|
||||
|
||||
print("\n📋 Nächste Schritte:")
|
||||
print("1. Überprüfe deine .env Datei")
|
||||
print("2. Stelle sicher, dass die Mattermost URL korrekt ist")
|
||||
print("3. Teste das Hauptskript: python ti_status_checker.py")
|
||||
print("2. Stelle sicher, dass die URLs korrekt sind")
|
||||
print("3. Teste das Hauptskript: python ti_status_checker.py")
|
||||
print("4. Aktiviere DEBUG_MODE=true für detaillierte Ausgaben")
|
Reference in New Issue
Block a user