NewsBlur/apps/monitor/views/newsblur_feed_counts.py
2024-04-24 09:50:42 -04:00

60 lines
2.4 KiB
Python
Executable file

import redis
from django.conf import settings
from django.shortcuts import render
from django.views import View
from apps.push.models import PushSubscription
from apps.rss_feeds.models import DuplicateFeed, Feed
from apps.statistics.models import MStatistics
class FeedCounts(View):
def get(self, request):
exception_feeds = MStatistics.get("munin:exception_feeds")
if not exception_feeds:
exception_feeds = Feed.objects.filter(has_feed_exception=True).count()
MStatistics.set("munin:exception_feeds", exception_feeds, 60 * 60 * 12)
exception_pages = MStatistics.get("munin:exception_pages")
if not exception_pages:
exception_pages = Feed.objects.filter(has_page_exception=True).count()
MStatistics.set("munin:exception_pages", exception_pages, 60 * 60 * 12)
duplicate_feeds = MStatistics.get("munin:duplicate_feeds")
if not duplicate_feeds:
duplicate_feeds = DuplicateFeed.objects.count()
MStatistics.set("munin:duplicate_feeds", duplicate_feeds, 60 * 60 * 12)
active_feeds = MStatistics.get("munin:active_feeds")
if not active_feeds:
active_feeds = Feed.objects.filter(active_subscribers__gt=0).count()
MStatistics.set("munin:active_feeds", active_feeds, 60 * 60 * 12)
push_feeds = MStatistics.get("munin:push_feeds")
if not push_feeds:
push_feeds = PushSubscription.objects.filter(verified=True).count()
MStatistics.set("munin:push_feeds", push_feeds, 60 * 60 * 12)
r = redis.Redis(connection_pool=settings.REDIS_FEED_UPDATE_POOL)
data = {
"scheduled_feeds": r.zcard("scheduled_updates"),
"exception_feeds": exception_feeds,
"exception_pages": exception_pages,
"duplicate_feeds": duplicate_feeds,
"active_feeds": active_feeds,
"push_feeds": push_feeds,
}
chart_name = "feed_counts"
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")