NewsBlur/apps/monitor/views/newsblur_users.py

80 lines
2.9 KiB
Python
Raw Normal View History

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
2022-07-28 22:47:00 -04:00
from apps.statistics.models import MStatistics
2024-04-24 09:43:56 -04:00
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)
2024-04-24 09:43:56 -04:00
last_day = datetime.datetime.utcnow() - datetime.timedelta(minutes=60 * 24)
expiration_sec = 60 * 60 # 1 hour
data = {
2024-04-24 09:43:56 -04:00
"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,
}
2024-04-24 09:43:56 -04:00
return render(request, "monitor/prometheus_data.html", context, content_type="text/plain")