Ë
    &užg¨  ã                   óž   — d 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	m
Z
 dd	lmZ dd
lmZmZ  ej                   e«      Z G d„ de«      Zy)uÅ   
Procesador de datos histÃ³ricos - MVP v1.0

Procesa mediciones histÃ³ricas pendientes agrupÃ¡ndolas por perÃ­odos de 15 minutos
y generando un Ãºnico registro estadÃ­stico por entrada y perÃ­odo.
é    )ÚdatetimeN)Údefaultdicté   )ÚBaseProcessoré   )Úget_unprocessed_measurementsÚmark_as_processed_batchÚinsert_registros_batch)ÚEntrada)Ú
BATCH_SIZEÚPROCESS_INTERVALc                   ó   — e Zd Zd„ Zd„ Zy)ÚHistoricalProcessorc                 óp  — | j                  «       syt        j                  d«       	 t        | j                  «      }|st        j                  d«       yi }|D ]u  \  }}}}}|j                  |j                  t        z  t        z  dd¬«      }||f}	|	|vr	g g |dœ||	<   ||	   d   j                  ||f«       ||	   d	   j                  |«       Œw g }
g }|j                  «       D ]Î  \  \  }}}t        ||d
   |«      }|d   D ]  \  }}|j                  ||«       Œ |j                  «       }|sŒK|d   dkD  sŒT|
j                  d||d   |d   |d   |d   |d   f«       |j                  |d	   «       | j                  sŒœt        j                  d|› d|› d|d   › d|d   › d|d   › d|d   › �«       ŒÐ |rt!        | j                  |«       |
rt#        | j                  |
«       t        j                  dt%        |
«      › �«       y# t&        $ r$}t        j)                  d|› �d¬«       Y d}~yd}~ww xY w)uA   
        Procesa todos los datos histÃ³ricos pendientes.
        Fu%   Iniciando procesamiento histÃ³rico...u#   No hay datos histÃ³ricos pendientesTr   ©ÚminuteÚsecondÚmicrosecond)Ú
medicionesÚidsÚdmacr   r   r   Úcantidad_medicionesÚperiodo_inicioÚpromedioÚmaximoÚminimoÚdesviou	   PerÃ­odo z
: Entrada z - Mediciones: z, Promedio: z, Min/Max: ú/u:   Procesamiento histÃ³rico completado. Registros generados: u#   Error en procesamiento histÃ³rico: )Úexc_infoN)Úcheck_connectionÚloggerÚinfor   ÚconnÚreplacer   r   ÚappendÚitemsr   Úagregar_medicionÚget_estadisticasÚextendÚverboseÚdebugr	   r
   ÚlenÚ	ExceptionÚerror)ÚselfÚmeasurementsÚmediciones_por_periodoÚm_idr   ÚtempÚfechaÚ
id_entradaÚperiodoÚkeyÚregistros_historicosÚall_processed_idsÚdatosÚentradaÚstatsÚes                   ú@/Users/jma/desarrollo/EV-Temp_rev04/src/processors/historical.pyÚprocess_historical_dataz+HistoricalProcessor.process_historical_data   s¦  € ð ×$Ñ$Ô&Øä�‰Ð;Ô<ðF	ä7¸¿	¹	ÓBˆLÙÜ—‘ÐAÔBØð &(Ð"à7Cò @Ñ3��d˜D %¨àŸ-™-Ø!ŸL™LÔ,<Ñ<Ô@PÑPØØ !ð (ó �ð  
Ð+�ØÐ4Ñ4à&(Ø!Ø $ñ3Ð*¨3Ñ/ð ' sÑ+¨LÑ9×@Ñ@À$ÈÀÔOØ& sÑ+¨EÑ2×9Ñ9¸$Õ?ð#@ð( $&Ð Ø "Ðà0F×0LÑ0LÓ0Nò Ñ,Ñ%�˜* uÜ! *¨e°F©m¸WÓE�ð $)¨Ñ#6ò :‘K�D˜%Ø×,Ñ,¨T°5Õ9ð:ð  ×0Ñ0Ó2�Ú˜UÐ#8Ñ9¸AÓ=Ø(×/Ñ/Ø˜: uÐ-=Ñ'>Ø˜jÑ)¨5°©?Ø˜h™¨¨x©ð1ô ð
 &×,Ñ,¨U°5©\Ô:à—|“|ÜŸ™Ø'¨ y°
¸:¸,ð G+Ø+0Ð1FÑ+GÐ*Hð I)Ø).¨zÑ):Ð(;ð <(Ø(-¨h©Ð'8¸¸%À¹/Ð9JðLõð%ñ4 !Ü'¨¯	©	Ð3DÔEá#Ü& t§y¡yÐ2FÔGä�K‰KÐTÔUXÐYmÓUnÐToÐpÔqØøäò 	Ü�L‰LÐ>¸q¸cÐBÈTˆLÔRÜûð	ús2   ¨,H ÁCH Ä0H Ä9AH ÆBH È	H5ÈH0È0H5c                 ó@  — |sg S i }t        «       }|D ]€  \  }}}}}t        |||dug«      sŒ|j                  |j                  t        z  t        z  dd¬«      }	|	|f}
|
|vr|g dœ||
<   ||
   d   j                  |||f«       |j                  |«       Œ‚ g }|j                  «       D ]±  \  \  }	}}t        ||d   |	«      }|d   D ]  \  }}}|j                  ||«       Œ |j                  «       }|sŒL|d   dkD  sŒU|j                  d||d   |d	   |d
   |d   |d   f«       | j                  sŒ‰t        j                  d|› d|d   › d|	d›d|d   › d�	«       Œ³ |rt        | j                  t!        |«      «       |rt#        | j                  |«       t!        |«      S )uU   
        Procesa un lote de mediciones agrupÃ¡ndolas por perÃ­odo y entrada.
        Nr   r   )r   r   r   r   r   r   r   r   r   r   u&   Generado registro Ãºnico para entrada z, DMAC u   , perÃ­odo z%Y-%m-%d %H:%Mz con z mediciones)ÚsetÚallr$   r   r   r%   Úaddr&   r   r'   r(   r*   r!   r+   r	   r#   Úlistr
   )r/   r0   Úperiodo_entrada_dictÚpending_marksr2   r   r3   r4   r5   r6   r7   Úprocessed_dataÚdatar;   Ú_r<   s                   r>   Ú_process_batchz"HistoricalProcessor._process_batchi   s  € ñ ØˆIð  "ÐÜ›ˆð 4@ò 	$Ñ/ˆD�$˜˜e ZÜ˜˜j¨$°dÐ*:Ð;Ô<Øð —m‘mØŸ™Ô(8Ñ8Ô<LÑLØØð $ó ˆGð ˜JÐ'ˆCØÐ.Ñ.à Ø"$ñ-Ð$ SÑ)ð
 ! Ñ% lÑ3×:Ñ:¸DÀ$ÈÐ;NÔOØ×Ñ˜dÕ#ð'	$ð, ˆØ+?×+EÑ+EÓ+Gò 	Ñ'Ñ!ˆW�j 4Ü˜j¨$¨v©,¸Ó@ˆGð #' |Ñ"4ò 6‘��4˜Ø×(Ñ(¨¨uÕ5ð6ð ×,Ñ,Ó.ˆEÚ˜Ð4Ñ5¸Ó9Ø×%Ñ%ØØØÐ*Ñ+Ø˜*Ñ%Ø˜(‘OØ˜(‘OØ˜(‘Oð'ô ð —<“<Ü—L‘LØ@ÀÀð M Ø $ V¡˜~¨[¸ÀÐ8Pð QØ$Ð%:Ñ;Ð<¸KðIõð+	ñ8 Ü# D§I¡I¬t°MÓ/BÔCáÜ" 4§9¡9¨nÔ=ä�MÓ"Ð"ó    N)Ú__name__Ú
__module__Ú__qualname__r?   rJ   © rK   r>   r   r      s   „ òNóbF#rK   r   )Ú__doc__r   ÚloggingÚcollectionsr   Úbaser   Údb.databaser   r	   r
   Úmodels.entradar   Úconfig.settingsr   r   Ú	getLoggerrL   r!   r   rO   rK   r>   ú<module>rX      sJ   ðñõ Û Ý #Ý ÷ñ õ
 %ß :à	ˆ×	Ñ	˜8Ó	$€ôX#˜-õ X#rK   