
    $gQN                     .   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mZ d dlmZ d dlmZ d d	lm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m Z m!Z!m"Z"m#Z# d dl$m%Z% d dl&m'Z' ddl(m)Z)m*Z* ddl+m,Z,m-Z- ddl.m/Z/m0Z0m1Z1m2Z2 eed                         Z3d+dZ4eed                         Z5eed                         Z6eed                         Z7eed                         Z8eed                         Z9eed                         Z:eed                         Z;eed                         Z<eed                          Z=eed!                         Z>eed"                         Z?eed#                         Z@eed$                         ZAeed%                         ZBeed&                         ZCeed'                         ZDeed(                         ZEeeed)                                     ZFeed*                         ZGdS ),    )division)ceil)adminmessages)staff_member_required)Http404JsonResponse)redirectrender)reverse)never_cache)require_POST)ResponseError)requeue_job)NoSuchJobError)Job	JobStatus)DeferredJobRegistryFailedJobRegistryFinishedJobRegistryScheduledJobRegistryStartedJobRegistry)Worker)clean_worker_registry   )get_queue_by_indexget_scheduler_by_index)	API_TOKEN
QUEUES_MAP)get_jobsget_scheduler_statisticsget_statistics	stop_jobsc                     i t           j                            |           t          d          t	                      }t          | d|          S )NT)run_maintenance_taskszdjango_rq/stats.html)r   siteeach_contextr"   r!   r   )requestcontext_datas     O/var/www/html/netbox-4.1.3/venv/lib/python3.11/site-packages/django_rq/views.pystatsr+      sY    
*
!
!'
*
*
t
4
4
4 #
$
$L
 '1<@@@    Nc                     | j         j        s|r&|t          k    rt          t	                                S t          ddd          S )NTzEPlease configure API_TOKEN in settings.py before accessing this view.)errordescription)useris_staffr   r	   r"   )r(   tokens     r*   
stats_jsonr3   *   sR    | . .5I+=+=N,,---'noo  r,   c           	         t          |          }t          |          }d}|j        }t          | j                            dd                    }|dk    rQt          t          ||z                      }t          d|dz             }||dz
  z  }|                    ||          }	ng }	g }i t          j	        
                    |           |||	|||dd}
t          | d|
          S )Nd   pager   r   Queuedqueuequeue_indexjobsnum_jobsr6   
page_range
job_statusdjango_rq/jobs.html)intr   countGETgetr   ranger    r   r&   r'   r   )r(   r:   r9   items_per_pager<   r6   	last_pager=   offsetr;   r)   s              r*   r;   r;   3   s    k""K{++EN{Hw{vq))**D!||X67788	1i!m,,
4!8,~~fn55
	
*
!
!'
*
*	" 	 	 	L '0,???r,   c           	      @   t          |          }t          |          }t          |j        |j                  }d}t          |          }t          | j                            dd                    }g }|dk    rht          t          ||z                      }t          d|dz             }	||dz
  z  }
|
                    |
|
|z   dz
            }t          |||          }ng }	i t          j                            |           ||||||	dd}t          | d|          S )Nr5   r6   r   r   Finishedr8   r?   )r@   r   r   name
connectionlenrB   rC   r   rD   get_job_idsr    r   r&   r'   r   r(   r:   r9   registryrE   r<   r6   r;   rF   r=   rG   job_idsr)   s                r*   finished_jobsrQ   S   s9    k""K{++E"5:u/?@@HN8}}Hw{vq))**DD!||X67788	1i!m,,
4!8,&&vv/F/JKKw11 
	
*
!
!'
*
*	"  	 	 	L '0,???r,   c           	      @   t          |          }t          |          }t          |j        |j                  }d}t          |          }t          | j                            dd                    }g }|dk    rht          t          ||z                      }t          d|dz             }	||dz
  z  }
|
                    |
|
|z   dz
            }t          |||          }ng }	i t          j                            |           ||||||	dd}t          | d|          S )Nr5   r6   r   r   Failedr8   r?   )r@   r   r   rJ   rK   rL   rB   rC   r   rD   rM   r    r   r&   r'   r   rN   s                r*   failed_jobsrT   w   s9    k""K{++E U-=>>HN8}}Hw{vq))**DD!||X67788	1i!m,,
4!8,&&vv/F/JKKw11 
	
*
!
!'
*
*	" 	 	 	L '0,???r,   c           	      ~   t          |          }t          |          }t          |j        |j                  }d}t          |          }t          | j                            dd                    }g }|dk    rt          t          ||z                      }t          d|dz             }	||dz
  z  }
|
                    |
|
|z   dz
            }t          |||          }|D ]}|                    |          |_        ng }	i t          j                            |           ||||||	dd}t#          | d|          S )Nr5   r6   r   r   	Scheduledr8   r?   )r@   r   r   rJ   rK   rL   rB   rC   r   rD   rM   r    get_scheduled_timescheduled_atr   r&   r'   r   )r(   r:   r9   rO   rE   r<   r6   r;   rF   r=   rG   rP   jobr)   s                 r*   scheduled_jobsrZ      sg    k""K{++E#EJ0@AAHN8}}Hw{vq))**DD!||X67788	1i!m,,
4!8,&&vv/F/JKKw11 	@ 	@C'::3??C	@ 
	
*
!
!'
*
*	" !	 	 	L '0,???r,   c           	      @   t          |          }t          |          }t          |j        |j                  }d}t          |          }t          | j                            dd                    }g }|dk    rht          t          ||z                      }t          d|dz             }	||dz
  z  }
|
                    |
|
|z   dz
            }t          |||          }ng }	i t          j                            |           ||||||	dd}t          | d|          S )Nr5   r6   r   r   Startedr8   r?   )r@   r   r   rJ   rK   rL   rB   rC   r   rD   rM   r    r   r&   r'   r   rN   s                r*   started_jobsr]      s9    k""K{++E!%*e.>??HN8}}Hw{vq))**DD!||X67788	1i!m,,
4!8,&&vv/F/JKKw11 
	
*
!
!'
*
*	" 	 	 	L '0,???r,   c                    t          |          }t          |          t                     t          j        j                  }fd|D             }i t          j                            |           ||d}t          | d|          S )Nc                 J    g | ]}j         |                                v | S  )rJ   queue_names).0workerr9   s     r*   
<listcomp>zworkers.<locals>.<listcomp>   s1    VVV&5:ASASAUAU3U3Uv3U3U3Ur,   )r9   r:   workerszdjango_rq/workers.html)
r@   r   r   r   allrK   r   r&   r'   r   )r(   r:   all_workersre   r)   r9   s        @r*   re   re      s     k""K{++E%   *U-..KVVVVKVVVG
*
!
!'
*
*"	  L '3\BBBr,   c                    t          |          }t          |          }t          j        ||j                  }|j        dz  |_        d                    |                                          }i t          j	        
                    |           |||||                                |j        dz  d}t          | d|          S )NrK   i  z, )r9   r:   rc   ra   rY   total_working_timezdjango_rq/worker_details.html)r@   r   r   find_by_keyrK   rj   joinra   r   r&   r'   get_current_jobr   )r(   r:   keyr9   rc   ra   r)   s          r*   worker_detailsro      s     k""K{++E0@AAAF & 9D @F))F..0011K
*
!
!'
*
*""%%''$7$>  L ':LIIIr,   c           	         t          |          }t          |          }t          |j        |j                  }d}t          |          }t          | j                            dd                    }g }|dk    rt          t          ||z                      }t          d|dz             }	||dz
  z  }
|
                    |
|
|z   dz
            }|D ]G}	 |                    t          j        ||j        |j                             8# t          $ r Y Dw xY wng }	i t           j                            |           ||||||	dd}t'          | d|          S )	Nr5   r6   r   r   rK   
serializerDeferredr8   r?   )r@   r   r   rJ   rK   rL   rB   rC   r   rD   rM   appendr   fetchrr   r   r   r&   r'   r   )r(   r:   r9   rO   rE   r<   r6   r;   rF   r=   rG   rP   job_idr)   s                 r*   deferred_jobsrw     s    k""K{++E"5:u/?@@HN8}}Hw{vq))**DD!||X67788	1i!m,,
4!8,&&vv/F/JKK 	 	FCIf9IV[Vfggghhhh!   	 
	
*
!
!'
*
*	"  	 	 	L '0,???s   4D


DDc                 $   t          |          }t          |          }	 t          j        ||j        |j                  }n # t          $ r t          d|z            w xY w	 |j         d}n	#  d}Y nxY w|j        	                    |j
        d          }||j                            |          |_        	 |j        }n# t          $ r d }Y nw xY wi t          j                            |           |||j        |||d}t'          | d|          S )Nrq   z"Couldn't find job with this ID: %sTFresult)r:   rY   dependency_idr9   data_is_validexc_infozdjango_rq/job_detail.html)r@   r   r   ru   rK   rr   r   r   	func_namehgetrn   loadslegacy_result	_exc_infoAttributeErrorr   r&   r'   _dependency_idr   )	r(   r:   rv   r9   rY   r{   rvr|   r)   s	            r*   
job_detailr   8  s\    k""K{++EEi5+;HXYYY E E E:VCDDDE 
		SWh	/	/B	~N0044=   
*
!
!'
*
*"+&  L '6EEEs)   !A A#	A- -A38C   CCc                    t          |          }t          |          }t          j        ||j        |j                  }| j        dk    rg|j                            |j        d|j	                   |
                                 t          j        | d|j	        z             t          d|          S i t          j                            |           |||d}t#          | d|          S )Nrq   POSTr   z You have successfully deleted %srq_jobsr:   rY   r9   django_rq/delete_job.html)r@   r   r   ru   rK   rr   methodlremrn   iddeleter   infor
   r   r&   r'   r   r(   r:   rv   r9   rY   r)   s         r*   
delete_jobr   _  s     k""K{++E
)Fu'7EDT
U
U
UC~eiCF333

gACFJKKK	;///
*
!
!'
*
*"	  L '6EEEr,   c                    t          |          }t          |          }t          j        ||j        |j                  }| j        dk    rJt          ||j        |j                   t          j	        | d|j
        z             t          d||          S i t          j                            |           |||d}t          | d|          S )Nrq   r   z!You have successfully requeued %srq_job_detailr   r   )r@   r   r   ru   rK   rr   r   r   r   r   r   r
   r   r&   r'   r   r   s         r*   requeue_job_viewr   v  s     k""K{++E
)Fu'7EDT
U
U
UC~Fu'7EDTUUUUgBSVKLLLf===
*
!
!'
*
*"	  L '6EEEr,   c                    t          |          }t          |          }| j        dk    r{	 |                                 t	          j        | d|j        z             n8# t          $ r+}d|j        v rt	          j	        | d           n|Y d }~nd }~ww xY wt          d|          S i t          j                            |           ||d}t          | d|          S )Nr   z*You have successfully cleared the queue %sEVALSHAzbThis action is not supported on Redis versions < 2.6.0, please use the bulk delete command insteadr   )r:   r9   zdjango_rq/clear_queue.html)r@   r   r   emptyr   r   rJ   r   messager.   r
   r   r&   r'   r   )r(   r:   r9   er)   s        r*   clear_queuer     s"    k""K{++E~
	KKMMMM'#ORWR\#\]]]] 	 	 	AI%%x   
     	 	;///
*
!
!'
*
*"  L
 '7FFFs   1A 
B'!BBc                    t          |          }t          |          }t          |          }| j        dk    ru|                                }d}|D ]4}	 t          ||j        |j                   |dz  }%# t          $ r Y 1w xY wt          j
        | d|z             t          d|          S i t          j                            |           ||t          |          d}t!          | d	|          S )
Nr9   r   r   rq   r   z'You have successfully requeued %d jobs!r   r:   r9   
total_jobszdjango_rq/requeue_all.html)r@   r   r   r   rM   r   rK   rr   r   r   r   r
   r   r&   r'   rL   r   )r(   r:   r9   rO   rP   rA   rv   r)   s           r*   requeue_allr     s'    k""K{++E u---H~&&(( 	 	FFu/?EL\]]]]
!    	gH5PQQQ	;///
*
!
!'
*
*"(mm	  L '7FFFs   !A77
BBc                    t          |          }t          |          }t          |          }| j        dk    rx|                                }t          j        ||j                  }d}|D ]}|r|                                 |dz  }t          j
        | d|z             t          d          S i t          j                            |           ||t          |          d}t!          | d	|          S )
Nr   r   ri   r   r   z&You have successfully deleted %d jobs!rq_homer   z!django_rq/clear_failed_queue.html)r@   r   r   r   rM   r   
fetch_manyrK   r   r   r   r
   r   r&   r'   rL   r   )	r(   r:   r9   rO   rP   r;   rA   rY   r)   s	            r*   delete_failed_jobsr     s    k""K{++E u---H~&&((~g%2BCCC 	 	C 


gG%OPPP	"""
*
!
!'
*
*"(mm	  L '>MMMr,   c                    t          |          }t          |          }| j                            d          pt	          d|g          }| j        dk    r| j                            dd          rx| j                            dd          r]i t          j        	                    |           || j        d         | j        
                    d          ||d}t          | d	|          S t          |          S )
NHTTP_REFERERr   argsr   actionF_selected_action)r:   r   rP   r9   next_urlzdjango_rq/confirm_action.html)r@   r   METArC   r   r   r   r   r&   r'   getlistr   r
   )r(   r:   r9   r   r)   s        r*   confirm_actionr     s     k""K{++E|//Y79K=3Y3Y3YH~GL$4$4Xu$E$E<.66 		R*))'22*!,x0"<//0BCC$  L '#BLQQQHr,   c                 v   t          |          }t          |          }| j                            d          pt	          d|g          }| j        dk    r| j                            dd          r| j                            dd          r| j                            d          }| j        d         dk    r|D ]]}t          j        ||j	        |j
        	          }|j	                            |j        d
|j                   |                                 ^t          j        | dt#          |          z             n| j        d         dk    rG|D ]}t%          ||j	        |j
        	           t          j        | dt#          |          z             n| j        d         dk    rt'          ||          \  }}t#          |          d
k    r%t          j        | dt#          |          z             t#          |          d
k    r%t          j        | dt#          |          z             t+          |          S )Nr   r   r   r   r   FrP   r   rq   r   z&You have successfully deleted %s jobs!requeuez(You have successfully requeued %d  jobs!stopz&You have successfully stopped %d jobs!z%d jobs failed to stop!)r@   r   r   rC   r   r   r   r   ru   rK   rr   r   rn   r   r   r   r   rL   r   r#   r.   r
   )	r(   r:   r9   r   rP   rv   rY   stoppedfailed_to_stops	            r*   actionsr     s+    k""K{++E|
++Uwy}/U/U/UH~GL$4$4Xu$E$E<Iu-- 	]l**955G|H%11% ! !F)Fu7GTYTdeeeC$))%)Q???JJLLLLg'ORUV]R^R^'^____h'944% b bF53CPUP`aaaaag'QTWX_T`T`'`aaaah'611*3E7*C*C'w<<??M'+SVYZaVbVb+bccc~&&))N7,ENH[H[,[\\\Hr,   c                    t          |          }t          |          }t          j        ||j        |j                  }| j        dk    r_	 |                    |           n%# t          $ r |	                    |           Y nw xY w|
                                t          j        k    r0t          |j        |j                  }|                    |           n|
                                t          j        k    r0t#          |j        |j                  }|                    |           nQ|
                                t          j        k    r/t'          |j        |j                  }|                    |           t)          j        | d|j        z             t/          d||          S i t0          j                            |           |||d}t7          | d|          S )zEnqueue deferred jobsrq   r   z!You have successfully enqueued %sr   r   r   )r@   r   r   ru   rK   rr   r   _enqueue_jobr   enqueue_job
get_statusr   DEFERREDr   rJ   removeFINISHEDr   	SCHEDULEDr   r   r   r   r
   r   r&   r'   r   )r(   r:   rv   r9   rY   rO   r)   s          r*   r   r     s    k""K{++E
)Fu'7EDT
U
U
UC~	# s#### 	# 	# 	#c"""""	# >>y111*5:u7GHHHOOC    ^^!333*5:u7GHHHOOC    ^^!444+EJ8HIIHOOC   gBSVKLLLf===
*
!
!'
*
*"	  L '6EEEs   A# #BBc                 .   t          |          }t          |          }t          ||          \  }}t          |          dk    r)t	          j        | d|z             t          d||          S t	          j        | d|z             t          d||          S )zStop started jobr   z You have successfully stopped %sr   zFailed to stop %s)r@   r   r#   rL   r   r   r
   r.   )r(   r:   rv   r9   r   _s         r*   stop_jobr   B  s    
 k""K{++E5&))JGQ
