
    R3i              	          U d dl mZ d dlmZ d dlmZmZ d dlmZ d dl	m
Z
 d dlmZmZ  ej                  d      Zej                   ed<   ej%                  d	d
d      Zej%                  ddd      Zej%                  ddd      Zej%                  ddd      Zej%                  ddd      Zej%                  ddd      Zej%                  ddd      Zej%                  ddd      Zej%                  ddd      Zej%                  ddd      Zej%                  dd d      Zej%                  d!d"d      Zej%                  d#d$d      ZejA                  d%d&d'      Z!ejA                  d(d)d'      Z"ejG                  d*d+d      Z$ej%                  d,d-d      Z%ejG                  d.d/d      Z&ejO                  d0d1d      Z(ejO                  d2d3d      Z)ejO                  d4d5d      Z*e+e,e,f   Z- G d6 d7ee-         Z. G d8 d9ee-         Z/ e.       Z0e.ed:<    e/       Z1e/ed;<   e	 dCd=e2d>e3d<z  d?ed@   fdA       Z4e	 dCd=e2d>e3d<z  d?ed@   fdB       Z5y<)D    )contextmanager)Thread)	Generatorcast)metrics)set_meter_provider)GetterSetterdocketmeterdocket_tasks_addedz"How many tasks added to the docket1)descriptionunitdocket_tasks_replacedz%How many tasks replaced on the docketdocket_tasks_scheduledz.How many tasks added or replaced on the docketdocket_tasks_cancelledz(How many tasks cancelled from the docketdocket_tasks_startedzHow many tasks starteddocket_tasks_redeliveredz@How many tasks started that were redelivered from another workerdocket_tasks_strickenz0How many tasks have been stricken from executingdocket_tasks_supersededzCHow many tasks were superseded by a newer schedule before executiondocket_tasks_completedz/How many tasks that have completed in any statedocket_tasks_failedzHow many tasks that have faileddocket_tasks_succeededz"How many tasks that have succeededdocket_tasks_retriedz%How many tasks that have been retrieddocket_tasks_perpetuatedz.How many tasks that have been self-perpetuateddocket_task_durationzHow long tasks take to completesdocket_task_punctualityz*How close a task was to its scheduled timedocket_tasks_runningz)How many tasks that are currently runningdocket_redis_disruptionsz6How many times the Redis connection has been disrupteddocket_strikes_in_effectz(How many strikes are currently in effectdocket_queue_depthz)How many tasks are due to be executed nowdocket_schedule_depthz9How many tasks are scheduled to be executed in the futuredocket_cache_sizezSize of internal docket cachesc                   B    e Zd Zdededee   dz  fdZdedee   fdZy)MessageGettercarrierkeyreturnNc                 j    |j                  |j                         d       }|y |j                         gS N)getencodedecode)selfr(   r)   vals       `/mnt/e/genesis-system/.venvs/voice-bridge/lib/python3.12/site-packages/docket/instrumentation.pyr-   zMessageGetter.get   s.    kk#**,-;

~    c                 d    |j                         D cg c]  }|j                          c}S c c}w r,   )keysr/   )r0   r(   r)   s      r2   r5   zMessageGetter.keys   s"    (/7

777s   -)__name__
__module____qualname__Messagestrlistr-   r5    r3   r2   r'   r'      s<    7  cT1A 8G 8S	 8r3   r'   c                   $    e Zd ZdedededdfdZy)MessageSetterr(   r)   valuer*   Nc                 F    |j                         ||j                         <   y r,   )r.   )r0   r(   r)   r?   s       r2   setzMessageSetter.set   s     !&

r3   )r6   r7   r8   r9   r:   rA   r<   r3   r2   r>   r>      s-    // / 	/
 
/r3   r>   message_gettermessage_setterNhostportr*   )NNNc              #      K   |d  y ddl m}m}  G d d|      } || |f|      }|5  t        |j                  d      j                          d  d d d        y # 1 sw Y   y xY ww)Nr   )BaseHTTPRequestHandler
HTTPServerc                   &    e Zd Zd ZdededdfdZy).healthcheck_server.<locals>.HealthcheckHandlerc                     | j                  d       | j                  dd       | j                          | j                  j	                  d       y )N   zContent-typez
text/plains   OK)send_responsesend_headerend_headerswfilewrite)r0   s    r2   do_GETz5healthcheck_server.<locals>.HealthcheckHandler.do_GET   s>    s#^\:JJU#r3   formatargsr*   Nc                      y r,   r<   )r0   rS   rT   s      r2   log_messagez:healthcheck_server.<locals>.HealthcheckHandler.log_message   s    r3   )r6   r7   r8   rR   r:   objectrV   r<   r3   r2   HealthcheckHandlerrJ      s!    	$	c 	& 	T 	r3   rX   Ttargetdaemon)http.serverrG   rH   r   serve_foreverstart)rD   rE   rG   rH   rX   servers         r2   healthcheck_serverr`      si      |>	3 	 t&89F	 f**48>>@  s   (A)*A	A)A&"A)c           
   #     K   |d  y dd l }ddlm} 	 ddlm} ddlm} |j                  dk\  rddl	m
} n|}dd	lm} dd
lm}	m}
m}m} t%         | |       g              || |t'        | ||            |	|
      }|5  t)        |j*                  d      j-                          d  d d d        y # t
        $ r}t        d      |d }~ww xY w# 1 sw Y   y xY ww)Nr   )Any)MeterProviderzXMetrics endpoint requires opentelemetry-sdk. Install with: pip install pydocket[metrics]   )PrometheusMetricReader)      )WSGIApplication)REGISTRY)ThreadingWSGIServer_SilentHandlermake_servermake_wsgi_app)metric_readers)registry)handler_classTrY   )systypingrb   opentelemetry.sdk.metricsrc   ImportError_prometheus_exporterre   version_infowsgiref.typesrh   prometheus_clientri   prometheus_client.expositionrj   rk   rl   rm   r   r   r   r]   r^   )rD   rE   rq   rb   rc   ere   rh   ri   rj   rk   rl   rm   r_   s                 r2   metrics_serverr{      s      |; = 7"1*  }5K5M4NOP_mX>?$F 
 f**48>>@ ?  :
 	> s@   CB6 A(C*C-	C6	C?CCCCC)z0.0.0.0N)6
