ó
    Ÿ£g*  ã                   óŠ   • S r SSKrSSKrSSKJr  SSKJr  SSKJrJrJ	r	  SS	K
Jr  \R                  " \5      r " S
 S\5      rg)ue   
Analizador en tiempo real - MVP v1.0

Procesa mediciones en tiempo real para detecciÃ³n de desvÃ­os
é    N)Údatetimeé   )ÚBaseProcessoré   )ÚREALTIME_BATCH_SIZEÚREALTIME_SLEEPÚCONFIG_UPDATE_INTERVALé   )ÚDeviationAnalyzerc                   óR   ^ • \ rS rSrU 4S jrS rS rS rS rS r	U 4S jr
S	rU =r$ )
ÚRealtimeAnalyzeré   c                 ó¼   >• [         TU ]  U5        [        5       U l        [        U l        S U l        [        U l        SSSS.U l	        [        R                  S5        g )Nr   )Úprocessed_measurementsÚdetected_deviationsÚgenerated_alarmszRealtimeAnalyzer inicializado)ÚsuperÚ__init__r   Údeviation_analyzerr   Ú
batch_sizeÚlast_config_updater	   Úconfig_update_intervalÚmetricsÚloggerÚinfo)ÚselfÚdb_nameÚ	__class__s     €Ú?/var/www/blue/EV-Temp_rev04/src/processors/realtime/analyzer.pyr   ÚRealtimeAnalyzer.__init__   sS   ø€ Ü‰Ñ˜Ô!Ü"3Ó"5ˆÔÜ-ˆŒØ"&ˆÔÜ&<ˆÔ#à&'Ø#$Ø !ñ
ˆŒô
 	�‰Ð3Õ4ó    c           
      óz  • U R                   (       Ga   U R                  5       (       d  [        R                  " S5        M@  U R	                  5         U R                  SU R                  45      u  pU(       d0  [        R                  SU 35        [        R                  " S5        M¦  U(       d  [        R                  " [        5        MÉ  / nU H0  n U R                  U5      (       a  UR                  US   5        M0  M2     U(       a  U R                  U5        U R                   (       a  GM  gg! [         a2  n[        R                  SUS    S[        U5       35         SnAM™  SnAff = f! [         aA  n[        R                  S[        U5       35        [        R                  " S5         SnAN›SnAff = f)	z'Ejecuta el procesamiento en tiempo realé   a8  
                    SELECT 
                        bb.id,
                        bb.dmac,
                        bb.temp,
                        bb.fecha,
                        m.idSistema,
                        e.idEntrada 
                    FROM bandeja_blue bb
                    JOIN modbus m ON bb.dmac = m.dmac
                    JOIN entradas e ON m.idModbus = e.idModbus
                    WHERE bb.analizado_el IS NULL
                    ORDER BY bb.fecha
                    LIMIT %s
                    FOR UPDATE SKIP LOCKED
                zError obteniendo mediciones: Úidu   Error procesando mediciÃ³n z: Nz$Error en procesamiento tiempo real: )ÚrunningÚcheck_connectionÚtimeÚsleepÚ_update_configurationsÚexecute_queryr   r   Úerrorr   Ú_process_measurementÚappendÚ	ExceptionÚstrÚ_mark_as_analyzed)r   ÚsuccessÚmeasurementsÚprocessed_idsÚmeasurementÚes         r   ÚrunÚRealtimeAnalyzer.run"   sn  € à�l�lˆlð3Ø×,Ñ,×.Ñ.Ü—J’J˜q”MÙð ×+Ñ+Ô-ð )-×(:Ñ(:ð <ð —o‘oÐ'ó))Ñ%�ö" Ü—L‘LÐ#@ÀÀÐ!OÔPÜ—J’J˜q”MÙæ#Ü—J’Jœ~Ô.Ùð !#�Û#/�Kð!Ø×4Ñ4°[×AÑAØ)×0Ñ0°¸TÑ1BÖCñ Bñ $0ö !Ø×*Ñ*¨=Ô9ða �l�lŒløôT %ó !ÜŸ™Ð'BÀ;ÈtÑCTÐBUÐUWÔX[Ð\]ÓX^ÐW_Ð%`ÔaÝ ûð!ûô ó Ü—‘ÐCÄCÈÃFÀ8ÐLÔMÜ—
’
˜1—‘ûðúsT   ”+E/ ÁA$E/ Â'!E/ Ã
E/ Ã*D0Ã<E/ Ä0
E,Ä:'E'Å!E/ Å'E,Å,E/ Å/
F:Å97F5Æ5F:c                 ó   • U R                   (       a"  [        R                  SUS    SUS    S35        U R                  R                  US   US   US   US   5      nUR	                  S	5      (       aD  U R
                  S
==   S-  ss'   UR	                  S5      (       a  U R
                  S==   S-  ss'   U R
                  S==   S-  ss'   g)u    Procesa una mediciÃ³n individualu   Procesando mediciÃ³n: DMAC=Údmacz, Valor=Útempu   Â°CÚ	idSistemaÚ	idEntradaÚfechaÚdeviation_detectedr   r
   Úalarm_generatedr   r   T)Údebugr   r   ÚanalyzeÚgetr   )r   r4   Úresults      r   r,   Ú%RealtimeAnalyzer._process_measurementZ   sÖ   € à�:�:Ü�L‰LØ-¨k¸&Ñ.AÐ-Bð CØ$ VÑ,Ð-¨Sð2ôð ×(Ñ(×0Ñ0Ø˜Ñ$Ø˜Ñ$Ø˜ÑØ˜Ñ ó	
ˆð �:‰:Ð*×+Ñ+Ø�L‰LÐ.Ó/°1Ñ4Ó/Ø�z‰zÐ+×,Ñ,Ø—‘Ð/Ó0°AÑ5Ó0à�‰Ð-Ó.°!Ñ3Ó.Ør!   c                 ó$  • U(       d  gSR                  S/[        U5      -  5      nU R                  SU S3[        R                  " 5       /U-   SS9u  p4U(       a5  U R
                  (       a#  [        R                  S[        U5       S	35        ggg)
z/Marca un conjunto de mediciones como analizadasNz, z%sz^
            UPDATE bandeja_blue 
            SET analizado_el = %s 
            WHERE id IN (z)
            T)Úcommitz	Marcadas z mediciones como analizadas)ÚjoinÚlenr*   r   Únowr@   r   )r   ÚidsÚplaceholdersr1   rC   s        r   r0   Ú"RealtimeAnalyzer._mark_as_analyzedr   s�   € æØà—y‘y $ ¬#¨c«(Ñ!2Ó3ˆØ×,Ñ,ðð '˜ð (ðô
 �\Š\‹^Ð˜sÑ"Øð -ð 
‰ˆö �t—z—zÜ�L‰L˜9¤S¨£X JÐ.IÐJÕKð "ˆ7r!   c                 óB  • [         R                  " 5       nU R                  b*  XR                  -
  R                  5       U R                  :”  aS  U R
                  R                  U R                  5        Xl        U R                  (       a  [        R                  S5        ggg)z-Actualiza las configuraciones si es necesarioNzConfiguraciones actualizadas)
r   rI   r   Útotal_secondsr   r   Úupdate_configurationsÚconnr@   r   )r   rI   s     r   r)   Ú'RealtimeAnalyzer._update_configurations…   sv   € ä�lŠl‹nˆØ×#Ñ#Ñ+Ø×*Ñ*Ñ*×9Ñ9Ó;¸d×>YÑ>YÓYà×#Ñ#×9Ñ9¸$¿)¹)ÔDØ&)Ô#Ø�z�zÜ—‘Ð;Õ<ð ð	 Zr!   c                 óŒ   • U R                   R                  5       nUR                  U R                  R	                  5       5        U$ )u    Obtiene mÃ©tricas del procesador)r   ÚcopyÚupdater   Úget_metrics)r   r   s     r   rU   ÚRealtimeAnalyzer.get_metrics�   s4   € à—,‘,×#Ñ#Ó%ˆØ�‰�t×.Ñ.×:Ñ:Ó<Ô=Øˆr!   c                 óX   >• [         TU ]  5         U R                  U R                  l        g)zCambia el modo debugN)r   Útoggle_debugr@   r   )r   r   s    €r   rX   ÚRealtimeAnalyzer.toggle_debug–   s    ø€ ä‰ÑÔØ(,¯
©
ˆ×ÑÕ%r!   )r   r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r6   r,   r0   r)   rU   rX   Ú__static_attributes__Ú__classcell__)r   s   @r   r   r      s-   ø† õ5ò6òpò0Lò&	=ò÷3ó 3r!   r   )Ú__doc__Úloggingr'   r   Úbaser   Úconfig.constantsr   r   r	   Ú	deviationr   Ú	getLoggerrZ   r   r   © r!   r   Ú<module>rg      sE   ðñó Û Ý Ý  ÷ñ õ
 )à	×	Ò	˜8Ó	$€ôE3�}õ E3r!   