
    ]j                     l   d dl Z d dlmZ 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mZ d dlmZ d d	lmZ d
dlmZmZ 	 d dlZde j0                  j3                  dd      dd diZ eedu d       e	ddi       G d de                    Z eedud       G d de             Zy# e$ r dZY lw xY w)    N)skipIf)patch)User)TestCaseoverride_settings)Client)NoReverseMatchreverse)	get_queue)
get_worker   )access_selffailing_jobdefault
REDIS_HOST	localhosti  )HOSTPORTDBzprometheus_client is required
AUTOCOMMITT)RQc                   T    e Zd Zd Zd Z ede      d        Z ede      d        Zy)PrometheusTestc                 v   t         j                  j                  dd      | _        d| j                  _        d| j                  _        | j                  j                          t               | _        | j                  j                  | j                         t        d      j                  j                          y )Nfoopass)passwordTr   )r   objectscreate_useruseris_staff	is_activesaver   clientforce_loginr   
connectionflushallselfs    Q/root/env/lib/python3.12/site-packages/django_rq/tests/test_prometheus_metrics.pysetUpzPrometheusTest.setUp    sy    LL,,UV,D	!		"				h		*)''002    c                    | j                   j                  t        d            }| j                  |j                  d       | j                  |t        |j                  j                  d      j                                      y )N
rq_metrics   zutf-8)
r$   getr
   assertEqualstatus_codeassertLessEqualsetcontentdecode
splitlines)r)   linesresponses      r*   assertMetricsContainz#PrometheusTest.assertMetricsContain)   sa    ;;??7<#89--s33x''..w7BBDE	
r,   zdjango_rq.settings.QUEUESc                 *    | j                  h d       y )N>    # HELP rq_jobs RQ jobs by status,rq_jobs{queue="default",status="failed"} 0.0,rq_jobs{queue="default",status="queued"} 0.0-rq_jobs{queue="default",status="started"} 0.0.rq_jobs{queue="default",status="deferred"} 0.0.rq_jobs{queue="default",status="finished"} 0.0/rq_jobs{queue="default",status="scheduled"} 0.0)r:   r(   s    r*   test_metrics_defaultz#PrometheusTest.test_metrics_default0   s    !!
	
r,   c                    t        d      }|j                  t               t        d      D ]  }|j                  t                t        dd      }|j                          |j                  }d x|_        |_        	 | j                  h d       |j                  dd	       | j                  h d
       |j                  d       | j                  h d        |        y #  |        w xY w)Nr   
   test_worker)namec                       y )N rI   r,   r*   <lambda>z7PrometheusTest.test_metrics_with_jobs.<locals>.<lambda>K   s    r,   >   # HELP rq_workers RQ workers-rq_jobs{queue="default",status="queued"} 11.0.# HELP rq_job_failed_total RQ failed job count5# HELP rq_working_seconds_total RQ total working time6# HELP rq_job_successful_total RQ successful job count<rq_job_failed_total{name="test_worker",queues="default"} 0.0=rq_workers{name="test_worker",queues="default",state="?"} 1.0@rq_job_successful_total{name="test_worker",queues="default"} 0.0Arq_working_seconds_total{name="test_worker",queues="default"} 0.0r<   r=   r?   r@   rA   rB   T   )burstmax_jobs>   ,rq_jobs{queue="default",status="queued"} 7.0.rq_jobs{queue="default",status="finished"} 3.0@rq_job_successful_total{name="test_worker",queues="default"} 3.0,rq_jobs{queue="default",status="failed"} 1.0<rq_job_failed_total{name="test_worker",queues="default"} 1.0@rq_workers{name="test_worker",queues="default",state="idle"} 1.0)rU   >   /rq_jobs{queue="default",status="finished"} 10.0Arq_job_successful_total{name="test_worker",queues="default"} 10.0rZ   r>   r[   r\   )
r   enqueuer   ranger   r   register_birthregister_deathr:   work)r)   queue_workerrb   s        r*   test_metrics_with_jobsz%PrometheusTest.test_metrics_with_jobs>   s    )$k"r 	'AMM+&	' IM:  ..8DD 53	%%, KKdQK/%%	 KKdK#%%	 Ns   ?AC% %	C.N)	__name__
__module____qualname__r+   r:   r   	RQ_QUEUESrC   rg   rI   r,   r*   r   r      sF    3
 &	2
 3
 &	2A 3Ar,   r   zprometheus_client is installedc                       e Zd Zd Zy)NoPrometheusTestc                 n    | j                  t              5  t        d       d d d        y # 1 sw Y   y xY w)Nr.   )assertRaisesr	   r
   r(   s    r*   )test_no_metrics_without_prometheus_clientz:NoPrometheusTest.test_no_metrics_without_prometheus_client   s-    ~. 	"L!	" 	" 	"s   +4N)rh   ri   rj   rp   rI   r,   r*   rm   rm      s    "r,   rm   )osunittestr   unittest.mockr   django.contrib.auth.modelsr   django.testr   r   django.test.clientr   django.urlsr	   r
   	django_rqr   django_rq.workersr   fixturesr   r   prometheus_clientImportErrorenvironr0   rk   r   rm   rI   r,   r*   <module>r~      s    	   + 3 % /  ( .
 

|[9	 T!#BC|T*+aX a , DaH %'GH"x " I"g  s   B) )B32B3