When daterange is 1 day, show hourly data in chart
This commit is contained in:
		
							parent
							
								
									9cb030ecbd
								
							
						
					
					
						commit
						2221a99662
					
				| @ -7,7 +7,7 @@ from django.apps import apps | |||||||
| from django.contrib.auth.models import AbstractUser | from django.contrib.auth.models import AbstractUser | ||||||
| from django.core.exceptions import ValidationError | from django.core.exceptions import ValidationError | ||||||
| from django.db import models | 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.db.utils import NotSupportedError | ||||||
| from django.shortcuts import reverse | from django.shortcuts import reverse | ||||||
| from django.utils import timezone | from django.utils import timezone | ||||||
| @ -119,8 +119,10 @@ class Service(models.Model): | |||||||
|         Session = apps.get_model("analytics", "Session") |         Session = apps.get_model("analytics", "Session") | ||||||
|         Hit = apps.get_model("analytics", "Hit") |         Hit = apps.get_model("analytics", "Hit") | ||||||
| 
 | 
 | ||||||
|  |         tz_now = timezone.now() | ||||||
|  | 
 | ||||||
|         currently_online = Session.objects.filter( |         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() |         ).count() | ||||||
| 
 | 
 | ||||||
|         sessions = Session.objects.filter( |         sessions = Session.objects.filter( | ||||||
| @ -202,17 +204,32 @@ class Service(models.Model): | |||||||
|         if session_count == 0: |         if session_count == 0: | ||||||
|             avg_session_duration = None |             avg_session_duration = None | ||||||
| 
 | 
 | ||||||
|         session_chart_data = { |         if end_time.day == start_time.day: | ||||||
|             k["date"]: k["count"] |             session_chart_tooltip_format = "MM/dd HH:mm" | ||||||
|             for k in sessions.annotate(date=TruncDate("start_time")) |             session_chart_data = { | ||||||
|             .values("date") |                 k["hour"]: k["count"] | ||||||
|             .annotate(count=models.Count("uuid")) |                 for k in sessions.annotate(hour=TruncHour("start_time")) | ||||||
|             .order_by("date") |                 .values("hour") | ||||||
|         } |                 .annotate(count=models.Count("uuid")) | ||||||
|         for day_offset in range((end_time - start_time).days + 1): |                 .order_by("hour") | ||||||
|             day = (start_time + timezone.timedelta(days=day_offset)).date() |             } | ||||||
|             if day not in session_chart_data: |             for hour_offset in range(int((end_time - start_time).seconds / 3600) + 1): | ||||||
|                 session_chart_data[day] = 0 |                 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 { |         return { | ||||||
|             "currently_online": currently_online, |             "currently_online": currently_online, | ||||||
| @ -240,6 +257,7 @@ class Service(models.Model): | |||||||
|                     ) |                     ) | ||||||
|                 ] |                 ] | ||||||
|             ), |             ), | ||||||
|  |             "session_chart_tooltip_format": session_chart_tooltip_format, | ||||||
|             "online": True, |             "online": True, | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -51,7 +51,7 @@ | |||||||
|     </div> |     </div> | ||||||
|     <hr class="sep h-4"> |     <hr class="sep h-4"> | ||||||
|     <div style="bottom: -1px;"> |     <div style="bottom: -1px;"> | ||||||
|         {% 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 %} | ||||||
|     </div> |     </div> | ||||||
|     {% endwith %} |     {% endwith %} | ||||||
| </a> | </a> | ||||||
| @ -6,6 +6,9 @@ | |||||||
|         }, |         }, | ||||||
|         tooltip: { |         tooltip: { | ||||||
|             shared: false, |             shared: false, | ||||||
|  |             x: { | ||||||
|  |                 format: '{{tooltip_format|default:"MMM d"}}', | ||||||
|  |             }, | ||||||
|         }, |         }, | ||||||
|         colors: ["#805AD5"], |         colors: ["#805AD5"], | ||||||
|         chart: { |         chart: { | ||||||
| @ -63,6 +66,9 @@ | |||||||
|         }, |         }, | ||||||
|         xaxis: { |         xaxis: { | ||||||
|             type: "datetime", |             type: "datetime", | ||||||
|  |             labels: { | ||||||
|  |                 datetimeUTC: false | ||||||
|  |             }, | ||||||
|         }, |         }, | ||||||
|         stroke: { |         stroke: { | ||||||
|             width: 1.5, |             width: 1.5, | ||||||
|  | |||||||
| @ -86,7 +86,7 @@ | |||||||
|     {% endwith %} |     {% endwith %} | ||||||
| </div> | </div> | ||||||
| <div class="card ~neutral !low py-0 mb-6"> | <div class="card ~neutral !low py-0 mb-6"> | ||||||
|     {% 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 %} | ||||||
| </div> | </div> | ||||||
| <div class="grid grid-cols-1 md:grid-cols-2 gap-6 mb-6"> | <div class="grid grid-cols-1 md:grid-cols-2 gap-6 mb-6"> | ||||||
|     <div class="card ~neutral !low limited-height py-2"> |     <div class="card ~neutral !low limited-height py-2"> | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user