ó
    ¥ g¨  ã                   óž   • S r SSKJ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  SS
KJrJr  \R                   " \5      r " S S\5      rg)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                   ó    • \ rS rSrS rS rSrg)ÚHistoricalProcessoré   c                 ó   • U R                  5       (       d  g[        R                  S5         [        U R                  5      nU(       d  [        R                  S5        g0 nU Hm  u  p4pVnUR                  UR                  [        -  [        -  SSS9nX‡4n	X’;  a  / / US.X)'   X)   S   R                  XV45        X)   S	   R                  U5        Mo     / n
/ nUR                  5        HÚ  u  u  p‡n[        X|S
   U5      nUS    H  u  pVUR                  XV5        M     UR                  5       nU(       d  MO  US   S:”  d  MZ  U
R                  SX~S   US   US   US   US   45        UR                  US	   5        U R                  (       d  M§  [        R                  SU SU SUS    SUS    SUS    SUS    35        MÜ     U(       a  [!        U R                  U5        U
(       a  [#        U R                  U
5        [        R                  S[%        U
5       35        g! [&         a!  n[        R)                  SU 3SS9   SnAgSnAff = f)u1   
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                   Ú8/var/www/blue/EV-Temp_rev04/src/processors/historical.pyÚprocess_historical_dataÚ+HistoricalProcessor.process_historical_data   sƒ  € ð ×$Ñ$×&Ñ&Øä�‰Ð;Ô<ðF	ä7¸¿	¹	ÓBˆLÞÜ—‘ÐAÔBØð &(Ð"ã7CÑ3�˜D¨àŸ-™-Ø!ŸL™LÔ,<Ñ<Ô@PÑPØØ !ð (ð �ð Ð+�ØÓ4à&(Ø!Ø $ñ3Ð*Ñ/ð 'Ñ+¨LÑ9×@Ñ@À$ÀÔOØ&Ñ+¨EÑ2×9Ñ9¸$Ö?ñ# 8Dð( $&Ð Ø "Ðà0F×0LÑ0LÖ0NÑ,Ñ%� uÜ! *°F©m¸WÓE�ð $)¨Ô#6‘K�DØ×,Ñ,¨TÖ9ñ $7ð  ×0Ñ0Ó2�ß�5˜UÐ#8Ñ9¸AÕ=Ø(×/Ñ/Ø˜:Ð-=Ñ'>Ø˜jÑ)¨5°©?Ø˜h™¨¨x©ð1ô ð
 &×,Ñ,¨U°5©\Ô:à—|—|‘|ÜŸ™Ø'¨ y°
¸:¸,ð G+Ø+0Ð1FÑ+GÐ*Hð I)Ø).¨zÑ):Ð(;ð <(Ø(-¨h©Ð'8¸¸%À¹/Ð9JðLöñ% 1Oö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   ­1H" ÁCH" Ä7H" ÅA	H" ÆBH" È"
IÈ,IÉIc                 óx  • U(       d  / $ 0 n[        5       nU H~  u  pEpgn[        XXUSL/5      (       d  M  UR                  UR                  [        -  [        -  SSS9n	X˜4n
X¢;  a  U/ S.X*'   X*   S   R                  XFU45        UR                  U5        M€     / nUR                  5        H¾  u  u  p˜n[        XŒS   U	5      nUS    H  u  pænUR                  Xg5        M     UR                  5       nU(       d  MP  US   S:”  d  M[  UR                  SUUS   US	   US
   US   US   45        U R                  (       d  M•  [        R                  SU SUS    SU	S SUS    S3	5        MÀ     U(       a  [        U R                  [!        U5      5        U(       a  [#        U R                  U5        [!        U5      $ )uE   
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
   )r0   r1   Úperiodo_entrada_dictÚpending_marksr3   r   r4   r5   r6   r7   r8   Úprocessed_dataÚdatar<   Ú_r=   s                   r?   Ú_process_batchÚ"HistoricalProcessor._process_batchi   sý  € ö ØˆIð  "ÐÜ›ˆó 4@Ñ/ˆD˜ ZÜ˜¨$°dÐ*:Ð;×<Ñ<Ùð —m‘mØŸ™Ô(8Ñ8Ô<LÑLØØð $ð ˆGð Ð'ˆCØÓ.à Ø"$ñ-Ð$Ñ)ð
 !Ñ% lÑ3×:Ñ:¸DÈÐ;NÔOØ×Ñ˜dÖ#ñ' 4@ð, ˆØ+?×+EÑ+EÖ+GÑ'Ñ!ˆW 4Ü˜j¨v©,¸Ó@ˆGð #' |Ô"4‘�˜Ø×(Ñ(¨Ö5ñ #5ð ×,Ñ,Ó.ˆEßˆu˜Ð4Ñ5¸Õ9Ø×%Ñ%ØØØÐ*Ñ+Ø˜*Ñ%Ø˜(‘OØ˜(‘OØ˜(‘Oð'ô ð —<—<‘<Ü—L‘LØ@ÀÀð M Ø $ V¡˜~¨[¸ÀÐ8Pð QØ$Ð%:Ñ;Ð<¸KðIöñ+ ,Hö8 Ü# D§I¡I¬t°MÓ/BÔCæÜ" 4§9¡9¨nÔ=ä�MÓ"Ð"ó    © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r@   rL   Ú__static_attributes__rO   rN   r?   r   r      s   † òNõbF#rN   r   )Ú__doc__r   ÚloggingÚcollectionsr   Úbaser   Údb.databaser   r	   r
   Úmodels.entradar   Úconfig.settingsr   r   Ú	getLoggerrP   r"   r   rO   rN   r?   Ú<module>r]      sH   ðñõ Û Ý #Ý ÷ñ õ
 %ß :à	×	Ò	˜8Ó	$€ôX#˜-õ X#rN   