+
    |w¼jH  ã                   ób   € R t ^ RIt^ RIt^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
 R R ltR R	 ltR# )
zCPeriodic live-status reconciliation for Billing and customer views.N)Úselect)ÚAsyncSessionLocal)Úrefresh_customer_online_status)ÚCustomerc                ó$   € V ^8„  d   QhR\         /# )é   Úreturn)Úint)Úformats   "Ú0/var/www/html/bestweb/app/core/status_monitor.pyÚ__annotate__r      s   € ÷ ñ ”sñ ó    c            	      ó|   €  \        ^
\        \        P                  ! RR4      4      4      #   \         d     ^# i ; i)é
   ÚBESTWEB_STATUS_POLL_SECONDSÚ30)Úmaxr	   ÚosÚgetenvÚ
ValueError© r   r   Úpoll_intervalr      s7   € ðÜ�2”sœ2Ÿ9š9Ð%BÀDÓIÓJÓKÐKøÜô Úðús   ‚), ¬;º;c                ó   € V ^8„  d   QhRR/# )r   r   Nr   )r
   s   "r   r   r      s   € ÷ -ñ -˜Dñ -r   c               ƒ  óX  "  €   \        4       ;_uu_4       GRj  x€L
 p V P                  \        \        4      P	                  \        P
                  R8H  \        P                  P                  R4      \        P                  P                  R4      \        P                  P                  R4      4      4      G Rj  x€L
 P                  4       P                  4       pV F  p \        W 4      G Rj  x€L
  K  	  RRR4      GRj  x€L
  \        P"                  ! \%        4       4      G Rj  x€L
  EK/   EL Ly LF  \         d    T P                  4       G Rj  x€L 
   K‚  i ; i L_  + GRj  x€L 
 '       g   i     Lv; i  \        P                    d    h \         d     L›i ; i L}5i)z9Keep billing status aligned with live OLT/MikroTik state.NF)r   Úexecuter   r   ÚwhereÚis_archivedÚpppoe_usernameÚis_notÚmikrotik_device_idÚolt_device_idÚscalarsÚallr   Ú	ExceptionÚrollbackÚasyncioÚCancelledErrorÚsleepr   )ÚdbÚ	customersÚcustomers      r   Úmonitor_loopr+      sB  é € à
ð	Ü(×*×*Ô*¨bØ#%§:¡:Üœ8Ó$×*Ñ*Ü ×,Ñ,°Ñ5Ü ×/Ñ/×6Ñ6°tÓ<Ü ×3Ñ3×:Ñ:¸4Ó@Ü ×.Ñ.×5Ñ5°dÓ;ó	ó$÷ ÷ ‘7“9ŸS™S›Uð ó !*�Hð,Ü<¸XÓJ×JÒJñ !*÷ +×*ô* �mŠmœM›OÓ,×,Ó,ò+ +ññ KøÜ$ô ,ð !Ÿk™k›m×+Ô+ð,ú÷ +×*×*Ò*ûô  ×%Ñ%ô 	ØÜô 	áð	úñ 	-ùsæ   ‚F*…F ›D2œF ŸBE&Â;D5Â<%E&Ã"D9Ã0D7
Ã1D9Ã5E&Ã9F ÄE$ÄF Ä	!F*Ä*F(Ä+F*Ä2F Ä5E&Ä7D9Ä9E!	ÅEÅE!	ÅE&Å E!	Å!E&Å$F Å&E?	Å,E/Å-
E?	Å8E?	Å:F Å>F*Å?F ÆF%Æ!F%Æ"F*Æ$F%Æ%F*)Ú__doc__r%   r   Ú
sqlalchemyr   Úapp.core.databaser   Úapp.core.onboardingr   Úapp.models.modelsr   r   r+   r   r   r   Ú<module>r1      s$   ðÙ IÛ Û 	å å /Ý >Ý &õ÷-r   