o
    ïA¸h^  ã                   @   s®   U d dl Z d dlZd dlmZ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aeed< dd	„ Zd
d„ Zdefdd„Zdefdd„Zdefdd„Zdefdd„ZdS )é    N)Ú	WebSocketÚWebSocketDisconnect)ÚAIOKafkaProducer)ÚdatetimeÚ	timedelta)Úconnected_clients)ÚdatabaseÚproducerc                   Ã   s   t ddat ¡ I d H  d S )Nzlocalhost:9092)Úbootstrap_servers)r   r	   Ústart© r   r   ú8/var/www/html/moveengine/app/v1/sockets/tracking_data.pyÚstart_kafka_producer   s   €
r   c                   Ã   s   t rt  ¡ I d H  d S d S )N)r	   Ústopr   r   r   r   Ústop_kafka_producer   s   €ÿr   Ú	websocketc                 Ã   s„   |   ¡ I d H  z/	 |  ¡ I d H }t |¡}t ¡  ¡ |d< tr/t dt 	|¡ 
d¡¡I d H  |  d¡I d H  q
 tyA   Y d S w )NTÚreceived_atÚvehicle_trackingzutf-8zMessage queued successfully.)ÚacceptÚreceive_textÚjsonÚloadsr   ÚutcnowÚ	isoformatr	   ÚsendÚdumpsÚencodeÚ	send_textr   )r   ÚmessageÚdatar   r   r   Úwebsocket_tracking_data   s   €
úÿr    c                 Ã   sj   |   ¡ I d H  t | ¡ tdttƒƒ z
	 t d¡I d H  q ty4   t | ¡ tdttƒƒ Y d S w )Nu   âœ… Client connected. Total:Té   u#   âŒ Client disconnected. Remaining:)	r   r   ÚaddÚprintÚlenÚasyncioÚsleepr   Úremove)r   r   r   r   Úwebsocket_realtime_updates"   s   €
ÿ
þr(   c              
   Ã   s
  |   ¡ I d H  z¾|  ¡ I d H }t |¡}| d¡}| d¡}|r#|s5|  d¡I d H  |  ¡ I d H  W d S zt |d¡}|t	dd }W n t
y^   |  d¡I d H  |  ¡ I d H  Y W d S w t ¡ }t|ƒ}|d }	|	 |||d	œd
œdddddœ¡}
td|
ƒ |
D ] }ttj|tdƒ |  tj|td¡I d H  t d¡I d H  qƒ|  d¡I d H  |  ¡ I d H  zt|ƒ W W d S  tyÆ   Y W d S w  tyÔ   tdƒ Y d S  ty } z$tdt|ƒ› ƒ |  dt|ƒ› ¡I d H  |  ¡ I d H  W Y d }~d S d }~ww )NÚ	device_idÚdatezMissing device_id or date.z%Y-%m-%d %H:%M:%Sr!   )Úhoursz,Invalid date format. Use YYYY-MM-DD HH:MM:SSÚtracking_logs)z$gtez$lt)r)   r   )ÚlocationÚspeedÚheadingr   zQuery returned:)Údefaultgš™™™™™É?ÚdonezClient disconnected.zError: )r   r   r   r   Úgetr   Úcloser   Ústrptimer   Ú
ValueErrorr   Úget_mongo_dbÚnextÚfindr#   r   Ústrr%   r&   ÚStopIterationr   Ú	Exception)r   ÚqueryÚ
query_datar)   Údatetime_strÚ
start_dateÚend_dateÚ	mongo_genÚmongoÚ
collectionÚcursorÚdocÚer   r   r   Úwebsocket_historical_route.   sd   €


ýþþú

ÿ€ýrG   c              	   Ã   sÐ   |   ¡ I d H  z?|  ¡ I d H }t |¡}| d¡}|s.|  d¡I d H  |  ¡ I d H  W d S | t|< td|› dt	tƒ› ƒ 	 t
 d¡I d H  q? tyg   |tv rdt|= td|› dt	tƒ› ƒ Y d S Y d S w )	NÚworkforce_idzMissing workforce_id.u   âœ… Workforce z connected. Total clients: Tr!   u   âŒ Workforce z disconnected. Remaining: )r   r   r   r   r2   r   r3   r   r#   r$   r%   r&   r   )r   Úmsgr   rH   r   r   r   Úwebsocket_workforce_schedulesk   s*   €

ÿþÿrJ   )r%   r   Úfastapir   r   Úaiokafkar   r   r   Úapp.utils.connectionsr   Úapp.dbr   r	   Ú__annotations__r   r   r    r(   rG   rJ   r   r   r   r   Ú<module>   s   
 =