Skip to content

Commit 5f54d69

Browse files
committed
update to use async
Signed-off-by: Zen <[email protected]>
1 parent 039a5a7 commit 5f54d69

File tree

2 files changed

+21
-17
lines changed

2 files changed

+21
-17
lines changed

src/json_exporter/json_endpoint.py

+13-12
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,13 @@ def populate_metrics(self):
4949
**metric_args, **values,
5050
_log_init=False, logger=self.logger))
5151

52-
def get_data(self, label_filter={}):
52+
async def get_data(self, label_filter={}):
5353
"""
5454
Gets the data from the endpoint.
5555
Updates the JSON labels.
5656
Populates the metrics using the new labels and data.
5757
"""
58-
from requests import get, post
58+
from aiohttp import ClientSession
5959
from json import loads
6060
from json.decoder import JSONDecodeError
6161
from time import time
@@ -71,20 +71,21 @@ def get_data(self, label_filter={}):
7171
kwargs['headers'] = self.headers
7272

7373
start_time = time()
74-
if self.post_data:
75-
self.logger.debug("POST data: %s", self.post_data)
76-
request = post(self.endpoint, json=self.post_data, **kwargs)
77-
else:
78-
request = get(self.endpoint, **kwargs)
74+
async with ClientSession() as session:
75+
if self.post_data:
76+
async with session.post(self.endpoint, json=self.post_data, **kwargs) as request:
77+
self.logger.debug("POST data: %s", self.post_data)
78+
request_data = await request.text()
79+
else:
80+
async with session.get(self.endpoint, **kwargs) as request:
81+
request_data = await request.text()
7982
self._request_time = time() - start_time
80-
self.logger.debug("Request time: %s", self._request_time)
83+
self.logger.info("[%s] Request time: %s" % (self.endpoint, self._request_time))
8184

82-
if request.status_code != 200:
83-
raise ValueError("[%s] Request failed: %s" % (request.status_code, request.text))
84-
self.logger.debug("Got data: %s", request.text)
85+
self.logger.debug("Got data: %s", request_data)
8586

8687
try:
87-
self.data = loads(request.text)
88+
self.data = loads(request_data)
8889
except JSONDecodeError as error:
8990
raise ValueError("Failed to decode JSON: %s" % error)
9091

src/json_exporter/json_exporter.py

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from prometheus_exporter import Exporter, cached_exporter
2+
from asyncio import TaskGroup
23

34

45
@cached_exporter
@@ -27,11 +28,13 @@ def get_labels(self):
2728
labels |= endpoint.labels
2829
return labels
2930

30-
def get_metrics(self, label_filter={}):
31+
async def get_metrics(self, label_filter={}):
3132
""" Get metrics list from each endpoint, add them together """
3233
metric_list = []
34+
async with TaskGroup() as tg:
35+
for endpoint in self.endpoints:
36+
self.logger.debug("Creating data task for: %s", endpoint.name)
37+
tg.create_task(endpoint.get_data(label_filter=label_filter))
3338
for endpoint in self.endpoints:
34-
self.logger.debug("Getting metrics from endpoint: %s", endpoint.name)
35-
endpoint.get_data(label_filter=label_filter)
36-
metric_list.extend(endpoint.metrics)
37-
return metric_list + super().get_metrics(label_filter=label_filter)
39+
metric_list += endpoint.metrics
40+
return metric_list + await super().get_metrics(label_filter=label_filter)

0 commit comments

Comments
 (0)