From 2b22c13af4ce7c5b7d9232bb21bf1802bf3c6ffe Mon Sep 17 00:00:00 2001 From: gru Date: Wed, 18 Jun 2025 23:09:50 +0200 Subject: [PATCH] Update tvheadend_advenced.py --- tvheadend_advenced.py | 61 +++++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 29 deletions(-) diff --git a/tvheadend_advenced.py b/tvheadend_advenced.py index 46e450c..74cc2dd 100644 --- a/tvheadend_advenced.py +++ b/tvheadend_advenced.py @@ -16,7 +16,6 @@ def get_input_status(host, port, user, password, input_uuid, timeout): except Exception as e: print(f"CRITICAL - API returned invalid JSON: {e} | Response: {r.text}") sys.exit(2) - # Obsługa odpowiedzi jako dict z kluczem 'entries' if isinstance(data, dict) and "entries" in data: entries = data["entries"] elif isinstance(data, list): @@ -33,26 +32,7 @@ def get_input_status(host, port, user, password, input_uuid, timeout): print(f"CRITICAL - API error: {e}") sys.exit(2) -def main(): - parser = argparse.ArgumentParser(description="Nagios plugin for TVHeadend DVB-T advanced monitoring (Digest Auth)") - parser.add_argument("--host", required=True) - parser.add_argument("--port", type=int, default=9981) - parser.add_argument("--user", required=True) - parser.add_argument("--password", required=True) - parser.add_argument("--input_uuid", required=True, help="UUID tunera lub muxa (sprawdź przez API TVHeadend)") - parser.add_argument("--timeout", type=int, default=10) - parser.add_argument("--warning_ber", type=float, default=1e-5) - parser.add_argument("--critical_ber", type=float, default=1e-4) - parser.add_argument("--warning_unc", type=int, default=10) - parser.add_argument("--critical_unc", type=int, default=100) - args = parser.parse_args() - - status = get_input_status(args.host, args.port, args.user, args.password, args.input_uuid, args.timeout) - if not status: - print("CRITICAL - Input (tuner/mux) not found or API error") - sys.exit(2) - - # Pobieranie parametrów +def interpret_status(status, args): signal = status.get("signal") snr = status.get("snr") ber = status.get("ber") @@ -62,7 +42,6 @@ def main(): unc = status.get("unc") cc = status.get("cc") - # Ustalanie statusu exit_code = 0 messages = [] @@ -84,8 +63,6 @@ def main(): messages.append(f"WARNING UNC={unc}") else: messages.append(f"OK UNC={unc}") - - # Dodaj inne parametry do komunikatu messages.append(f"Signal={signal}") messages.append(f"SNR={snr}") if mer is not None: @@ -96,11 +73,37 @@ def main(): messages.append(f"EC_BLOCK={ec_block}") if cc is not None: messages.append(f"CC={cc}") + return exit_code, messages - # Komunikat końcowy - status_text = ["OK", "WARNING", "CRITICAL"][exit_code] - print(f"{status_text} - " + " | ".join(messages)) - sys.exit(exit_code) +def main(): + parser = argparse.ArgumentParser(description="Nagios plugin for TVHeadend DVB-T advanced monitoring (Digest Auth, multi-card, optional second card)") + parser.add_argument("--host", required=True) + parser.add_argument("--port", type=int, default=9981) + parser.add_argument("--user", required=True) + parser.add_argument("--password", required=True) + parser.add_argument("--input_uuid1", required=True, help="UUID tunera/muxa 1") + parser.add_argument("--input_uuid2", required=False, help="UUID tunera/muxa 2 (opcjonalnie)") + parser.add_argument("--timeout", type=int, default=10) + parser.add_argument("--warning_ber", type=float, default=1e-5) + parser.add_argument("--critical_ber", type=float, default=1e-4) + parser.add_argument("--warning_unc", type=int, default=10) + parser.add_argument("--critical_unc", type=int, default=100) + args = parser.parse_args() + + status1 = get_input_status(args.host, args.port, args.user, args.password, args.input_uuid1, args.timeout) + code1, msg1 = interpret_status(status1, args) + + if args.input_uuid2: + status2 = get_input_status(args.host, args.port, args.user, args.password, args.input_uuid2, args.timeout) + code2, msg2 = interpret_status(status2, args) + final_code = max(code1, code2) + status_text = ["OK", "WARNING", "CRITICAL"][final_code] + print(f"{status_text} - Karta1: {' | '.join(msg1)} || Karta2: {' | '.join(msg2)}") + sys.exit(final_code) + else: + status_text = ["OK", "WARNING", "CRITICAL"][code1] + print(f"{status_text} - Karta1: {' | '.join(msg1)}") + sys.exit(code1) if __name__ == "__main__": - main() \ No newline at end of file + main()