U
    !h                     @   sV   d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	Z	eedgdd	 Z
dS )
z
Business Metrics View for Prometheus Monitoring

This module provides custom business metrics for the Adtlas DAI Management System.
These metrics are scraped by Prometheus for monitoring business KPIs.
    )HttpResponse)require_http_methods)csrf_exempt)
connectionNGETc                 C   s  g }zBddl m} ddlm} ddlm} |j }|d|  z&|jj	dd }|d|  W n   |d|  Y nX |j }|d	|  |j }|d
|  ddl
m}	 ddlm}
 |	 |
dd }|jj	|d }|d|  t }|d d}W 5 Q R X |d|  |d W nL tk
r } z,|d |d |dt|  W 5 d}~X Y nX dddddddddd d!d"d#d$g}d%|| d% }t|d&d'S )(zr
    Custom business metrics endpoint for Prometheus scraping.
    Returns metrics in Prometheus text format.
    r   )	Campaigns)Channels)Userzadtlas_campaigns_total T)	is_activezadtlas_active_campaigns_total zadtlas_channels_total zadtlas_users_total )timezone)	timedelta   )days)Zlast_login__gtezadtlas_active_users_24h zSELECT 1zadtlas_database_healthy zadtlas_system_up 1zadtlas_metrics_error 1z%# Error retrieving business metrics: Nz7# HELP adtlas_campaigns_total Total number of campaignsz## TYPE adtlas_campaigns_total gaugez?# HELP adtlas_active_campaigns_total Number of active campaignsz*# TYPE adtlas_active_campaigns_total gaugez5# HELP adtlas_channels_total Total number of channelsz"# TYPE adtlas_channels_total gaugez/# HELP adtlas_users_total Total number of usersz# TYPE adtlas_users_total gaugez<# HELP adtlas_active_users_24h Users active in last 24 hoursz$# TYPE adtlas_active_users_24h gaugez5# HELP adtlas_database_healthy Database health statusz$# TYPE adtlas_database_healthy gaugez2# HELP adtlas_system_up System availability statusz# TYPE adtlas_system_up gauge
z(text/plain; version=0.0.4; charset=utf-8)content_type)Zapps.campaigns.modelsr   apps.channels.modelsr   apps.accounts.modelsr	   objectscountappendfilterdjango.utilsr   datetimer   nowr   cursorexecute	Exceptionstrjoinr   )requestZmetrics_datar   r   r	   Ztotal_campaignsZactive_campaignstotal_channelstotal_usersr   r   	yesterdayactive_usersr   Z
db_healthye	help_textZresponse_content r&   ,/var/www/html/Focus/src/apps/core/metrics.pybusiness_metrics   sd    






&r(   )__doc__django.httpr   Zdjango.views.decorators.httpr   django.views.decorators.csrfr   	django.dbr   timer(   r&   r&   r&   r'   <module>   s   