sidekiq-cronitor 3.1.0 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 826cb62a159a1c7f33af2cdabe5f56edfb2debaef6d73f9541f61106a8f77e0a
4
- data.tar.gz: e459ad13e7723388db7c4448c192edb426de1454a2b22a28ec3441917bc17fdc
3
+ metadata.gz: 7fdd6b7a4900b0b4325bdecbb6774f71748e20d81aa44969b4687e6ee833e4b2
4
+ data.tar.gz: f61d0a3051c15d95d000273bca3b2f127e70d16a28e2769a19bf976a4e47f088
5
5
  SHA512:
6
- metadata.gz: b3f6e392551e1118f5db63a7057fa61b4aa0efb060fa9eb2b598f8afc6ad5c268e68c614dad8dfbf168b128a2139fae26fc6e5835754826f35dd6ea361c9e50a
7
- data.tar.gz: 58046cc6213e103480928fb4bcc908a5cdc3b4848881aeba4d54af956690f98081b66bf8e492127205e643a62a9396283dd7d0a6d1cf364698fe04c947b0d731
6
+ metadata.gz: 1f687f12236ef9af2041ff33a0ba5df7bdb378ee316ff84ce0c7ae298ab018a973ee168a88eadc07cc4a9d86a3d6ceca9d006a0a166c9f7e4d90462444e70720
7
+ data.tar.gz: b3d78f111182e36d322c1eaa41f7297b1bddcf286e8240780de2be6092ebd39c36ba9b708b4e013cde8fb8327c751f0a86e73d266951ea4978d5cd72e11c8f34
data/README.md CHANGED
@@ -95,6 +95,23 @@ If you have an entire group or category of jobs you wish to disable monitoring o
95
95
 
96
96
  Note: Do NOT set a cronitor_key option on your base class or all your inherited jobs will report under the same job in Cronitor.
97
97
 
98
+ ## Job Monitoring
99
+ If you are using Cronitor to monitor scheduled/periodic jobs and have jobs schedules already defined you can use rake tasks to upload the schedule to Cronitor for monitoring.
100
+
101
+ In your projects Rakefile you can load the task to be available to you in your project.
102
+ It might be a good idea to sync these schedules on every deploy
103
+
104
+ ```ruby
105
+ # your Rakefile, find the path to the gem
106
+ spec = Gem::Specification.find_by_name 'sidekiq-cronitor'
107
+ # if you are using sidekiq_scheduler this task should parse and upload the schedule.
108
+ load "#{spec.gem_dir}/lib/tasks/sidekiq_scheduler.rake"
109
+ # if you are using Sidekiq Pro Periodic Jobs this is an example script
110
+ # Note: this hasn't been tested on Sidekiq Pro yet
111
+ load "#{spec.gem_dir}/lib/tasks/periodic_jobs.rake"
112
+ # You only really need to load one of the rake files unless you are somehow running both systems
113
+ ```
114
+
98
115
  ## Development
99
116
 
100
117
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -0,0 +1,14 @@
1
+ module Sidekiq::Cronitor
2
+ class PeriodicJobs
3
+ def self.sync_schedule!
4
+ monitors_payload = []
5
+ loops = Sidekiq::Periodic::LoopSet.new
6
+ loops.each do |lop|
7
+ job_key = lop.klass.sidekiq_options.fetch("cronitor_key", nil) || lop.klass.to_s
8
+ cronitor_disabled = lop.klass.sidekiq_options.fetch("cronitor_disabled", false)
9
+ monitors_payload << {key: job_key, schedule: lop.schedule, metadata: lop.options, platform: 'sidekiq', type: 'job' } unless cronitor_disabled
10
+ end
11
+ Cronitor::Monitor.put(monitors: monitors_payload)
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,21 @@
1
+ module Sidekiq::Cronitor
2
+ class SidekiqScheduler
3
+ def self.sync_schedule!
4
+ monitors_payload = []
5
+ # go through the scheduled jobs and find cron defined ones
6
+ Sidekiq.get_schedule.each do |k, v|
7
+ # make sure the job has a cron or every definition, we skip non cron/every defined jobs for now
8
+ if !v["cron"].nil? || !v["every"].nil?
9
+ schedule = v["cron"] || v["every"]
10
+ # just in case an explicit job key has been set
11
+ job_klass = Object.const_get(v["class"])
12
+ job_key = job_klass.sidekiq_options.fetch("cronitor_key", nil) || v["class"]
13
+ # if monitoring for this job is turned off
14
+ cronitor_disabled = job_klass.sidekiq_options.fetch("cronitor_disabled", false)
15
+ monitors_payload << {key: job_key.to_s, schedule: schedule, platform: 'sidekiq', type: 'job' } unless cronitor_disabled
16
+ end
17
+ end
18
+ Cronitor::Monitor.put(monitors: monitors_payload)
19
+ end
20
+ end
21
+ end
@@ -1,5 +1,5 @@
1
1
  module Sidekiq
2
2
  module Cronitor
3
- VERSION = '3.1.0'
3
+ VERSION = '3.1.1'
4
4
  end
5
5
  end
@@ -3,6 +3,14 @@ require 'cronitor'
3
3
 
4
4
  require 'sidekiq/cronitor/version'
5
5
 
6
+ if defined? SidekiqScheduler
7
+ require 'sidekiq/cronitor/sidekiq_scheduler'
8
+ end
9
+
10
+ if defined? Sidekiq::Periodic
11
+ require 'sidekiq/cronitor/periodic_jobs'
12
+ end
13
+
6
14
  module Sidekiq::Cronitor
7
15
  class ServerMiddleware
8
16
  def call(worker, message, queue)
@@ -24,7 +32,7 @@ module Sidekiq::Cronitor
24
32
  end
25
33
 
26
34
  def cronitor_disabled?(worker)
27
- disabled = worker.class.sidekiq_options.fetch(:cronitor_disabled, nil)
35
+ disabled = worker.class.sidekiq_options.fetch("cronitor_disabled", nil)
28
36
  if disabled.nil?
29
37
  options(worker).fetch(:disabled, false)
30
38
  else
@@ -33,14 +41,14 @@ module Sidekiq::Cronitor
33
41
  end
34
42
 
35
43
  def job_key(worker)
36
- worker.class.sidekiq_options.fetch(:cronitor_key, nil) ||
44
+ worker.class.sidekiq_options.fetch("cronitor_key", nil) ||
37
45
  options(worker).fetch(:key, worker.class.name)
38
46
  end
39
47
 
40
48
  def options(worker)
41
49
  # eventually we will delete this method of passing options
42
50
  # ultimately we want all cronitor options to be top level keys
43
- opts = worker.class.sidekiq_options.fetch(:cronitor, {})
51
+ opts = worker.class.sidekiq_options.fetch("cronitor", {})
44
52
  # symbolize_keys is a rails helper, so only use it if it's defined
45
53
  opts = opts.symbolize_keys if opts.respond_to?(:symbolize_keys)
46
54
  opts
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-cronitor
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.0
4
+ version: 3.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zeke Gabrielse
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-04-04 00:00:00.000000000 Z
12
+ date: 2022-04-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sidekiq
@@ -107,6 +107,8 @@ files:
107
107
  - LICENSE
108
108
  - README.md
109
109
  - lib/sidekiq/cronitor.rb
110
+ - lib/sidekiq/cronitor/periodic_jobs.rb
111
+ - lib/sidekiq/cronitor/sidekiq_scheduler.rb
110
112
  - lib/sidekiq/cronitor/version.rb
111
113
  homepage: https://github.com/cronitor/sidekiq-cronitor
112
114
  licenses: