NewsBlur-viq/apps/monitor/views/newsblur_users.py
2024-04-24 09:43:56 -04:00

79 lines
2.9 KiB
Python
Executable file

import datetime
from django.contrib.auth.models import User
from django.shortcuts import render
from django.views import View
from apps.profile.models import Profile, RNewUserQueue
from apps.statistics.models import MStatistics
class Users(View):
def get(self, request):
last_year = datetime.datetime.utcnow() - datetime.timedelta(days=365)
last_month = datetime.datetime.utcnow() - datetime.timedelta(days=30)
last_day = datetime.datetime.utcnow() - datetime.timedelta(minutes=60 * 24)
expiration_sec = 60 * 60 # 1 hour
data = {
"all": MStatistics.get(
"munin:users_count",
lambda: User.objects.count(),
set_default=True,
expiration_sec=expiration_sec,
),
"yearly": MStatistics.get(
"munin:users_yearly",
lambda: Profile.objects.filter(last_seen_on__gte=last_year).count(),
set_default=True,
expiration_sec=expiration_sec,
),
"monthly": MStatistics.get(
"munin:users_monthly",
lambda: Profile.objects.filter(last_seen_on__gte=last_month).count(),
set_default=True,
expiration_sec=expiration_sec,
),
"daily": MStatistics.get(
"munin:users_daily",
lambda: Profile.objects.filter(last_seen_on__gte=last_day).count(),
set_default=True,
expiration_sec=expiration_sec,
),
"premium": MStatistics.get(
"munin:users_premium",
lambda: Profile.objects.filter(is_premium=True).count(),
set_default=True,
expiration_sec=expiration_sec,
),
"archive": MStatistics.get(
"munin:users_archive",
lambda: Profile.objects.filter(is_archive=True).count(),
set_default=True,
expiration_sec=expiration_sec,
),
"pro": MStatistics.get(
"munin:users_pro",
lambda: Profile.objects.filter(is_pro=True).count(),
set_default=True,
expiration_sec=expiration_sec,
),
"queued": MStatistics.get(
"munin:users_queued",
lambda: RNewUserQueue.user_count(),
set_default=True,
expiration_sec=expiration_sec,
),
}
chart_name = "users"
chart_type = "counter"
formatted_data = {}
for k, v in data.items():
formatted_data[k] = f'{chart_name}{{category="{k}"}} {v}'
context = {
"data": formatted_data,
"chart_name": chart_name,
"chart_type": chart_type,
}
return render(request, "monitor/prometheus_data.html", context, content_type="text/plain")