contextlibr   	threadingr   rr   r   r   opentelemetryr   opentelemetry.metricsr   !opentelemetry.propagators.textmapr	   r
   	get_meterr   Meter__annotations__create_counterTASKS_ADDEDTASKS_REPLACEDTASKS_SCHEDULEDTASKS_CANCELLEDTASKS_STARTEDTASKS_REDELIVEREDTASKS_STRICKENTASKS_SUPERSEDEDTASKS_COMPLETEDTASKS_FAILEDTASKS_SUCCEEDEDTASKS_RETRIEDTASKS_PERPETUATEDcreate_histogramTASK_DURATIONTASK_PUNCTUALITYcreate_up_down_counterTASKS_RUNNINGREDIS_DISRUPTIONSSTRIKES_IN_EFFECTcreate_gaugeQUEUE_DEPTHSCHEDULE_DEPTH
CACHE_SIZEdictbytesr9   r'   r>   rB   rC   r:   intr`   r{   r<   r3   r2   <module>r      s   %  " ! 4 <(w((2w}} 2""4	 #  %%7	 &  &&@	 '  &&:	 '  $$(	 %  ((R	 )   %%B	 &  ''U	 (   &&A	 '  ##1	 $  &&4	 '  $$7	 %  ((@	 )   &&1	 '  ))<	 *   ,,;	 -  ((H	 )   00:	 1     ;	 ! 
 ##K	 $  0	   
 ue|
8F7O 8/F7O / !. / - / .2
!$t  6 .2.
.!$t. . .r3   