From fa319a57860af460add565d7801711ec53ab6799 Mon Sep 17 00:00:00 2001 From: "Paul \"LeoNerd\" Evans" Date: Thu, 5 Mar 2015 15:58:03 +0000 Subject: [PATCH] Add TimerMetrics to shadow the PerformanceCounters in synapse.storage; with the view to eventually replacing them entirely --- synapse/storage/_base.py | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/synapse/storage/_base.py b/synapse/storage/_base.py index 92e90ac57..d8c5a60c7 100644 --- a/synapse/storage/_base.py +++ b/synapse/storage/_base.py @@ -39,6 +39,8 @@ transaction_logger = logging.getLogger("synapse.storage.txn") metrics = synapse.metrics.get_metrics_for("synapse.storage") sql_query_timer = metrics.register_timer("queries", keys=["verb"]) +sql_txn_timer = metrics.register_timer("transactions", keys=["desc"]) +sql_getevents_timer = metrics.register_timer("get_events", keys=["desc"]) # TODO(paul): @@ -184,11 +186,16 @@ class SQLBaseStore(object): self._previous_txn_total_time = 0 self._current_txn_total_time = 0 self._previous_loop_ts = 0 + + # TODO(paul): These can eventually be removed once the metrics code + # is running in mainline, and we have some nice monitoring frontends + # to watch it self._txn_perf_counters = PerformanceCounters() self._get_event_counters = PerformanceCounters() self._get_event_cache = LruCache(hs.config.event_cache_size) - self._get_event_cache_counter = metrics.register_cache("get_event", + self._get_event_cache_counter = metrics.register_cache( + "get_event_cache", size_callback=lambda: len(self._get_event_cache), ) @@ -254,6 +261,8 @@ class SQLBaseStore(object): self._current_txn_total_time += end - start self._txn_perf_counters.update(desc, start, end) + sql_txn_timer.inc_time(self._current_txn_total_time, desc) + with PreserveLoggingContext(): result = yield self._db_pool.runInteraction( inner_func, *args, **kwargs @@ -653,7 +662,11 @@ class SQLBaseStore(object): get_prev_content=False, allow_rejected=False): start_time = time.time() * 1000 - update_counter = self._get_event_counters.update + + def update_counter(desc, last_time): + curr_time = self._get_event_counters.update(desc, last_time) + sql_getevents_timer.inc_time(curr_time - last_time, desc) + return curr_time cache = self._get_event_cache.setdefault(event_id, {}) @@ -704,7 +717,11 @@ class SQLBaseStore(object): check_redacted=True, get_prev_content=False): start_time = time.time() * 1000 - update_counter = self._get_event_counters.update + + def update_counter(desc, last_time): + curr_time = self._get_event_counters.update(desc, last_time) + sql_getevents_timer.inc_time(curr_time - last_time, desc) + return curr_time d = json.loads(js) start_time = update_counter("decode_json", start_time)