sidekiq-cronitor 3.1.0 → 3.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 826cb62a159a1c7f33af2cdabe5f56edfb2debaef6d73f9541f61106a8f77e0a
4
- data.tar.gz: e459ad13e7723388db7c4448c192edb426de1454a2b22a28ec3441917bc17fdc
3
+ metadata.gz: ceb0fb42649e7e03c7f125204eb12a315225acbf731d35e6c850e1a12730c6c9
4
+ data.tar.gz: 5534007db95190d63581020952e22a0f227231ac7917bbda63bcbdf619b4df8e
5
5
  SHA512:
6
- metadata.gz: b3f6e392551e1118f5db63a7057fa61b4aa0efb060fa9eb2b598f8afc6ad5c268e68c614dad8dfbf168b128a2139fae26fc6e5835754826f35dd6ea361c9e50a
7
- data.tar.gz: 58046cc6213e103480928fb4bcc908a5cdc3b4848881aeba4d54af956690f98081b66bf8e492127205e643a62a9396283dd7d0a6d1cf364698fe04c947b0d731
6
+ metadata.gz: 4542db6ff37a9b265b11a7b5e7197ea90502d2e1db8f4e71624ad155f5895456e10bf454688e544a4aa098e1d52f7df78fbde4b236d2656b6f13a5b07c127fd8
7
+ data.tar.gz: 35ec24c9f75bf7f69e5da4d4150377c5d8e9dcaf2e6aaed571b4199787df3b46af3e196611de4eae23d241fa3eeaaa06d0754a6199749d1174bdc61297b229b5
data/README.md CHANGED
@@ -40,7 +40,7 @@ Cronitor.environment = 'development' #default: 'production'
40
40
  ```
41
41
 
42
42
 
43
- To monitor jobs insert the server middleware (most people do this in the Sidekiq initializer)
43
+ Monitor jobs by registering `Sidekiq::Cronitor::ServerMiddleware` server [middleware](https://www.rubydoc.info/github/mperham/sidekiq/Sidekiq/Middleware) (most people do this in the Sidekiq initializer).
44
44
 
45
45
  ```ruby
46
46
  Sidekiq.configure_server do |config|
@@ -51,7 +51,7 @@ end
51
51
  ```
52
52
 
53
53
 
54
- When this job is invoked, Cronitor will send telemetry pings with a `key` matching the name of your job class (`MyJob` in the example below). If no monitor exists it will create one on the first event. You can configure rules at a later time via the Cronitor dashboard, API, or [YAML config](https://github.com/cronitorio/cronitor-ruby#configuring-monitors) file.
54
+ Once the server middleware is registered, Cronitor will send [telemetry events](https://cronitor.io/docs/teleme) with a `key` matching the name of your job class (`MyJob` in the example below). If no monitor exists it will create one on the first event. You can configure rules at a later time via the Cronitor dashboard, API, or [YAML config](https://github.com/cronitorio/cronitor-ruby#configuring-monitors) file.
55
55
 
56
56
  Optional: You can specify the monitor key directly using `sidekiq_options`:
57
57
 
@@ -65,7 +65,6 @@ class MyJob
65
65
  end
66
66
  ```
67
67
 
68
-
69
68
  To disable Cronitor for a specific job you can set the following option:
70
69
 
71
70
  ```ruby
@@ -78,22 +77,15 @@ class MyJob
78
77
  end
79
78
  ```
80
79
 
81
- ## Disabling For Some Jobs
82
- If you have an entire group or category of jobs you wish to disable monitoring on, it's easiest to create a base class with that option set and then have all your jobs inherit from that base class.
80
+ ## Periodic/Scheduled Jobs
81
+ If you are using Sidekiq Enterprise to run [Periodic Jobs](https://github.com/mperham/sidekiq/wiki/Ent-Periodic-Jobs) or are using the popular [sidekiq-scheduler](https://github.com/moove-it/sidekiq-scheduler) gem, you can sync the schedules of those jobs with a single command.
83
82
 
84
83
  ```ruby
85
- class UnmonitoredJob
86
- include Sidekiq::Job
87
- sidekiq_options cronitor_disabled: true
88
- end
89
-
90
- class NoInstrumentationJob < UnmonitoredJob
91
- def perform
92
- end
93
- end
84
+ Sidekiq::Cronitor::PeriodicJobs.sync_schedule!
85
+ # or
86
+ Sidekiq::Cronitor::SidekiqScheduler.sync_schedule!
94
87
  ```
95
88
 
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
89
 
98
90
  ## Development
99
91
 
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sidekiq::Cronitor
4
+ class PeriodicJobs
5
+ def self.sync_schedule!
6
+ monitors_payload = []
7
+ loops = Sidekiq::Periodic::LoopSet.new
8
+ loops.each do |lop|
9
+ job_key = lop.klass.sidekiq_options.fetch('cronitor_key', lop.klass.to_s)
10
+ next if lop.klass.sidekiq_options.fetch('cronitor_disabled', false)
11
+
12
+ monitors_payload << { key: job_key, schedule: lop.schedule, metadata: lop.options, platform: 'sidekiq', type: 'job' }
13
+ end
14
+
15
+ Cronitor::Monitor.put(monitors: monitors_payload)
16
+ rescue Cronitor::Error => e
17
+ Sidekiq.logger.error("[cronitor] error during #{name}.#{__method__}: #{e}")
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sidekiq::Cronitor
4
+ class SidekiqScheduler
5
+ def self.sync_schedule!
6
+ monitors_payload = []
7
+ # go through the scheduled jobs and find cron defined ones
8
+ Sidekiq.get_schedule.each do |_k, v|
9
+ # make sure the job has a cron or every definition, we skip non cron/every defined jobs for now
10
+ next unless (schedule = v['cron'] || v['every'])
11
+
12
+ # just in case an explicit job key has been set
13
+ job_klass = Object.const_get(v['class'])
14
+ job_key = job_klass.sidekiq_options.fetch('cronitor_key', v['class'])
15
+ next if job_klass.sidekiq_options.fetch('cronitor_disabled', false)
16
+
17
+ monitors_payload << { key: job_key.to_s, schedule: schedule, platform: 'sidekiq', type: 'job' }
18
+ end
19
+
20
+ Cronitor::Monitor.put(monitors: monitors_payload)
21
+ rescue Cronitor::Error => e
22
+ Sidekiq.logger.error("[cronitor] error during #{name}.#{__method__}: #{e}")
23
+ end
24
+ end
25
+ end
@@ -1,5 +1,5 @@
1
1
  module Sidekiq
2
2
  module Cronitor
3
- VERSION = '3.1.0'
3
+ VERSION = '3.3.0'
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.3.0
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-05-21 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: