From 68c538447395a3805ee51e6d3f6494e27df4616e Mon Sep 17 00:00:00 2001 From: Evan Cordell Date: Fri, 30 Sep 2016 12:56:53 -0400 Subject: [PATCH] Fixes prometheus start metric --- buildman/manager/ephemeral.py | 5 +++-- test/test_metricqueue.py | 16 ++++++++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/buildman/manager/ephemeral.py b/buildman/manager/ephemeral.py index 0343d0126..3c3ebe033 100644 --- a/buildman/manager/ephemeral.py +++ b/buildman/manager/ephemeral.py @@ -542,8 +542,9 @@ class EphemeralBuilderManager(BaseManager): try: # log start time to prometheus realm_data = yield From(self._etcd_client.read(self._etcd_realm_key(build_component.builder_realm))) - start_time = json.loads(realm_data.value)['start_time'] - metric_queue.builder_time_to_build(time.time() - start_time, labelvalues=[realm_data.executor_name]) + parsed_realm_data = json.loads(realm_data.value) + start_time = parsed_realm_data['start_time'] + metric_queue.builder_time_to_build(time.time() - start_time, labelvalues=[parsed_realm_data.get('executor_name', 'unknown')]) except (KeyError, etcd.EtcdKeyError): logger.warning('Could not read realm key %s', build_component.builder_realm) diff --git a/test/test_metricqueue.py b/test/test_metricqueue.py index 3135e2d34..0a8247fb4 100644 --- a/test/test_metricqueue.py +++ b/test/test_metricqueue.py @@ -2,7 +2,7 @@ import time import unittest from mock import Mock -from trollius import coroutine, Return, get_event_loop +from trollius import coroutine, Return, get_event_loop, From from util.metrics.metricqueue import duration_collector_async @@ -25,6 +25,10 @@ def duration_decorated(): def duration_decorated_error(): raise NonReturn("not a Return error") +@coroutine +def calls_decorated(): + yield From(duration_decorated()) + class DurationDecoratorTestCase(unittest.TestCase): def __init__(self, *args, **kwargs): @@ -44,7 +48,15 @@ class DurationDecoratorTestCase(unittest.TestCase): with self.assertRaises(NonReturn): self.loop.run_until_complete(duration_decorated_error()) assert not mock_histogram.Observe.called - + + def test_duration_decorator_caller(self): + mock_histogram.reset_mock() + + self.loop.run_until_complete(calls_decorated()) + assert mock_histogram.Observe.called + assert 1 - mock_histogram.Observe.call_args[0][0] < 1 # duration should be close to 1s + assert mock_histogram.Observe.call_args[1]["labelvalues"] == ["testlabel"] + if __name__ == '__main__': unittest.main()