From 2221a9966250f61c8b621fdab7d7dd72c59b2783 Mon Sep 17 00:00:00 2001 From: CasperVerswijvelt Date: Sun, 25 Apr 2021 22:54:06 +0200 Subject: [PATCH] When daterange is 1 day, show hourly data in chart --- shynet/core/models.py | 44 +++++++++++++------ .../dashboard/includes/service_overview.html | 2 +- .../dashboard/includes/time_chart.html | 6 +++ .../templates/dashboard/pages/service.html | 2 +- 4 files changed, 39 insertions(+), 15 deletions(-) diff --git a/shynet/core/models.py b/shynet/core/models.py index e67f614..de15a65 100644 --- a/shynet/core/models.py +++ b/shynet/core/models.py @@ -7,7 +7,7 @@ from django.apps import apps from django.contrib.auth.models import AbstractUser from django.core.exceptions import ValidationError from django.db import models -from django.db.models.functions import TruncDate +from django.db.models.functions import TruncDate, TruncHour from django.db.utils import NotSupportedError from django.shortcuts import reverse from django.utils import timezone @@ -119,8 +119,10 @@ class Service(models.Model): Session = apps.get_model("analytics", "Session") Hit = apps.get_model("analytics", "Hit") + tz_now = timezone.now() + currently_online = Session.objects.filter( - service=self, last_seen__gt=timezone.now() - timezone.timedelta(seconds=10) + service=self, last_seen__gt=tz_now - timezone.timedelta(seconds=10) ).count() sessions = Session.objects.filter( @@ -202,17 +204,32 @@ class Service(models.Model): if session_count == 0: avg_session_duration = None - session_chart_data = { - k["date"]: k["count"] - for k in sessions.annotate(date=TruncDate("start_time")) - .values("date") - .annotate(count=models.Count("uuid")) - .order_by("date") - } - for day_offset in range((end_time - start_time).days + 1): - day = (start_time + timezone.timedelta(days=day_offset)).date() - if day not in session_chart_data: - session_chart_data[day] = 0 + if end_time.day == start_time.day: + session_chart_tooltip_format = "MM/dd HH:mm" + session_chart_data = { + k["hour"]: k["count"] + for k in sessions.annotate(hour=TruncHour("start_time")) + .values("hour") + .annotate(count=models.Count("uuid")) + .order_by("hour") + } + for hour_offset in range(int((end_time - start_time).seconds / 3600) + 1): + hour = (start_time + timezone.timedelta(hours=hour_offset)) + if hour not in session_chart_data: + session_chart_data[hour] = 0 if hour < tz_now else None + else: + session_chart_tooltip_format = "MMM d" + session_chart_data = { + k["date"]: k["count"] + for k in sessions.annotate(date=TruncDate("start_time")) + .values("date") + .annotate(count=models.Count("uuid")) + .order_by("date") + } + for day_offset in range((end_time - start_time).days + 1): + day = (start_time + timezone.timedelta(days=day_offset)).date() + if day not in session_chart_data: + session_chart_data[day] = 0 if day < tz_now.date() else None return { "currently_online": currently_online, @@ -240,6 +257,7 @@ class Service(models.Model): ) ] ), + "session_chart_tooltip_format": session_chart_tooltip_format, "online": True, } diff --git a/shynet/dashboard/templates/dashboard/includes/service_overview.html b/shynet/dashboard/templates/dashboard/includes/service_overview.html index 1996ddb..a966f55 100644 --- a/shynet/dashboard/templates/dashboard/includes/service_overview.html +++ b/shynet/dashboard/templates/dashboard/includes/service_overview.html @@ -51,7 +51,7 @@
- {% include 'dashboard/includes/time_chart.html' with data=stats.session_chart_data sparkline=True height=100 name=object.uuid %} + {% include 'dashboard/includes/time_chart.html' with data=stats.session_chart_data sparkline=True height=100 name=object.uuid tooltip_format=stats.session_chart_tooltip_format %}
{% endwith %} \ No newline at end of file diff --git a/shynet/dashboard/templates/dashboard/includes/time_chart.html b/shynet/dashboard/templates/dashboard/includes/time_chart.html index 61e50ec..9254a0e 100644 --- a/shynet/dashboard/templates/dashboard/includes/time_chart.html +++ b/shynet/dashboard/templates/dashboard/includes/time_chart.html @@ -6,6 +6,9 @@ }, tooltip: { shared: false, + x: { + format: '{{tooltip_format|default:"MMM d"}}', + }, }, colors: ["#805AD5"], chart: { @@ -63,6 +66,9 @@ }, xaxis: { type: "datetime", + labels: { + datetimeUTC: false + }, }, stroke: { width: 1.5, diff --git a/shynet/dashboard/templates/dashboard/pages/service.html b/shynet/dashboard/templates/dashboard/pages/service.html index 8a0dec0..c873e00 100644 --- a/shynet/dashboard/templates/dashboard/pages/service.html +++ b/shynet/dashboard/templates/dashboard/pages/service.html @@ -86,7 +86,7 @@ {% endwith %}
- {% include 'dashboard/includes/time_chart.html' with data=stats.session_chart_data %} + {% include 'dashboard/includes/time_chart.html' with data=stats.session_chart_data tooltip_format=stats.session_chart_tooltip_format %}