From 0bcc98f9a52783993a74f5fcbaaaa274300e45ad Mon Sep 17 00:00:00 2001 From: Bjarke Madsen <bjarke@nordu.net> Date: Wed, 29 Mar 2023 18:07:38 +0200 Subject: [PATCH] use requests.Session to reuse TCP connections for Grafana API requests --- .../grafana/utils/request.py | 41 ++++++++----------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/brian_dashboard_manager/grafana/utils/request.py b/brian_dashboard_manager/grafana/utils/request.py index d1c5452..dfe7051 100644 --- a/brian_dashboard_manager/grafana/utils/request.py +++ b/brian_dashboard_manager/grafana/utils/request.py @@ -1,39 +1,34 @@ import requests import logging -from requests.models import HTTPError +from requests.adapters import HTTPAdapter logger = logging.getLogger(__name__) -class Request(object): +class Request(requests.Session): def __init__(self, url, headers=None): - self.headers = { + super().__init__() + + # allow using up to 16 connections + adapter = HTTPAdapter(pool_maxsize=16) + self.mount(url, adapter) + + self.headers.update({ 'Accept': 'application/json' - } + }) if headers: self.headers.update(headers) self.BASE_URL = url - def do_request(self, method, endpoint, *args, **kwargs): - r = requests.request(method, self.BASE_URL + endpoint, - *args, - **kwargs, - headers={ - **kwargs.get('headers', {}), - **self.headers - }) - - try: - r.raise_for_status() - except HTTPError as e: - if e.response.status_code < 500: - logger.error(e.response.content.decode('utf-8')) - raise e - return r.json() - - def get(self, endpoint: str, *args, **kwargs): - return self.do_request('get', endpoint, *args, **kwargs) + def do_request(self, method, endpoint, **kwargs) -> requests.Response: + r = self.request(method, self.BASE_URL + endpoint, **kwargs) + + r.raise_for_status() + return r + + def get(self, endpoint: str, **kwargs): + return self.do_request('get', endpoint, **kwargs) def post(self, endpoint: str, data=None, **kwargs): return self.do_request('post', endpoint, data=data, **kwargs) -- GitLab