o
    AhH                     @   sX   d dl m Z mZ d dlmZmZ d dlZd dlmZ d dlm	Z	 d dl
mZ dd ZdS )	    )datetime	timedelta)	json_utilObjectIdN)AIOKafkaConsumer)database)connected_clientsc            )         s  t dddd} |  I d H  t }t|}|d }|d }|d }|d }|d	 }z| 2 z3 d H W }t|jd
}	t	
 |	d< d|	d< |	d}
|	di dg }||	 g }|jd|
idgd}|rtd t| |d }t	
 }|| }|tddkr|
dd|
 d|d}|| || |
dd|
 d|jd  d|d}|| || t|d|
i}|D ]}|d}|d }|d!t|i}|r|sqd"d#lm}m} ||}||d$ d d" }||}|d%d&kr|s|r|d!t|ind }d'}|rx|d(rx|d( D ]Y}|d)} |d*}!|d+}"|!tvr8d,} n@|	| }#z$t|"}$|#d urKt|#nd }%|%d u sZt|! |%|$s_d,}W  nW q tyw }& z	d,}W Y d }&~& nd }&~&ww |r|r|d-nd|
 d.}'|
d/|d0 |'|	d d1}|| || qt D ]}(td2tt d3 z[|(tj |	t!j"d4I d H  |(tj d5d6d7d8d9d:d;t!j"d4I d H  td<tt d3 |D ](}|(tj d5|d=d>|d|d?|d@|d:d;t!j"d4I d H  qW q ty) }& zt#|( tdA|& W Y d }&~&qd }&~&ww q/6 W | $ I d H  zt| W d S  t%yF   Y d S w | $ I d H  zt| W w  t%y^   Y w w )BNvehicle_trackingzlocalhost:9092ztracking-group)bootstrap_serversgroup_idtracking_logs
alert_logs	geofencesgeofence_rulesgeofence_rule_mappingzutf-8received_atW
alert_type	device_idlocationcoordinates)r   )sortu   🟡 Last entry found:   )minutes
inactivityzDevice z inactive for over 30 minutes.)r   typemessagetriggered_atrecoveryz is back online after <   z minutes of inactivity.assigned_entity_idgeofence_idgeofence_rule_id_idr   )PointPolygonloctrigger_eventsexitT
conditions	parameteroperatorvalueFalert_messagez exited geofence.zgeofence-exitname)r   r   geofencer   r   u   ✅ Broadcasting to z connected client(s))defaultalertzDevice dev123 exited geofence.dev123EzTidel park coimbatorer   )r   r   r   r   r0   r   u   ✅ SEND MESSAGE TO to r    r   r0   u   ❌ WebSocket error:)&r   startr   get_mongo_dbnextjsonloadsr-   decoder   utcnowget
insert_onefind_oneprintr   appendsecondslistfindr   shapely.geometryr%   r&   contains	OPERATORSfloat	Exceptionr   copylen	send_textdumpsr   r1   removestopStopIteration))consumer	mongo_genmongor   r   r   r   geofence_mappingsmsgdatar   r   alerts
last_entry	last_timecurrent_timegapr2   online_alertmappingsmappinggeo_idrule_idr0   r%   r&   pointpolygoninsideruleconditions_passedcondparamopexpectedactualexpected_val
actual_vale	alert_msgws rp   ;/var/www/html/moveengine/app/v1/consumers/kafka_consumer.pyconsume_tracking_data   s  



















 rr   )r   r   bsonr   r   r9   aiokafkar   app.dbr   app.utils.connectionsr   rr   rp   rp   rp   rq   <module>   s    