diff --git a/ltc/analyzer/urls.py b/ltc/analyzer/urls.py index f9c7ba4..3894ef8 100644 --- a/ltc/analyzer/urls.py +++ b/ltc/analyzer/urls.py @@ -5,8 +5,8 @@ urlpatterns = [ path('', views.index, name='analyzer.index'), - path('test_data', views.test_data), - path('compare_highlights', views.compare_highlights), + path('test_data/', views.test_data), + path('compare_highlights/', views.compare_highlights), path( '/action_details//', views.action_details, diff --git a/ltc/base/models.py b/ltc/base/models.py index b120253..e3107d2 100644 --- a/ltc/base/models.py +++ b/ltc/base/models.py @@ -411,32 +411,37 @@ def top_mean(self, n=10): def get_test_metric(self, metric): metrics = { - 'mean': - {'query': - Sum(RawSQL("((data->>%s)::numeric)", ('mean',)) * - RawSQL("((data->>%s)::numeric)", ('count',))) / - Sum(RawSQL("((data->>%s)::numeric)", ('count',))), + 'mean': { + 'query': ExpressionWrapper(Sum( + RawSQL( + "COALESCE((data->>%s)::numeric, 0) * COALESCE((data->>%s)::numeric, 1)", + ('mean', 'count') + ) + ) / Sum( + RawSQL("COALESCE((data->>%s)::numeric, 1)", ('count',)) + ), output_field=FloatField()), 'source_model': 'TestData' }, - 'median': - {'query': - Sum(RawSQL("((data->>%s)::numeric)", ('median',)) * - RawSQL("((data->>%s)::numeric)", ('count',))) / - Sum(RawSQL("((data->>%s)::numeric)", ('count',))), + 'median': { + 'query': ExpressionWrapper(Sum( + RawSQL( + "COALESCE((data->>%s)::numeric, 0) * COALESCE((data->>%s)::numeric, 1)", + ('median', 'count') + ) + ) / Sum( + RawSQL("COALESCE((data->>%s)::numeric, 1)", ('count',)) + ), output_field=FloatField()), 'source_model': 'TestData' }, - 'cpu_load': - { - 'query': Avg(RawSQL( - "((data->>%s)::float) + ((data->>%s)::float) + " - "((data->>%s)::float)", ( - 'CPU_user', - 'CPU_iowait', - 'CPU_system', - ))), + 'cpu_load': { + 'query': ExpressionWrapper(Avg( + RawSQL( + "COALESCE((data->>%s)::float, 0) + COALESCE((data->>%s)::float, 0) + COALESCE((data->>%s)::float, 0)", + ('CPU_user', 'CPU_iowait', 'CPU_system') + ) + ), output_field=FloatField()), 'source_model': 'ServerMonitoringData' } - } metric_mapping = {