@@ -57,21 +57,23 @@ def enque! time = Time.now.utc
5757 nil
5858 end
5959
60- if klass_const
61- if defined? ( ActiveJob ::Base ) && klass_const < ActiveJob ::Base
62- enqueue_active_job ( klass_const )
63- else
64- enqueue_sidekiq_worker ( klass_const )
65- end
66- else
67- if @active_job
68- Sidekiq ::Client . push ( active_job_message )
60+ jid =
61+ if klass_const
62+ if defined? ( ActiveJob ::Base ) && klass_const < ActiveJob ::Base
63+ enqueue_active_job ( klass_const ) . try :provider_job_id
64+ else
65+ enqueue_sidekiq_worker ( klass_const )
66+ end
6967 else
70- Sidekiq ::Client . push ( sidekiq_worker_message )
68+ if @active_job
69+ Sidekiq ::Client . push ( active_job_message )
70+ else
71+ Sidekiq ::Client . push ( sidekiq_worker_message )
72+ end
7173 end
72- end
7374
7475 save_last_enqueue_time
76+ add_jid_history jid
7577 logger . debug { "enqueued #{ @name } : #{ @message } " }
7678 end
7779
@@ -83,14 +85,10 @@ def is_active_job?
8385
8486 def enqueue_active_job ( klass_const )
8587 klass_const . set ( queue : @queue ) . perform_later ( *@args )
86-
87- true
8888 end
8989
9090 def enqueue_sidekiq_worker ( klass_const )
9191 klass_const . set ( queue : queue_name_with_prefix ) . perform_async ( *@args )
92-
93- true
9492 end
9593
9694 # siodekiq worker message
@@ -350,6 +348,12 @@ def disabled?
350348 !enabled?
351349 end
352350
351+ def pretty_message
352+ JSON . pretty_generate Sidekiq . load_json ( message )
353+ rescue JSON ::ParserError
354+ message
355+ end
356+
353357 def status_from_redis
354358 out = "enabled"
355359 if fetch_missing_args
@@ -371,6 +375,18 @@ def last_enqueue_time_from_redis
371375 out
372376 end
373377
378+ def jid_history_from_redis
379+ out =
380+ Sidekiq . redis do |conn |
381+ conn . lrange ( jid_history_key , 0 , -1 ) rescue nil
382+ end
383+
384+ # returns nil if out nil
385+ out && out . map do |jid_history_raw |
386+ Sidekiq . load_json jid_history_raw
387+ end
388+ end
389+
374390 #export job data to hash
375391 def to_hash
376392 {
@@ -457,6 +473,20 @@ def save_last_enqueue_time
457473 end
458474 end
459475
476+ def add_jid_history ( jid )
477+ jid_history = {
478+ jid : jid ,
479+ enqueued : @last_enqueue_time
480+ }
481+ @history_size ||= ( Sidekiq . options [ :cron_history_size ] || 10 ) . to_i - 1
482+ Sidekiq . redis do |conn |
483+ conn . lpush jid_history_key ,
484+ Sidekiq . dump_json ( jid_history )
485+ # keep only last 10 entries in a fifo manner
486+ conn . ltrim jid_history_key , 0 , @history_size
487+ end
488+ end
489+
460490 # remove job from cron jobs by name
461491 # input:
462492 # first arg: name (string) - name of job (must be same - case sensitive)
@@ -468,6 +498,9 @@ def destroy
468498 #delete runned timestamps
469499 conn . del job_enqueued_key
470500
501+ # delete jid_history
502+ conn . del jid_history_key
503+
471504 #delete main job
472505 conn . del redis_key
473506 end
@@ -586,12 +619,20 @@ def self.job_enqueued_key name
586619 "cron_job:#{ name } :enqueued"
587620 end
588621
622+ def self . jid_history_key name
623+ "cron_job:#{ name } :jid_history"
624+ end
625+
589626 # Redis key for storing one cron job run times
590627 # (when poller added job to queue)
591628 def job_enqueued_key
592629 self . class . job_enqueued_key @name
593630 end
594631
632+ def jid_history_key
633+ self . class . jid_history_key @name
634+ end
635+
595636 # Give Hash
596637 # returns array for using it for redis.hmset
597638 def hash_to_redis hash
0 commit comments