U
    h3                     @   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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 G dd deeZdd Z dd Z!G dd deeZ"dd Z#dd 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)	timedelta)LoginRequiredMixinN)ChannelStreamSession
HLSSegment)JingleDetectionAdBreak)Notificationc                       s$   e Zd ZdZdZ fddZ  ZS )DashboardViewz
    Main dashboard view showing system overview and real-time statistics.
    
    This view provides a comprehensive overview of the stream processing
    system including active streams, recent detections, and system health.
    zmonitoring/dashboard.htmlc              	      s  t  jf |}t }|tdd }|tdd }tjjddgd}| t	jjdd tjj|d	 t
jj|d
 tjj|d tjj|dd d|d< tjdddd |d< t
jddddd |d< tjdddd |d< |ddd|d< |S )z
        Get dashboard context data including statistics and recent activity.
        
        Returns:
            dict: Context data for the dashboard template
           hours   active
processing
status__inT	is_activeZstarted_at__gtedetection_time__gteZstart_time__gte	completed)Zsent_at__gtestatus)active_streamsZtotal_channelssessions_todaydetections_todayad_breaks_todayZnotifications_sent_todaystatschannelz-started_atN   recent_sessionstemplatesession__channel-detection_timerecent_detections-start_timerecent_ad_breaksvideo_configaudio_configr$   )superget_context_datar   nowr   r   objectsfiltercountr   r   r   r   select_relatedorder_by)selfkwargscontextr6   last_24h	last_houractive_sessions	__class__ :/var/www/html/StreamProcessor/src/apps/monitoring/views.pyr5   "   sf    

 

  zDashboardView.get_context_data)__name__
__module____qualname____doc__template_namer5   __classcell__rD   rD   rB   rE   r      s   r   c                 C   s   t jjddgd }t jjdt tdd d }|dkrTd	}| d
}d}n(|dkrpd}| d}d}nd}d}d}d| d| d}t|S )a  
    HTMX endpoint for real-time system status updates.
    
    Returns system health information in HTML format for dynamic updates.
    
    Args:
        request: HTTP request object
        
    Returns:
        HttpResponse: HTML fragment with system status
    r   r   r   failedr*   minutesr#   Zupdated_at__gter   warningz failed streamsyellowhealthyz active streamsgreenidlezNo active streamsgrayzX
    <div class="flex items-center space-x-2">
        <div class="pulse-dot w-3 h-3 bg-zF-500 rounded-full"></div>
        <span class="text-sm text-gray-600">z</span>
    </div>
    )r   r7   r8   r9   r   r6   r   r   )requestr$   Zfailed_streamsr#   messagecolorhtmlrD   rD   rE   system_status\   s0    



rZ   c                 C   sn   ddl }ddl}zD|jdd}| }|d}d|dd|jdd	|jdd
}W n   d}Y nX t|S )z
    HTMX endpoint for system information updates.
    
    Returns basic system information for the sidebar.
    
    Args:
        request: HTTP request object
        
    Returns:
        HttpResponse: HTML fragment with system info
    r   Nr   )interval/z?
        <div class="text-xs space-y-1">
            <div>CPU: z.1fz%</div>
            <div>RAM: z%</div>
            <div>Disk: z%</div>
        </div>
        z<<div class="text-xs text-gray-500">Metrics unavailable</div>)psutiloscpu_percentZvirtual_memory
disk_usagepercentr   )rV   r]   r^   r_   memoryZdiskrY   rD   rD   rE   system_info   s    
&
rc   c                       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.r   r      )daysr   )r    Zdetection_time__ltz%H:00)hourr9   hourly_detectionsTr   r   )r-   r    confidence_score)avgrj   r   )namesessions
detectionsavg_confidencechannel_stats)Zdetection_accuracyZstream_uptimeZnotification_delivery_rateperformance_data)r4   r5   r   r6   r   ranger   r7   r8   r9   appendstrftimelistreversedr   rl   rk   	aggregatemodelsAvg_calculate_detection_accuracy_calculate_stream_uptime_calculate_notification_rate)r<   r=   r>   r6   r?   last_7drh   iZ
hour_startZhour_endr9   ro   r)   rl   rm   rB   rD   rE   r5      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   r7   r8   r9   )r<   sincetotal_detectionsconfirmed_detectionsrD   rD   rE   ry      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   )r   r"   r   i  r   )r   r7   r8   existsdurationtotal_secondsr#   )r<   r   rl   Ztotal_uptimeZtotal_sessionssessionr   rD   rD   rE   rz      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   r"   r#   r   )r   r7   r8   r   r9   )r<   r   notificationssent_notificationsrD   rD   rE   r{     s
    z(MetricsView._calculate_notification_rate)
rF   rG   rH   rI   rJ   r5   ry   rz   r{   rK   rD   rD   rB   rE   rd      s   8rd   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
    rR   z1.0.0)r#   	timestampversionchecksr   )
connectionzSELECT 1r   databasezunhealthy: Z	unhealthyr#   N)settingsredisZdegradedr   r   r   r$   rL   r*   rM   rO   zhigh: recent_failuresznormal:    i  r   )r   r6   	isoformat	django.dbr   cursorexecute	Exceptionstrr   django.confr   from_urlCELERY_BROKER_URLpingr   r7   r8   r9   r   r   )rV   Zhealth_datar   r   er   r   rr$   r   status_coderD   rD   rE   health_check  sH    




r   c                 C   s2   t jjddgdd}|| d}t| d|S )z
    HTMX endpoint for live stream data updates.
    
    Returns real-time stream information for dashboard widgets.
    
    Args:
        request: HTTP request object
        
    Returns:
        HttpResponse: HTML fragment with live stream data
    r   r   r   r)   )rA   Ztotal_activez%monitoring/partials/live_streams.html)r   r7   r8   r:   r9   r   )rV   rA   r>   rD   rD   rE   live_stream_data[  s    r   c                 C   sn   t  tdd }tjj|dddddd }tjj|d	dd
dd }||d}t	| d|S )z
    HTMX endpoint for recent activity updates.
    
    Returns recent detections and events for the activity feed.
    
    Args:
        request: HTTP request object
        
    Returns:
        HttpResponse: HTML fragment with recent activity
    r   r   r   r,   r-   r.   N
   r!   r0   r*   )r/   r1   z(monitoring/partials/recent_activity.html)
r   r6   r   r   r7   r8   r:   r;   r   r   )rV   r@   r/   r1   r>   rD   rD   rE   recent_activitys  s0     r   )&rI   django.shortcutsr   django.httpr   r   Zdjango.views.genericr   django.views.decorators.cacher   django.utils.decoratorsr   django.utilsr   django.db.modelsr	   r
   datetimer   django.contrib.auth.mixinsr   jsonZapps.streams.modelsr   r   r   apps.jingles.modelsr   r   Zapps.notifications.modelsr   r   rZ   rc   rd   r   r   r   rD   rD   rD   rE   <module>   s(   D."q>