CHECKMK script
Some checks failed
docker / docker_dev (push) Waiting to run
🤖Automation - Update Sponsors Table / update-table (push) Has been cancelled

This commit is contained in:
jokob-sk
2025-01-08 23:32:14 +11:00
parent 8d9c48166b
commit b29dcbfa98
7 changed files with 118 additions and 5 deletions

24
scripts/checkmk/README.md Executable file
View File

@@ -0,0 +1,24 @@
# NetAlertX-New-Devices-Checkmk-Script
This script retrieves the list of all devices from NetAlertX by reading the `/app/api/table_devices.json` file within the "NetAlertX" Docker container. It then checks if there are any new devices (`devIsNew == 1`).
- If new devices are found, a warning state is reported.
- Otherwise, an OK state is returned.
## Checkmk Local Check Format
The script follows the Checkmk local check format:
```
<status> <service_name> <perfdata> <message>
```
For more details, see the [Checkmk Local Checks Documentation](https://docs.checkmk.com/latest/en/localchecks.html).
### Other info
- Date : 08-Jan-2025 - version 1.0
- Author: N/A
> [!NOTE]
> This is a community supplied script and not maintained.

74
scripts/checkmk/script.py Executable file
View File

@@ -0,0 +1,74 @@
YABin
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
NetAlertX-New-Devices-Checkmk-Script
Dieses Skript ruft die Liste aller Devices aus NetAlertX ab, indem es innerhalb
des Docker-Containers "NetAlertX" die Datei /app/api/table_devices.json ausliest.
Anschließend wird geprüft, ob neue Geräte vorhanden sind (devIsNew == 1).
Falls ja, wird ein Warning-Zustand gemeldet, sonst OK.
Checkmk-Local-Check-Format:
<status> <service_name> <perfdata> <message>
Siehe: https://docs.checkmk.com/latest/de/localchecks.html
"""
import subprocess
import json
def check_new_devices():
try:
# Rufe die JSON-Datei aus dem Docker-Container ab
result = subprocess.run(
['docker', 'exec', 'NetAlertX', 'cat', '/app/api/table_devices.json'],
capture_output=True,
text=True,
check=True
)
data_str = result.stdout
except subprocess.CalledProcessError as e:
# Wenn der Docker-Command fehlschlägt -> UNKNOWN (3)
print(f"3 NetAlertX_New_Devices - UNKNOWN - Docker command failed: {e}")
return
except Exception as e:
# Allgemeiner Fehler -> UNKNOWN
print(f"3 NetAlertX_New_Devices - UNKNOWN - Error while running docker command: {e}")
return
# JSON-Daten laden
try:
data = json.loads(data_str)
except json.JSONDecodeError as e:
# Wenn das JSON nicht gelesen werden kann -> UNKNOWN
print(f"3 NetAlertX_New_Devices - UNKNOWN - JSON decode error: {e}")
return
# Prüfen, ob das 'data'-Attribut vorhanden ist
if "data" not in data:
print("3 NetAlertX_New_Devices - UNKNOWN - Unexpected JSON format (no 'data' key).")
return
new_devices = []
for device in data["data"]:
# Prüfen, ob das Attribut 'devIsNew' existiert und == 1 ist
if "devIsNew" in device and device["devIsNew"] == 1:
new_devices.append(device)
# Wenn keine neuen Geräte gefunden
if len(new_devices) == 0:
# Status 0 = OK
print("0 NetAlertX_New_Devices - OK - No new devices found")
else:
# Status 1 = WARNING
device_list_str = ", ".join(
f"{dev.get('devName', 'UnknownName')}({dev.get('devMac', 'UnknownMAC')}) IP:{dev.get('devLastIP', 'UnknownIP')}"
for dev in new_devices
)
print(f"1 NetAlertX_New_Devices - WARNING - Found {len(new_devices)} new device(s): {device_list_str}")
if __name__ == "__main__":
check_new_devices()

View File

@@ -35,4 +35,8 @@ For each MAC or IP address provided, the script:
### Other info
- Date : 23-Dec-2024 - version 1.0
- Author: [laxduke](https://github.com/laxduke)
- Author: [laxduke](https://github.com/laxduke)
> [!NOTE]
> This is a community supplied script and not maintained.