o
    uQ$h                     @   s   d dl mZ ddlmZ d dlZd dlmZ ddlmZ d dlm	Z	m
Z
 eeZdd	 Zd
d Zdd 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mZ e	edd ZdS )    )transaction   )BlogViewN)timezone)PageView)login_requireduser_passes_testc              
   C   s|   z | j d}|r|dd  }n| j d}|r|W S dW S  ty= } ztdt|  W Y d}~dS d}~ww )zu
    Extract client IP address from request, handling proxies
    Returns str or None if IP cannot be determined
    HTTP_X_FORWARDED_FOR,r   REMOTE_ADDRNzFailed to get client IP: )METAgetsplitstrip	Exceptionloggerwarningstr)requestx_forwarded_foripe r   ?/var/www/html/mimamsha/mimansha/apps/mimansha_main/analytics.pyget_client_ip   s   r   c              
   C   s   z5t  & tjj| t||jdddd |jj	p ddd dW  d   W S 1 s.w   Y  W dS  t
yX } ztjd| j dt| d	d
 W Y d}~dS d}~ww )z
    Atomically create a view tracking record
    Args:
        blog: Blog instance
        request: HttpRequest object
    Returns:
        BlogView instance if created, None if failed
    HTTP_USER_AGENT N   d   )blog
ip_address
user_agent
session_idzFailed to track blog view for z: T)exc_info)r   atomicr   objectscreater   r   r   sessionsession_keyr   r   erroridr   )r   r   r   r   r   r   track_blog_view   s    	
(r+   c                 C   sH   t   }| jdddd }| jj}tjj	||||ddid dS )z5
    Tracks a page view (minimal implementation)
    r   r   N-   viewsr   )date	page_namer    r(   defaults)
r   nowr.   r   r   r'   r(   r   r%   update_or_create)r   r/   todayr    r(   r   r   r   track_page_view4   s   
r4   )JsonResponse)require_GET)r   SiteAnalytics)CountSumc                 C   s   | j d}|rtj|d }nt  }tjj	|dj
tdtdddd}tjj||d	 p3d
|d p8d
dd td|d|d	 pHd
|d pMd
dS )zU
    URL endpoint to trigger analytics update
    Access via: /update-analytics/
    r.   z%Y-%m-%d)r.   r-   r    T)distinct)total_viewsunique_visitorsr;   r   r<   )r.   r0   success)statusr.   r;   r<   )GETr   r   datetimestrptimer.   r1   r   r%   filter	aggregater9   r8   r7   r2   r5   strftime)r   
date_paramr.   
views_datar   r   r   update_analyticsK   s(   




rG   )	django.dbr   modelsr   loggingdjango.utilsr   r   django.contrib.auth.decoratorsr   r   	getLogger__name__r   r   r+   r4   django.httpr5   django.views.decorators.httpr6   r7   django.db.modelsr8   r9   rG   r   r   r   r   <module>   s$    
