U
    	h'                     @   s   d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZmZ dd	lmZ dd
lZddlmZmZmZ ddlmZmZ ddlmZ ee	dddG dd deZdd Zd
S )z
Monitoring Views for Stream Processor Application

This module contains views for the monitoring dashboard, system health,
and real-time status updates using HTMX for dynamic content loading.
    )render)JsonResponseHttpResponse)TemplateView)
cache_page)method_decorator)timezone)CountQ)	timedeltaN)ChannelStreamSession
HLSSegment)JingleDetectionAdBreak)Notification   dispatch)namec                       s<   e Zd ZdZdZ fddZdd Zdd Zd	d
 Z  Z	S )MetricsViewzA
    Detailed metrics view with charts and performance data.
    zmonitoring/metrics.htmlc              
      s6  t  jf |}t }|tdd }|tdd }g }tdD ]N}|t|d d }|t|d }	tjj||	d	 }
|
|d|
d q>tt||d	< g }tjjd
dD ]V}|jj|d}tjj||d}|
|j|	 |	 |jtddd pdd q||d< | || || |d|d< |S )z2Get detailed metrics data for charts and analysis.   )hours   )days   )detection_time__gtedetection_time__ltz%H:00)hourcounthourly_detectionsT)	is_activestarted_at__gte)session__channelr   confidence_score)avgr%   r   )r   sessions
detectionsavg_confidencechannel_stats)detection_accuracystream_uptimenotification_delivery_rateperformance_data)superget_context_datar   nowr   ranger   objectsfilterr   appendstrftimelistreversedr   r&   r   	aggregatemodelsAvg_calculate_detection_accuracy_calculate_stream_uptime_calculate_notification_rate)selfkwargscontextr0   last_24hlast_7dr   i
hour_starthour_endr   r)   channelr&   r'   	__class__ =/var/www/html/JingleDetector/src/apps/monitoring/api/views.pyr/      sR    


	
zMetricsView.get_context_datac                 C   s>   t jj|d }|dkrdS t jj|dd }|| d S )z(Calculate detection accuracy percentage.)r   r   T)r   is_confirmedd   )r   r2   r3   r   )r>   sincetotal_detectionsconfirmed_detectionsrI   rI   rJ   r;   W   s    

z)MetricsView._calculate_detection_accuracyc                 C   sv   t jj|d}| sdS d}d}|D ]2}| r&|  }|jdkrP||7 }|d7 }q&|dkrfdS ||d  d S )z+Calculate average stream uptime percentage.r!   r   )active	completedr   i  rL   )r   r2   r3   existsdurationtotal_secondsstatus)r>   rM   r&   total_uptimetotal_sessionssessionrS   rI   rI   rJ   r<   g   s    

z$MetricsView._calculate_stream_uptimec                 C   s:   t jj|d}| sdS |jdd }||  d S )z-Calculate notification delivery success rate.)created_at__gter   rQ   rU   rL   )r   r2   r3   rR   r   )r>   rM   notificationssent_notificationsrI   rI   rJ   r=   ~   s
    z(MetricsView._calculate_notification_rate)
__name__
__module____qualname____doc__template_namer/   r;   r<   r=   __classcell__rI   rI   rG   rJ   r      s   8r   c              
   C   s  dt   di d}z:ddlm} | }|d W 5 Q R X d|d d< W n@ tk
r } z"d	t| |d d< d
|d< W 5 d}~X Y nX z8ddl	}ddl
m} ||j}|  d|d d< W nB tk
r } z"d	t| |d d< d|d< W 5 d}~X Y nX tjjddgd }||d d< tjjdt  tdd d }	|	dkrxd|d< d|	 |d d< nd|	 |d d< |d dkrdnd}
t||
dS )z
    Health check endpoint for load balancers and monitoring systems.
    
    Args:
        request: HTTP request object
        
    Returns:
        JsonResponse: Health status and system information
    healthyz1.0.0)rU   	timestampversionchecksr   )
connectionzSELECT 1rf   databasezunhealthy: 	unhealthyrU   N)settingsredisdegradedrP   
processing)
status__inactive_streamsfailed   )minutes)rU   updated_at__gtezhigh: recent_failuresznormal:    i  rZ   )r   r0   	isoformat	django.dbrg   cursorexecute	Exceptionstrrk   django.confrj   from_urlCELERY_BROKER_URLpingr   r2   r3   r   r   r   )requesthealth_datarg   rx   erk   rj   rro   rt   status_coderI   rI   rJ   health_check   sH    




r   )r`   django.shortcutsr   django.httpr   r   Zdjango.views.genericr   django.views.decorators.cacher   django.utils.decoratorsr   django.utilsr   django.db.modelsr	   r
   datetimer   jsonZapps.streams.modelsr   r   r   apps.jingles.modelsr   r   Zapps.notifications.modelsr   r   r   rI   rI   rI   rJ   <module>   s   q