Prechádzať zdrojové kódy

HUE-9202 [core] Adding number of queries metric

Ying Chen 5 rokov pred
rodič
commit
1530e575de

+ 25 - 0
desktop/core/src/desktop/metrics.py

@@ -24,6 +24,9 @@ import logging
 import multiprocessing
 import threading
 
+from datetime import datetime, timedelta
+from prometheus_client import Gauge
+
 from useradmin.models import User
 
 from desktop.lib.metrics import global_registry
@@ -157,3 +160,25 @@ spnego_authentication_time = global_registry().timer(
     counter_numerator='authentications',
     rate_denominator='seconds',
 )
+
+# ------------------------------------------------------------------------------
+
+def num_of_queries():
+  from desktop.models import Document2 # Avoid circular dependency
+  try:
+    count = Document2.objects.filter(type__istartswith='query-', is_history=True, last_modified__gt=datetime.now() - timedelta(minutes=10)).count()
+  except:
+    LOG.exception('Could not get num_of_queries')
+    count = 0
+  return count
+
+global_registry().gauge_callback(
+    name='queries.number',
+    callback=num_of_queries,
+    label='number of queries',
+    description='Number of queries were executed in last 10 minutes',
+    numerator='users',
+)
+
+prometheus_queries_numbers = Gauge('hue_queries_numbers', 'Hue - numbers of queries')
+prometheus_queries_numbers.set_function(num_of_queries)

+ 20 - 1
desktop/libs/notebook/src/notebook/api_tests.py

@@ -21,17 +21,20 @@ import json
 import sys
 
 from collections import OrderedDict
+from datetime import datetime
 from nose.plugins.attrib import attr
 from nose.plugins.skip import SkipTest
 from nose.tools import assert_equal, assert_true, assert_false
 
+from django.test.client import Client
 from django.urls import reverse
 from azure.conf import is_adls_enabled
 
 from desktop import appmanager
-from desktop.conf import APP_BLACKLIST, ENABLE_CONNECTORS
+from desktop.conf import APP_BLACKLIST, ENABLE_CONNECTORS, ENABLE_PROMETHEUS
 from desktop.lib.django_test_util import make_logged_in_client
 from desktop.lib.test_utils import grant_access, add_permission
+from desktop.metrics import num_of_queries
 from desktop.models import Directory, Document, Document2
 from hadoop import cluster as originalCluster
 from useradmin.models import User
@@ -585,6 +588,22 @@ def test_get_interpreters_to_show():
     appmanager.load_apps(APP_BLACKLIST.get())
 
 
+class TestQueriesMetrics(object):
+
+  def test_queries_num(self):
+    with patch('desktop.models.Document2.objects') as doc2_value_mock:
+      doc2_value_mock.filter.return_value.count.return_value = 12500
+      count = num_of_queries()
+      assert_equal(12500, count)
+
+      if not ENABLE_PROMETHEUS.get():
+        raise SkipTest
+
+      c = Client()
+      response = c.get('/metrics')
+      assert_true(b'hue_queries_numbers 12500.0' in response.content, response.content)
+
+
 class TestAnalytics(object):
 
   def setUp(self):