Skip to content
Snippets Groups Projects
Commit 04bcf884 authored by Karel van Klink's avatar Karel van Klink :smiley_cat: Committed by Neda Moeini
Browse files

Re-use session in LibreNMS client

parent 0e348068
No related branches found
No related tags found
1 merge request!253LibreNMS retries
...@@ -3,10 +3,10 @@ ...@@ -3,10 +3,10 @@
import logging import logging
from http import HTTPStatus from http import HTTPStatus
from importlib import metadata from importlib import metadata
from typing import Any from typing import Any, Literal
import requests import requests
from requests import HTTPError from requests import HTTPError, Response
from gso.settings import load_oss_params from gso.settings import load_oss_params
from gso.utils.helpers import SNMPVersion from gso.utils.helpers import SNMPVersion
...@@ -25,12 +25,23 @@ class LibreNMSClient: ...@@ -25,12 +25,23 @@ class LibreNMSClient:
self.base_url = config.LIBRENMS.base_url self.base_url = config.LIBRENMS.base_url
self.snmp_config = config.SNMP self.snmp_config = config.SNMP
self.headers = { self.session = requests.Session()
self.session.headers.update({
"User-Agent": f"geant-service-orchestrator/{metadata.version("geant-service-orchestrator")}", "User-Agent": f"geant-service-orchestrator/{metadata.version("geant-service-orchestrator")}",
"Accept": "application/json", "Accept": "application/json",
"Content-Type": "application/json", "Content-Type": "application/json",
"X-Auth-Token": token, "X-Auth-Token": token,
} })
def _send_request(
self, method: Literal["GET", "POST", "PUT", "DELETE"], endpoint: str, data: dict[str, Any] | None = None
) -> Response:
url = self.base_url + endpoint
logger.debug("LibreNMS - Sending request", extra={"method": method, "endpoint": url, "form_data": data})
result = self.session.request(method, url, json=data)
logger.debug("LibreNMS - Received response", extra=result.__dict__)
return result
def get_device(self, fqdn: str) -> dict[str, Any]: def get_device(self, fqdn: str) -> dict[str, Any]:
"""Get an existing device from LibreNMS. """Get an existing device from LibreNMS.
...@@ -39,7 +50,7 @@ class LibreNMSClient: ...@@ -39,7 +50,7 @@ class LibreNMSClient:
:return dict[str, Any]: A :term:`JSON` formatted list of devices that match the queried :term:`FQDN`. :return dict[str, Any]: A :term:`JSON` formatted list of devices that match the queried :term:`FQDN`.
:raises HTTPError: Raises an HTTP error 404 when the device is not found :raises HTTPError: Raises an HTTP error 404 when the device is not found
""" """
response = requests.get(f"{self.base_url}/devices/{fqdn}", headers=self.headers, timeout=(0.5, 75)) response = self._send_request("GET", f"/devices/{fqdn}")
response.raise_for_status() response.raise_for_status()
return response.json() return response.json()
...@@ -74,7 +85,7 @@ class LibreNMSClient: ...@@ -74,7 +85,7 @@ class LibreNMSClient:
} }
device_data.update(getattr(self.snmp_config, snmp_version)) device_data.update(getattr(self.snmp_config, snmp_version))
device = requests.post(f"{self.base_url}/devices", headers=self.headers, json=device_data, timeout=(0.5, 75)) device = self._send_request("POST", "/devices", device_data)
device.raise_for_status() device.raise_for_status()
return device.json() return device.json()
...@@ -86,7 +97,7 @@ class LibreNMSClient: ...@@ -86,7 +97,7 @@ class LibreNMSClient:
:return dict[str, Any]: A JSON representation of the device that got removed. :return dict[str, Any]: A JSON representation of the device that got removed.
:raises HTTPError: Raises an exception if the request did not succeed. :raises HTTPError: Raises an exception if the request did not succeed.
""" """
device = requests.delete(f"{self.base_url}/devices/{fqdn}", headers=self.headers, timeout=(0.5, 75)) device = self._send_request("DELETE", f"/devices/{fqdn}")
device.raise_for_status() device.raise_for_status()
return device.json() return device.json()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment