from datetime import timedelta from prometheus_client import Gauge from django.utils import timezone last_1hr_security_code = Gauge( name='app_last_1hr_security_code', documentation='Count of security codes in the last 1 hour, too many unused may indicte an attack', labelnames=['status'], multiprocess_mode='livemax' ) undelivered_lark_messages = Gauge( name='app_undelivered_lark_message', documentation='Count of lark messages that still not delivered, assuming all messages are delivered within 5 minutes', multiprocess_mode='livemax' ) undelivered_crm_leads = Gauge( name='app_undelivered_crm_leads', documentation='Count of crm leads that still not delivered, assuming all leads are delivered within 5 minutes', multiprocess_mode='livemax' ) def update_metrics(): from pingcap_sso.models import SecurityCode, LarkMessage, FXCRMLeads last_1hr_security_code.labels(status='unused').set( SecurityCode.objects.filter( created_at__gte=timezone.now() - timedelta(hours=1), confirmed=False ).count() ) last_1hr_security_code.labels(status='used').set( SecurityCode.objects.filter( created_at__gte=timezone.now() - timedelta(hours=1), confirmed=True ).count() ) undelivered_lark_messages.set( LarkMessage.objects.exclude( status=LarkMessage.STATUS_SUCCESS ).filter( created_at__lte=timezone.now() - timedelta(minutes=5) ).count() ) undelivered_crm_leads.set( FXCRMLeads.objects.exclude( sync_status=FXCRMLeads.SYNC_STATUS_SUCCESS ).filter( created_at__lte=timezone.now() - timedelta(minutes=5) ).count() )