Merge pull request #1817 from getredash/metrics

Metrics code update
This commit is contained in:
Arik Fraimovich
2017-06-12 12:40:32 +03:00
committed by GitHub
3 changed files with 30 additions and 16 deletions

View File

@@ -1,16 +1,15 @@
import time
from flask import Blueprint, current_app, request
from flask_login import current_user, login_required
from flask_restful import Resource, abort
from sqlalchemy.orm.exc import NoResultFound
from redash import settings
from redash.authentication import current_org
from redash.models import ApiUser
from redash.tasks import record_event as record_event_task
from redash.utils import json_dumps
from sqlalchemy.orm.exc import NoResultFound
routes = Blueprint('redash', __name__, template_folder=settings.fix_assets_path('templates'))

View File

@@ -1,17 +1,29 @@
import time
import logging
import time
from sqlalchemy.engine import Engine
from sqlalchemy.orm.util import _ORMJoin
from sqlalchemy.event import listens_for
from flask import has_request_context, g
from flask import g, has_request_context
from redash import statsd_client
from sqlalchemy.engine import Engine
from sqlalchemy.event import listens_for
from sqlalchemy.orm.util import _ORMJoin
from sqlalchemy.sql.selectable import Alias
metrics_logger = logging.getLogger("metrics")
def _table_name_from_select_element(elt):
t = elt.froms[0]
if isinstance(t, Alias):
t = t.original.froms[0]
while isinstance(t, _ORMJoin):
t = t.left
return t.name
@listens_for(Engine, "before_execute")
def before_execute(conn, elt, multiparams, params):
conn.info.setdefault('query_start_time', []).append(time.time())
@@ -23,10 +35,11 @@ def after_execute(conn, elt, multiparams, params, result):
action = elt.__class__.__name__
if action == 'Select':
t = elt.froms[0]
while isinstance(t, _ORMJoin):
t = t.left
name = t.name
name = 'unknown'
try:
name = _table_name_from_select_element(elt)
except Exception:
logging.exception('Failed finding table name.')
elif action in ['Update', 'Insert', 'Delete']:
name = elt.table.name
else:

View File

@@ -3,6 +3,7 @@ import time
from collections import namedtuple
from flask import g, request
from redash import statsd_client
metrics_logger = logging.getLogger("metrics")
@@ -19,19 +20,20 @@ def calculate_metrics(response):
request_duration = (time.time() - g.start_time) * 1000
queries_duration = g.get('queries_duration', 0.0)
queries_count = g.get('queries_count', 0.0)
endpoint = (request.endpoint or 'unknown').replace('.', '_')
metrics_logger.info("method=%s path=%s endpoint=%s status=%d content_type=%s content_length=%d duration=%.2f query_count=%d query_duration=%.2f",
request.method,
request.path,
request.endpoint,
endpoint,
response.status_code,
response.content_type,
response.content_length,
response.content_length or -1,
request_duration,
queries_count,
queries_duration)
statsd_client.timing('requests.{}.{}'.format(request.endpoint, request.method.lower()), request_duration)
statsd_client.timing('requests.{}.{}'.format(endpoint, request.method.lower()), request_duration)
return response