7||qgAFJKKKf===w 3f <===f===r,   c                 ,   t          |          }d}|                                }t          | j                            dd                    }g }|dk    rt          t          ||z                      }t          d|dz             }||dz
  z  }	|                    d|	|          }
|
D ]\  }}||_        t          j        |j
        d          |_        d|j        v rd|j        d          d	|_        nMd
|j        v r=d|j        d
          |_        d|j        v r|xj        d|j        d          z  c_        nd|_        |                    |           ng }i t          j                            |           |||||d}t%          | d|          S )Nr5   r6   r   r   T)
with_timesrG   lengthcron_stringzcron: ''intervalz
interval: repeatz	 repeat: unknown)	schedulerr;   r<   r6   r=   zdjango_rq/scheduler.html)r   rA   r@   rB   rC   r   rD   r    next_runr   originr:   metaschedulert   r   r&   r'   r   )r(   scheduler_indexr   rE   r<   r6   r;   rF   r=   rG   
jobs_timesrY   timer)   s                 r*   scheduler_jobsr   R  s    '77IN  Hw{vq))**DD!||X67788	1i!m,,
4!8,''4~'^^
# 	 	ICCL(nSZ;;CO((C-)@CCCsx''BCHZ,@BBsx''LL$D0B$D$DDLL(KK	 

*
!
!'
*
*   L '5|DDDr,   )N)H
__future__r   mathr   django.contribr   r   %django.contrib.admin.views.decoratorsr   django.httpr   r	   django.shortcutsr
   r   django.urlsr   django.views.decorators.cacher   django.views.decorators.httpr   redis.exceptionsr   rqr   rq.exceptionsr   rq.jobr   r   rq.registryr   r   r   r   r   	rq.workerr   rq.worker_registrationr   queuesr   r   settingsr   r   utilsr    r!   r"   r#   r+   r3   r;   rQ   rT   rZ   r]   re   ro   rw   r   r   r   r   r   r   r   r   r   r   r   r`   r,   r*   <module>r      s#               * * * * * * * * G G G G G G - - - - - - - - - - - - - - - -       5 5 5 5 5 5 5 5 5 5 5 5 * * * * * *       ( ( ( ( ( ( ! ! ! ! ! ! ! !                    8 8 8 8 8 8 > > > > > > > > + + + + + + + + P P P P P P P P P P P P A A  A    @ @  @< @ @  @D @ @  @D "@ "@  "@J @ @  @D C C  C  J J  J* $@ $@  $@N "F "F  "FJ F F  F* F F  F& G G  G4 G G  G: N N  N6    *    > "F "F  "FJ 
> 
>   
> $E $E  $E $E $Er,   