Просмотр исходного кода

HUE-9202 [core] Adding number of queries metric

Ying Chen 5 лет назад
Родитель
Сommit
1530e575de
2 измененных файлов с 45 добавлено и 1 удалено
  1. 25 0
      desktop/core/src/desktop/metrics.py
  2. 20 1
      desktop/libs/notebook/src/notebook/api_tests.py

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

@@ -24,6 +24,9 @@ import logging
 import multiprocessing
 import multiprocessing
 import threading
 import threading
 
 
+from datetime import datetime, timedelta
+from prometheus_client import Gauge
+
 from useradmin.models import User
 from useradmin.models import User
 
 
 from desktop.lib.metrics import global_registry
 from desktop.lib.metrics import global_registry
@@ -157,3 +160,25 @@ spnego_authentication_time = global_registry().timer(
     counter_numerator='authentications',
     counter_numerator='authentications',
     rate_denominator='seconds',
     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
 import sys
 
 
 from collections import OrderedDict
 from collections import OrderedDict
+from datetime import datetime
 from nose.plugins.attrib import attr
 from nose.plugins.attrib import attr
 from nose.plugins.skip import SkipTest
 from nose.plugins.skip import SkipTest
 from nose.tools import assert_equal, assert_true, assert_false
 from nose.tools import assert_equal, assert_true, assert_false
 
 
+from django.test.client import Client
 from django.urls import reverse
 from django.urls import reverse
 from azure.conf import is_adls_enabled
 from azure.conf import is_adls_enabled
 
 
 from desktop import appmanager
 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.django_test_util import make_logged_in_client
 from desktop.lib.test_utils import grant_access, add_permission
 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 desktop.models import Directory, Document, Document2
 from hadoop import cluster as originalCluster
 from hadoop import cluster as originalCluster
 from useradmin.models import User
 from useradmin.models import User
@@ -585,6 +588,22 @@ def test_get_interpreters_to_show():
     appmanager.load_apps(APP_BLACKLIST.get())
     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):
 class TestAnalytics(object):
 
 
   def setUp(self):
   def setUp(self):