ó
    ø3ÂjÈ  ã                   óÎ   • S r SSKJrJrJr  SSKJr  SSKJr  SSKrSSK	J
r
  SSKJr  S\S	\S
\4S jrS
\4S jrS
\4S jrSS\S\/ S4   S\S
\/ S4   4S jjrSS\S
\4S jjrg)uX  Ãœtemezett feladatok segÃ©dei: EGYSZERI FUTÃ�S biztosÃ­tÃ¡sa tÃ¶bb gunicorn worker mellett.

TÃ–RTÃ‰NET / MIÃ‰RT KÃ‰SZÃœLT (2026-10-04, e-mail rendszer B szelet)
    Az Ã©les szerver 3 gunicorn workerrel fut. A main.py modulszinten indÃ­tja az APScheduler-t,
    ezÃ©rt MINDEN worker elindÃ­tja a sajÃ¡t Ã¼temezÅ‘jÃ©t - a napi riport (06:00) Ã©s a korlÃ¡tozott gÃ©pek
    ellenÅ‘rzÃ©se (06:05) Ã­gy akÃ¡r 3-szor is lefuthatott, Ã©s ugyanaz a levÃ©l 3-szor ment ki.

HOGYAN OLDJUK MEG?
    Minden futÃ¡s elÅ‘tt a feladat megprÃ³bÃ¡l beszÃºrni egy (feladat, kulcs) pÃ¡rt az
    `utemezett_futasok` tÃ¡blÃ¡ba (models.UtemezettFutas). A pÃ¡r egyedi, ezÃ©rt az adatbÃ¡zis
    pontosan EGY workernek engedi a beszÃºrÃ¡st - a tÃ¶bbi IntegrityError-t kap Ã©s kihagyja a futÃ¡st.
        - napi feladatnÃ¡l a kulcs a helyi dÃ¡tum   ("2026-10-05"),
        - percenkÃ©nti feladatnÃ¡l az UTC perc         ("2026-10-05T04:01").
    ElÅ‘nyÃ¶k a fÃ¡jlzÃ¡rral szemben: mÅ±kÃ¶dik Windows-on (fejlesztÃ©s) Ã©s Linuxon is, nem akad meg, ha
    egy worker Ã¶sszeomlik, Ã©s nincs szÃ¼ksÃ©g kÃ¼lsÅ‘ szolgÃ¡ltatÃ¡sra (Redis).

MIT NE TEGYÃ‰L?
    - Ne hÃ­vd kÃ¶zvetlenÃ¼l a vÃ©dett feladatot az Ã¼temezÅ‘bÅ‘l: hasznÃ¡ld a `vedett()` burkolÃ³t.
    - A kÃ©zi indÃ­tÃ¡s (pl. /teszt-riport) NEM megy Ã¡t a vÃ©delmen - az szÃ¡ndÃ©kosan azonnal fut.

RÃ©szletes leÃ­rÃ¡s: docs/EMAIL_RENDSZER.md
é    )ÚdatetimeÚ	timedeltaÚtimezone)ÚCallable)ÚIntegrityErrorN)ÚSessionLocal)ÚHELYI_TZÚfeladatÚkulcsÚreturnc                 óä  • [        5       n UR                  [        R                  " XS95        UR	                  5          UR                  5         g! [         a#    UR                  5          UR                  5         g[         aT  nUR                  5         [        SU  SU S[        U5      R                   SU 35         SnAUR                  5         gSnAff = f! UR                  5         f = f)	u"  Igaz, ha EZ a folyamat nyerte meg a (feladat, kulcs) futÃ¡st, Ã©s tehÃ¡t le kell futtatnia.
Hamis, ha egy mÃ¡sik folyamat mÃ¡r lefoglalta, VAGY ha az adatbÃ¡zis hibÃ¡t adott (utÃ³bbi esetben
inkÃ¡bb kihagyjuk a futÃ¡st, mintsem hogy tÃ¶bbszÃ¶rÃ¶sen fusson - a hibÃ¡t a konzolra naplÃ³zzuk).)r
   r   TFu%   â�Œ Ãœtemezett futÃ¡s-vÃ©delem hiba (Ú/z): ú: N)r   ÚaddÚmodelsÚUtemezettFutasÚcommitÚcloser   ÚrollbackÚ	ExceptionÚprintÚtypeÚ__name__)r
   r   ÚdbÚes       Ú!/var/www/website/utemezo_utils.pyÚegyszeri_futasr   !   sÂ   € ô 
‹€BðØ
�‰Œv×$Ò$¨WÑBÔCØ
�	‰	ŒØð 	�‰�
øô ó Ø
�‰ŒØð 	�‰�
ô ó Ø
�‰ŒÜÐ5°g°Y¸aÀ¸wÀcÌ$ÈqË'×JZÑJZÐI[Ð[]Ð^_Ð]`ÐaÔbÛà
�‰�
ûðûð
 	�‰�
ús5   Œ3A ÁCÁ+C Á=	CÂ:CÃ C ÃCÃC ÃC/c                  óT   • [         R                  " [        5      R                  S5      $ )Nz%Y-%m-%d)r   Únowr	   Ústrftime© ó    r   Ú_napi_kulcsr#   5   s   € Ü�<Š<œÓ!×*Ñ*¨:Ó6Ð6r"   c                  óh   • [         R                  " [        R                  5      R	                  S5      $ )Nz%Y-%m-%dT%H:%M)r   r   r   Úutcr    r!   r"   r   Ú_perc_kulcsr&   9   s#   € ô �<Š<œŸ™Ó%×.Ñ.Ð/?Ó@Ð@r"   ÚfuggvenyÚpercenkentic                 ó0   ^ ^^• U UU4S jnST  3Ul         U$ )už   Becsomagolja az Ã¼temezett fÃ¼ggvÃ©nyt: csak akkor hÃ­vja meg, ha ez a folyamat nyerte a
futÃ¡st. `percenkenti=True` esetÃ©n a kulcs a perc, kÃ¼lÃ¶nben a nap.c                  ón   >• T(       a
  [        5       O	[        5       n [        TU 5      (       a  T" 5         g g )N)r&   r#   r   )r   r
   r'   r(   s    €€€r   Ú_burkoloÚvedett.<locals>._burkoloC   s'   ø€ Þ!,””´+³-ˆÜ˜' 5×)Ñ)Ù�Jð *r"   Úvedett_)r   )r
   r'   r(   r+   s   ``` r   Úvedettr.   @   s   ú€ ÷ð " ' Ð+€HÔØ€Or"   Úmegtartas_napc                 ó`  • [        5       n [        R                  " [        R                  5      R                  SS9[        U S9-
  nUR                  [        R                  5      R                  [        R                  R                  U:  5      R                  5       nUR                  5         UUR                  5         $ ! [         aN  nUR!                  5         [#        S[%        U5      R&                   SU 35         SnAUR                  5         gSnAff = f! UR                  5         f = f)uƒ   TÃ¶rli a rÃ©gi futÃ¡s-bejegyzÃ©seket (naponta egyszer hÃ­vjuk az email_sor.takaritas-bÃ³l).
VisszatÃ©rÃ©s: a tÃ¶rÃ¶lt sorok szÃ¡ma.N)Útzinfo)Údaysu<   â�Œ Ãœtemezett futÃ¡s-bejegyzÃ©sek takarÃ­tÃ¡sa sikertelen: r   r   )r   r   r   r   r%   Úreplacer   Úqueryr   r   ÚfilterÚ	futott_atÚdeleter   r   r   r   r   r   r   )r/   r   ÚhatarÚtoroltr   s        r   Ú	takaritasr:   K   sä   € ô 
‹€Bð
Ü—’œXŸ\™\Ó*×2Ñ2¸$Ð2Ð?Ä)ÐQ^ÑB_Ñ_ˆØ—‘œ&×/Ñ/Ó0×7Ñ7¼×8MÑ8M×8WÑ8WÐZ_Ñ8_Ó`×gÑgÓiˆØ
�	‰	ŒØð 	�‰�
øô ó Ø
�‰ŒÜÐLÌTÐRSËW×M]ÑM]ÐL^Ð^`ÐabÐ`cÐdÔeÛà
�‰�
ûðûð
 	�‰�
ús*   ŒB#C  Ã 
DÃ
4DÃ>D ÄDÄD ÄD-)F)é   )Ú__doc__r   r   r   Útypingr   Úsqlalchemy.excr   r   Údatabaser   Útemplates_envr	   ÚstrÚboolr   r#   r&   r.   Úintr:   r!   r"   r   Ú<module>rD      sŸ   ðñ÷, 3Ñ 2Ý å )ã Ý !Ý "ð˜Cð ¨ð °ô ð(7�Sô 7ðA�Sô Añ�Cð  8¨B°¨HÑ#5ð ÀDð ÐU]Ð^`ÐbfÐ^fÑUgõ ñ˜Sð ¨ö r"   