Todo

  • Class diagram
  • Functionality Examples

Prometheus Request Class

We have a Prometheus request class that handles requests to the Prometheus API. This class is used to download cpu_seconds data for a given time period.

import requests

class PrometheusAPIClient:
    def __init__(self, prometheus_url = "https://host-172-16-100-248.nubes.stfc.ac.uk/", api_endpoint = "api/v1/query_range", timeout=120):
        if not prometheus_url.endswith("/"):
            prometheus_url = prometheus_url + "/"
        
        if api_endpoint.startswith("/"):
            api_endpoint = api_endpoint[1:]

        self.base_url = prometheus_url
        self.api_endpoint = api_endpoint
        self.url = self.base_url + self.api_endpoint
        self.timeout = timeout

    def query(self, parameters):
        try:
            # Make the request
            response = requests.get(self.url, params=parameters, timeout=self.timeout)

            print("URL:", response.url)
            print("Status:", response.status_code, response.reason)
            response.raise_for_status()  # raises on 4xx/5xx
            print("OK → proceeding to parse JSON")
            data = response.json()
            print("Prometheus status:", data.get("status"))
            return data

        except requests.exceptions.ReadTimeout:
            print(f"Request timed out for entry at {parameters.get("start")}. Skipping.")

            return None
        except requests.HTTPError as e:
            try:
                print("Error body:", response.text)
            except Exception:
                pass
        except Exception:
            pass
            print(f"HTTPError for entry at {parameters.get("start")}. Skipping.")
            return None
        except requests.exceptions.RequestException as e:
            print(f"RequestException for entry at {parameters.get("start")}. Skipping.")
            return None
        return None