From 4131eb40ceb036e38ae4fe3cd205a031e450c970 Mon Sep 17 00:00:00 2001 From: Patrick Valsecchi Date: Thu, 7 Apr 2016 10:27:29 +0200 Subject: [PATCH 1/2] Add more stats (rendering time). Fix a small bug where invalid statsd packet where sent when the key was containing weird chars. --- c2cgeoportal/stats.py | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/c2cgeoportal/stats.py b/c2cgeoportal/stats.py index 566b7fd2c9..2ff2e0ae58 100644 --- a/c2cgeoportal/stats.py +++ b/c2cgeoportal/stats.py @@ -115,6 +115,9 @@ def get_stats(self, request): return {"timers": timers} +INVALID_KEY_CHARS = re.compile(r"[:|\.]") + + class _StatsDBackend(object): # pragma: nocover def __init__(self, address, prefix): self._prefix = prefix @@ -132,7 +135,7 @@ def __init__(self, address, prefix): self._socket.connect(sa) def _key(self, key): - return self._prefix + ".".join([i.replace(".", r"_") for i in key]) + return self._prefix + ".".join([INVALID_KEY_CHARS.sub("_", i) for i in key]) def timer(self, key, duration): the_key = self._key(key) @@ -143,12 +146,7 @@ def timer(self, key, duration): pass # Ignore errors (must survive if stats cannot be sent) -def _request_callback(event): # pragma: nocover - """ - Callback called when a new HTTP request is incoming. - """ - measure = timer() - +def _create_finished_cb(kind, measure): # pragma: nocover def finished_cb(request): if request.exception is not None: if isinstance(request.exception, HTTPException): @@ -161,10 +159,27 @@ def finished_cb(request): name = "_not_found" else: name = request.matched_route.name - key = ["route", request.method, name, str(status)] + key = [kind, request.method, name, str(status)] measure.stop(key) + return finished_cb + - event.request.add_finished_callback(finished_cb) +def _request_callback(event): # pragma: nocover + """ + Callback called when a new HTTP request is incoming. + """ + measure = timer() + event.request.add_finished_callback(_create_finished_cb("route", measure)) + + +def _before_rendered_callback(event): # pragma: nocover + """ + Callback called when the rendering is starting. + """ + request = event.get("request", None) + if request: + measure = timer() + request.add_finished_callback(_create_finished_cb("render", measure)) def _simplify_sql(sql): @@ -215,6 +230,7 @@ def init_pyramid_spy(config): # pragma: nocover :param config: The Pyramid config """ config.add_subscriber(_request_callback, pyramid.events.NewRequest) + config.add_subscriber(_before_rendered_callback, pyramid.events.BeforeRender) def _get_env_or_settings(config, what_env, what_vars, default): From af59b5cb9bab1bcdf670cbbd19d311f244589df2 Mon Sep 17 00:00:00 2001 From: Patrick Valsecchi Date: Thu, 7 Apr 2016 11:54:08 +0200 Subject: [PATCH 2/2] Fix build when there is no c2cgeoportal installed on the machine --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 51ae58af9b..f403f82f5a 100644 --- a/Makefile +++ b/Makefile @@ -215,7 +215,7 @@ c2cgeoportal/scaffolds/update/package.json_tmpl: ngeo/package.json .build/requir $(MAKO_FILES:.mako=): .build/venv/bin/c2c-template ${VARS_FILES} -%: %.mako +%: %.mako .build/requirements.timestamp $(C2C_TEMPLATE_CMD) --engine mako --files $< c2cgeoportal/locale/c2cgeoportal.pot: lingua.cfg $(SRC_FILES) .build/requirements.timestamp