From ec709fdd8c6791476ee6891748d1aa48b658d0de Mon Sep 17 00:00:00 2001 From: Abhishek Sharma Date: Tue, 25 Sep 2018 11:20:11 +0530 Subject: [PATCH] Added 99th percentile --- Dockerfile | 7 +++++++ locust_exporter.py | 25 +++++++++++++++---------- requirements.txt | 2 ++ 3 files changed, 24 insertions(+), 10 deletions(-) create mode 100644 Dockerfile create mode 100644 requirements.txt diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f4996c6 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,7 @@ +FROM python:2.7.14-alpine + +WORKDIR /usr/src/app +COPY requirements.txt ./ +RUN pip install --no-cache-dir -r requirements.txt +COPY . . +CMD ["python", "./locust_exporter.py"] diff --git a/locust_exporter.py b/locust_exporter.py index c88849d..a1abb53 100755 --- a/locust_exporter.py +++ b/locust_exporter.py @@ -7,6 +7,7 @@ import requests import sys import time +import os class LocustCollector(object): def __init__(self, ep): @@ -18,7 +19,7 @@ def collect(self): try: response = requests.get(url).content.decode('Utf-8') except requests.exceptions.ConnectionError: - print("Failed to connect to Locust:", url) + print "Failed to connect to Locust:", url exit(2) response = json.loads(response) @@ -29,9 +30,17 @@ def collect(self): metric.add_sample('locust_user_count', value=response['user_count'], labels={}) yield metric + metric = Metric('locust_response_time_95', 'Response Time 95th Percentile', 'gauge') + metric.add_sample('locust_response_time_95', value=response["current_response_time_percentile_95"], labels={}) + yield metric + if 'current_response_time_percentile_99' in response: + metric = Metric('locust_response_time_99', 'Response Time 99th Percentile', 'gauge') + metric.add_sample('locust_response_time_99', value=response["current_response_time_percentile_99"], labels={}) + yield metric + metric = Metric('locust_errors', 'Locust requests errors', 'gauge') for err in response['errors']: - metric.add_sample('locust_errors', value=err['occurences'], labels={'path':err['name'], 'method':err['method']}) + metric.add_sample('locust_errors', value=err['occurences'], labels={'path':err['name'], 'method':err['method'], 'error': err['error']}) yield metric if 'slave_count' in response: @@ -59,14 +68,10 @@ def collect(self): if __name__ == '__main__': # Usage: locust_exporter.py - if len(sys.argv) != 3: - print('Usage: locust_exporter.py ') - exit(1) - else: try: - start_http_server(int(sys.argv[1])) - REGISTRY.register(LocustCollector(str(sys.argv[2]))) - print("Connecting to locust on: " + sys.argv[2]) - while True: time.sleep(1) + start_http_server(int(os.environ.get('LISTENER_PORT', 8080))) + REGISTRY.register(LocustCollector(os.environ['LOCUST'])) + print "Connecting to locust on: " + os.environ['LOCUST'] + while True: time.sleep(1000) except KeyboardInterrupt: exit(0) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..b1033a1 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +prometheus_client +requests