Abfrage der monatlichen Verfügbarkeit von einzelnen Hosts

Hallo,

ich möchte von Hosts idealerweise je Monat eine Zusammenfassung der Verfügbarkeit prüfen.

Ich habe einen Benutzer erstellt “Reporting” und Automation ausgewählt.

Der generierte Link im Pyhtonscript schaut wie folgt aus:

check_mk/view.py?view_name=hostgroupservices&mode=availability&output_format=csv_export&opthost_group=Top10&service_regex=Service+Summary&avo_rangespec_sel=8&avo_rangespec_17_0_day=19&avo_rangespec_17_0_month=7&avo_rangespec_17_0_year=2022&avo_rangespec_17_1_day=20&avo_rangespec_17_1_month=7&avo_rangespec_17_1_year=2022&apply=Apply

Es wird mir aber ein ein leeres Array zurückgeliefert.

Ändere ich den Benutzer auf Login mit Benutzername und Passwort, logge mich anschließend via check_mk ein und füge den aufgeführten Link ein, dann wird die gefüllte CSV heruntergeladen und enthält auch die erwarteten Daten.

Hat jemand evtl. eine Idee, an welchem Punkt meines Scripts etwas fehlerhaft ist?

Firewall blockt nichts, das Script wird auch im gleichen Netzwerk ausgeführt.

import os

import csv

import requests

import urllib3




from io import StringIO

from pathlib import Path

from dotenv import load_dotenv





urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)




PROJECT_PATH = Path(__file__).resolve().parents[1]

load_dotenv(PROJECT_PATH / ".env")




CHECKMK_BASE_URL = os.getenv("CHECKMK_BASE_URL")

CHECKMK_SITE = os.getenv("CHECKMK_SITE")

CHECKMK_USER = os.getenv("CHECKMK_USER")

CHECKMK_SECRET = os.getenv("CHECKMK_SECRET")





url = f"{CHECKMK_BASE_URL}/{CHECKMK_SITE}/check_mk/view.py"




params = {

    "view_name": "hostgroupservices",

    "mode": "availability",

    "output_format": "csv_export",

    "opthost_group": "Top10",

    "service_regex": "Service Summary",




    "avo_rangespec_sel": "13",

    "avo_rangespec_17_0_day": "19",

    "avo_rangespec_17_0_month": "7",

    "avo_rangespec_17_0_year": "2022",

    "avo_rangespec_17_1_day": "20",

    "avo_rangespec_17_1_month": "7",

    "avo_rangespec_17_1_year": "2022",




    "apply": "Apply",

}




response = requests.get(

    url,

    params=params,

    auth=(CHECKMK_USER, CHECKMK_SECRET),

    timeout=60,

    verify=False

)




response.raise_for_status()




print("URL:")

print(response.url)

print()




print("STATUS:")

print(response.status_code)

print()






if "form_login" in response.text or "<html" in response.text.lower():

    raise RuntimeError("Checkmk-Login fehlgeschlagen oder HTML statt CSV erhalten.")




reader = csv.reader(StringIO(response.text), delimiter=";")

rows = list(reader)




print("ROWS:")

for row in rows:

    print(row)