#!/usr/bin/env python 
from utils.munin.base import MuninGraph
import redis

class NBMuninGraph(MuninGraph):

    @property
    def graph_config(self):
        return {
            'graph_category' : 'NewsBlur',
            'graph_title' : 'NewsBlur Feed Counts',
            'graph_vlabel' : 'Feeds Feed Counts',
            'graph_args' : '-l 0',
            'scheduled_feeds.label': 'scheduled_feeds',
            'exception_feeds.label': 'exception_feeds',
            'exception_pages.label': 'exception_pages',
            'duplicate_feeds.label': 'duplicate_feeds',
            'active_feeds.label': 'active_feeds',
            'push_feeds.label': 'push_feeds',
        }

    def calculate_metrics(self):
        from apps.rss_feeds.models import Feed, DuplicateFeed
        from apps.push.models import PushSubscription
        from django.conf import settings
        from apps.statistics.models import MStatistics
        
        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)
        
        return {
            '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,
        }

if __name__ == '__main__':
    NBMuninGraph().run()
