From c8d88a537d3afdc10618e92ea63dc353a3250058 Mon Sep 17 00:00:00 2001 From: nico Date: Fri, 6 Mar 2020 12:43:15 +0100 Subject: [PATCH] better session handeling * improved session handeling Due to the with statement in the session creation process, every requests to the api created a new session. This patch decreases the enormous TCP overhead, by creating a single global session to reuse. --- ejabberdrpc.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/ejabberdrpc.py b/ejabberdrpc.py index e89c14a..7de19e6 100755 --- a/ejabberdrpc.py +++ b/ejabberdrpc.py @@ -20,7 +20,10 @@ class EjabberdMetrics: self.url = url self._cmd = self._rpc else: + import requests + self._url = url + self.session = requests.Session() self._cmd = self._rest @property @@ -43,15 +46,19 @@ class EjabberdMetrics: return None - def _rest(self, command: str, data): - import requests + def _rest(self, command: str, data) -> dict: + # add authentication header to the session obj + if self.session.auth is None: + self.session.auth = self._auth - with requests.Session() as s: - r = s.post(f'{self._url}/{command}', auth=self._auth, json=data) + # post + r = self.session.post('/'.join([self._url, command]), json=data) - if r.status_code == 200: - return r.json() - return{} + # proceed if response is ok + if r.ok: + return r.json() + + return {} def _rpc(self, command: str, data): from xmlrpc import client