sidekiq-cronitor 1.0.0.alpha2 → 2.0.0

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
- SHA1:
3
- metadata.gz: d7a312993ccafb8425bb94bfff6deec07241ff5e
4
- data.tar.gz: 96bba8e59b67eafaf8dda5e42a2b5c4804e41344
2
+ SHA256:
3
+ metadata.gz: 77c9e01c256be04515fbd21f7e467fb28e632a37f94d639847c6af8ad6e9823b
4
+ data.tar.gz: 2c78645ae3fb16b98b52777b3b3124aaa76e6860fc606bee2bc2ab8696275663
5
5
  SHA512:
6
- metadata.gz: 65f500c417e836ee253b45c156dcf4fe39ab6e9103d892378e7a0bce8c74f5d1811d0b9359d3a1d953dc8ee32204ae0902a93c2f101c671f690d34e678379253
7
- data.tar.gz: 59b58af7800b9a659b0b59f57c3972b50cfcd64459c2975c75728aa745b405a69fbf6f5fe92f1b02041752b1eaf6cc3010b0a5ec8b1f7d6880139404c4aa8b89
6
+ metadata.gz: 70c63ea8977ac11afe3991a1290950ed1deaa95c0147e8434fc3d0cf0fd4ed965d6d31354b150ae74e505497d7a5499023ea93f41a7eeca14fdddefc2a38a2c7
7
+ data.tar.gz: 6474a1e11df5373147b252fe327373e084f34abb60b6708f99c81df6b1c6d37643642228f1651fca7ddc4d9c0b988abec2f6a045f949f3e0a8e07dd5cc953b30
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2017 Samuel Cochran
3
+ Copyright (c) 2020 Cronitor.io
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -7,21 +7,23 @@ Call a [Cronitor](https://cronitor.io) around your [Sidekiq](https://sidekiq.org
7
7
  Add sidekiq-cronitor your application's Gemfile, near sidekiq:
8
8
 
9
9
  ```ruby
10
- gem "sidekiq"
11
- gem "sidekiq-cronitor"
10
+ gem 'sidekiq'
11
+ gem 'sidekiq-cronitor'
12
12
  ```
13
13
 
14
14
  And then bundle:
15
15
 
16
- $ bundle
16
+ ```
17
+ bundle
18
+ ```
17
19
 
18
20
  ## Usage
19
21
 
20
- Make sure you've got a Cronitor [API Key](https://cronitor.io/docs/api-overview) from [your settings](https://cronitor.io/settings) in your ENV as `$CRONITOR_TOKEN` before starting Sidekiq:
22
+ Make sure you've got a Cronitor [API Key](https://cronitor.io/docs/api-overview) from [your settings](https://cronitor.io/settings) in your ENV as `CRONITOR_API_KEY` before starting Sidekiq:
21
23
 
22
24
  ```sh
23
- export CRONITOR_TOKEN="abcdef1234567890abcdef1234567890"
24
- sidekiq
25
+ export CRONITOR_API_KEY='abcdef1234567890abcdef1234567890'
26
+ bundle exec sidekiq
25
27
  ```
26
28
 
27
29
  Any sidekiq worker you'd like to monitor just includes `Sidekiq::Cronitor` right after `Sidekiq::Worker`:
@@ -37,53 +39,16 @@ class MyWorker
37
39
  end
38
40
  ```
39
41
 
40
- By default this will look for an existing monitor named after your worker, `MyWorker` in the case above, and pings that. Otherwise it will try to create a new monitor with the name.
41
-
42
- To use a monitor you've already created you can also configure a code directly:
43
-
44
- ```ruby
45
- class MyWorker
46
- include Sidekiq::Worker
47
- include Sidekiq::Cronitor
48
-
49
- sidekiq_options cronitor: {code: "abc123"}
50
-
51
- def perform
52
- # ...
53
- end
54
- end
55
- ```
56
-
57
- To use a different name or customise how a missing monitor will be created you can use a sidekiq option named `cronitor`:
58
-
59
- ```ruby
60
- class MyWorker
61
- include Sidekiq::Worker
62
- include Sidekiq::Cronitor
63
-
64
- sidekiq_options cronitor: {
65
- name: "Some Monitor",
66
- rules: [{rule_type: "ran_longer_than", value: 60, time_unit: "seconds"}]
67
- }
68
-
69
- def perform
70
- # ...
71
- end
72
- end
73
- ```
74
-
75
- For more information on what rules you can use take a look at the [Cronitor Monitors API docs](https://cronitor.io/docs/monitor-api).
76
-
77
- If you're using [sidekiq-cron](https://github.com/ondrejbartas/sidekiq-cron) the missing monitor will have a default `not_on_schedule` rule based on the cron schedule matched by you worker class.
42
+ By default this will look for an existing monitor named after your worker, `MyWorker` in the case above, and pings that. Otherwise it will try to create a new monitor with the worker's name, which you can configure rules for at a later time via your Cronitor dashboard.
78
43
 
79
- You can also just supply a Cronitor instance to use directly:
44
+ To use a monitor you've already created, you can configure the monitor's `key` directly:
80
45
 
81
46
  ```ruby
82
47
  class MyWorker
83
48
  include Sidekiq::Worker
84
49
  include Sidekiq::Cronitor
85
50
 
86
- sidekiq_options cronitor: Cronitor.new(...)
51
+ sidekiq_options cronitor: { key: 'abc123' }
87
52
 
88
53
  def perform
89
54
  # ...
@@ -99,7 +64,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
99
64
 
100
65
  ## Contributing
101
66
 
102
- Bug reports and pull requests are welcome on GitHub at https://github.com/sj26/sidekiq-cronitor. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
67
+ Bug reports and pull requests are welcome on GitHub at https://github.com/cronitorio/cronitor-sidekiq/pulls. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
103
68
 
104
69
  ## License
105
70
 
@@ -1,25 +1,20 @@
1
- require "sidekiq"
2
- require "cronitor"
1
+ require 'sidekiq'
2
+ require 'cronitor'
3
3
 
4
- require "sidekiq/cronitor/version"
4
+ require 'sidekiq/cronitor/version'
5
5
 
6
6
  module Sidekiq::Cronitor
7
7
  def self.included(base)
8
- unless base.ancestors.include? Sidekiq::Worker
9
- raise ArgumentError, "Sidekiq::Cronitor can only be included in a Sidekiq::Worker"
8
+ unless base.ancestors.include?(Sidekiq::Worker)
9
+ raise ArgumentError, 'Sidekiq::Cronitor can only be included in a Sidekiq::Worker'
10
10
  end
11
11
 
12
12
  base.extend(ClassMethods)
13
13
 
14
14
  # Automatically add sidekiq middleware when we're first included
15
- #
16
- # This might only occur when the worker class is first loaded in a
17
- # development rails environment, but that happens before the middleware
18
- # chain is invoked so we're all good.
19
- #
20
15
  Sidekiq.configure_server do |config|
21
- unless config.server_middleware.exists? Sidekiq::Cronitor::Middleware
22
- config.server_middleware.add Sidekiq::Cronitor::Middleware
16
+ unless config.server_middleware.exists?(Sidekiq::Cronitor::Middleware)
17
+ config.server_middleware.add(Sidekiq::Cronitor::Middleware)
23
18
  end
24
19
  end
25
20
  end
@@ -30,110 +25,53 @@ module Sidekiq::Cronitor
30
25
 
31
26
  module ClassMethods
32
27
  def cronitor
33
- return @cronitor if defined? @cronitor
28
+ return @cronitor if defined?(@cronitor)
34
29
 
35
- # Sidekiq always stores options as string keys, shallowly at least
36
- opts = sidekiq_options.fetch("cronitor", {})
30
+ opts = sidekiq_options.fetch('cronitor', {})
31
+ key = opts.symbolize_keys.fetch(:key, name)
37
32
 
38
- if opts.is_a? Cronitor
39
- return @cronitor = opts
40
- end
41
-
42
- # Cronitor (and our code below) expects deeply symbolized keys
43
- opts = Utils.deep_symbolize_keys(opts)
44
-
45
- # Extract token and code into top level kwargs
46
- kwargs = opts.slice(:token, :code).merge(opts: opts)
47
-
48
- # Default monitor name to sidekiq worker (class) name
49
- kwargs[:opts][:name] ||= name
50
-
51
- # Some hints about where this monitor came from
52
- kwargs[:opts][:tags] ||= []
53
- kwargs[:opts][:tags] << "sidekiq-cronitor"
54
- if environment = ENV["RAILS_ENV"] || ENV["RACK_ENV"] || Sidekiq.options[:environment]
55
- kwargs[:opts][:tags] << environment
56
- end
57
- kwargs[:opts][:note] ||= "Created by sidekiq-cronitor"
58
-
59
- # If we can find a schedule for this worker then we can automatically add
60
- # a not_on_schedule rule and tag it as a cron-job
61
- if schedule = cronitor_schedule
62
- kwargs[:opts][:rules] ||= [{rule_type: "not_on_schedule", value: schedule}]
63
- kwargs[:opts][:tags] << "cron-job"
64
- end
33
+ Sidekiq.logger.debug("[cronitor] initializing monitor: worker=#{name} key=#{key}")
65
34
 
66
35
  begin
67
- @cronitor = Cronitor.new(**kwargs)
36
+ @cronitor = Cronitor::Monitor.new(key)
68
37
  rescue Cronitor::Error => e
69
- Sidekiq.logger.warn "Couldn't initialize Cronitor: #{e.to_s}"
38
+ Sidekiq.logger.error("[cronitor] failed to initialize monitor: worker=#{name} error=#{e.message}")
70
39
 
71
40
  @cronitor = nil
72
41
  end
73
42
  end
74
-
75
- private def cronitor_schedule
76
- name = self.name
77
-
78
- if defined?(Sidekiq::Cron)
79
- # If we can find a Sidekiq::Cron job with a matching worker class
80
- # then presume its schedule.
81
- Sidekiq::Cron::Job.all.each do |job|
82
- if job.klass == name
83
- return job.cron
84
- end
85
- end
86
- elsif defined?(Sidekiq::Periodic)
87
- # If we can find a Sidekiq Enterprise Periodic Loop with a matching
88
- # worker class then presume its schedule.
89
- Sidekiq::Periodic::LoopSet.new.each do |loop_|
90
- if loop_.klass == name
91
- return loop_.schedule
92
- end
93
- end
94
- end
95
-
96
- # ¯\_(ツ)_/¯
97
- return nil
98
- end
99
43
  end
100
44
 
101
45
  class Middleware
102
46
  def call(worker, message, queue)
103
- begin
104
- ping worker, "run"
47
+ ping(worker: worker, state: 'run')
105
48
 
106
- yield
107
- rescue => e
108
- ping worker, "failed", e.to_s
49
+ yield
50
+ rescue => e
51
+ ping(worker: worker, state: 'fail', message: e.to_s)
109
52
 
110
- raise
111
- else
112
- ping worker, "complete"
113
- end
53
+ raise e
54
+ else
55
+ ping(worker: worker, state: 'complete')
114
56
  end
115
57
 
116
58
  private
117
59
 
118
- def ping(worker, type, msg=nil)
119
- if cronitor? worker
120
- Sidekiq.logger.debug "Cronitor ping: #{type}"
121
- worker.cronitor.ping(type)
122
- end
123
- rescue Cronitor::Error => e
124
- Sidekiq.logger.warn "Couldn't ping Cronitor: #{e.to_s}"
125
- end
60
+ def ping(worker:, state:, message: nil)
61
+ return unless has_cronitor?(worker)
62
+
63
+ Sidekiq.logger.debug("[cronitor] ping: worker=#{worker.class.name} state=#{state} message=#{message}")
126
64
 
127
- def cronitor? worker
128
- worker.is_a?(Sidekiq::Cronitor) && worker.cronitor
65
+ worker.cronitor.ping(state: state)
66
+ rescue Cronitor::Error => e
67
+ Sidekiq.logger.error("[cronitor] error during ping: worker=#{worker.class.name} error=#{e.message}")
68
+ rescue => e
69
+ Sidekiq.logger.error("[cronitor] unexpected error: worker=#{worker.class.name} error=#{e.message}")
70
+ Sidekiq.logger.error(e.backtrace.first)
129
71
  end
130
- end
131
72
 
132
- module Utils
133
- def self.deep_symbolize_keys(hash) #+nodoc+
134
- hash.each_with_object({}) do |(key, value), new_hash|
135
- new_hash[key.to_sym] = value.is_a?(Hash) ? deep_symbolize_keys(value) : value
136
- end
73
+ def has_cronitor?(worker)
74
+ worker.is_a?(Sidekiq::Cronitor) && worker.respond_to?(:cronitor) && !worker.cronitor.api_key.nil?
137
75
  end
138
76
  end
139
77
  end
@@ -1,5 +1,5 @@
1
1
  module Sidekiq
2
2
  module Cronitor
3
- VERSION = "1.0.0.alpha2"
3
+ VERSION = '2.0.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,34 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-cronitor
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.alpha2
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
+ - Zeke Gabrielse
7
8
  - Samuel Cochran
8
- autorequire:
9
+ autorequire:
9
10
  bindir: bin
10
- cert_chain:
11
- - |
12
- -----BEGIN CERTIFICATE-----
13
- MIIDKDCCAhCgAwIBAgIBBTANBgkqhkiG9w0BAQUFADA6MQ0wCwYDVQQDDARzajI2
14
- MRQwEgYKCZImiZPyLGQBGRYEc2oyNjETMBEGCgmSJomT8ixkARkWA2NvbTAeFw0x
15
- NzA3MzEwNTQ3MDVaFw0xODA3MzEwNTQ3MDVaMDoxDTALBgNVBAMMBHNqMjYxFDAS
16
- BgoJkiaJk/IsZAEZFgRzajI2MRMwEQYKCZImiZPyLGQBGRYDY29tMIIBIjANBgkq
17
- hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr60Eo/ttCk8GMTMFiPr3GoYMIMFvLak
18
- xSmTk9YGCB6UiEePB4THSSA5w6IPyeaCF/nWkDp3/BAam0eZMWG1IzYQB23TqIM0
19
- 1xzcNRvFsn0aQoQ00k+sj+G83j3T5OOV5OZIlu8xAChMkQmiPd1NXc6uFv+Iacz7
20
- kj+CMsI9YUFdNoU09QY0b+u+Rb6wDYdpyvN60YC30h0h1MeYbvYZJx/iZK4XY5zu
21
- 4O/FL2ChjL2CPCpLZW55ShYyrzphWJwLOJe+FJ/ZBl6YXwrzQM9HKnt4titSNvyU
22
- KzE3L63A3PZvExzLrN9u09kuWLLJfXB2sGOlw3n9t72rJiuBr3/OQQIDAQABozkw
23
- NzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU99dfRjEKFyczTeIz
24
- m3ZsDWrNC80wDQYJKoZIhvcNAQEFBQADggEBADGiXpvK754s0zTFx3y31ZRDdvAI
25
- lA209JIjUlDyr9ptCRadihyfF2l9/hb+hLemiPEYppzG6vEK1TIyzbAR36yOJ8CX
26
- 4vPkCXLuwHhs6UIRbwN+IEy41nsIlBxmjLYei8h3t/G2Vm2oOaLdbjDXS+Srl9U8
27
- shsE8ft81PxSQfzEL7Mr9cC9XvWbHW+SyTpfGm8rAtaqZkNeke4U8a0di4oz2EfA
28
- P4lSfmXxsd1C71ckIp0cyXkPhyTtpyS/5hq9HhuUNzEHkSDe36/Rd1xYKV5JxMC2
29
- YAttWFUs06lor2q1wwncPaMtUtbWwW35+1IV6xhs2rFY6DD/I6ZkK3GnHdY=
30
- -----END CERTIFICATE-----
31
- date: 2017-12-10 00:00:00.000000000 Z
11
+ cert_chain: []
12
+ date: 2021-05-11 00:00:00.000000000 Z
32
13
  dependencies:
33
14
  - !ruby/object:Gem::Dependency
34
15
  name: sidekiq
@@ -36,56 +17,56 @@ dependencies:
36
17
  requirements:
37
18
  - - "~>"
38
19
  - !ruby/object:Gem::Version
39
- version: '5.0'
20
+ version: '6.0'
40
21
  type: :runtime
41
22
  prerelease: false
42
23
  version_requirements: !ruby/object:Gem::Requirement
43
24
  requirements:
44
25
  - - "~>"
45
26
  - !ruby/object:Gem::Version
46
- version: '5.0'
27
+ version: '6.0'
47
28
  - !ruby/object:Gem::Dependency
48
29
  name: cronitor
49
30
  requirement: !ruby/object:Gem::Requirement
50
31
  requirements:
51
32
  - - "~>"
52
33
  - !ruby/object:Gem::Version
53
- version: '2.0'
34
+ version: '4.0'
54
35
  type: :runtime
55
36
  prerelease: false
56
37
  version_requirements: !ruby/object:Gem::Requirement
57
38
  requirements:
58
39
  - - "~>"
59
40
  - !ruby/object:Gem::Version
60
- version: '2.0'
41
+ version: '4.0'
61
42
  - !ruby/object:Gem::Dependency
62
43
  name: bundler
63
44
  requirement: !ruby/object:Gem::Requirement
64
45
  requirements:
65
46
  - - "~>"
66
47
  - !ruby/object:Gem::Version
67
- version: '1.16'
48
+ version: '2.1'
68
49
  type: :development
69
50
  prerelease: false
70
51
  version_requirements: !ruby/object:Gem::Requirement
71
52
  requirements:
72
53
  - - "~>"
73
54
  - !ruby/object:Gem::Version
74
- version: '1.16'
55
+ version: '2.1'
75
56
  - !ruby/object:Gem::Dependency
76
57
  name: rake
77
58
  requirement: !ruby/object:Gem::Requirement
78
59
  requirements:
79
60
  - - "~>"
80
61
  - !ruby/object:Gem::Version
81
- version: '10.0'
62
+ version: '13.0'
82
63
  type: :development
83
64
  prerelease: false
84
65
  version_requirements: !ruby/object:Gem::Requirement
85
66
  requirements:
86
67
  - - "~>"
87
68
  - !ruby/object:Gem::Version
88
- version: '10.0'
69
+ version: '13.0'
89
70
  - !ruby/object:Gem::Dependency
90
71
  name: rspec
91
72
  requirement: !ruby/object:Gem::Requirement
@@ -100,9 +81,25 @@ dependencies:
100
81
  - - "~>"
101
82
  - !ruby/object:Gem::Version
102
83
  version: '3.0'
103
- description: Integrates sidekiq with cronitor so that workers call run/complete/failed
104
- around their perform methods
105
- email: sj26@sj26.com
84
+ - !ruby/object:Gem::Dependency
85
+ name: bump
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: '0.1'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '0.1'
98
+ description: Integrates Sidekiq with Cronitor so that workers send lifecycle events
99
+ - run/complete/fail - around their perform methods
100
+ email:
101
+ - zeke@keygen.sh
102
+ - sj26@sj26.com
106
103
  executables: []
107
104
  extensions: []
108
105
  extra_rdoc_files: []
@@ -111,11 +108,11 @@ files:
111
108
  - README.md
112
109
  - lib/sidekiq/cronitor.rb
113
110
  - lib/sidekiq/cronitor/version.rb
114
- homepage: https://github.com/sj26/sidekiq-cronitor
111
+ homepage: https://github.com/cronitor/sidekiq-cronitor
115
112
  licenses:
116
113
  - MIT
117
114
  metadata: {}
118
- post_install_message:
115
+ post_install_message:
119
116
  rdoc_options: []
120
117
  require_paths:
121
118
  - lib
@@ -126,13 +123,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
126
123
  version: '0'
127
124
  required_rubygems_version: !ruby/object:Gem::Requirement
128
125
  requirements:
129
- - - ">"
126
+ - - ">="
130
127
  - !ruby/object:Gem::Version
131
- version: 1.3.1
128
+ version: '0'
132
129
  requirements: []
133
- rubyforge_project:
134
- rubygems_version: 2.6.14
135
- signing_key:
130
+ rubygems_version: 3.1.4
131
+ signing_key:
136
132
  specification_version: 4
137
- summary: Monitor your sidekiq jobs with Cronitor
133
+ summary: Monitor your Sidekiq jobs with Cronitor
138
134
  test_files: []
checksums.yaml.gz.sig DELETED
Binary file
data.tar.gz.sig DELETED
@@ -1,2 +0,0 @@
1
- ���h`�=��^�!1W�d? Bx�B0n���c5���=�{=3�C�5.ΟwP��C�-O��o�K��!�p��f ��o����[����Պ���������� `��
2
- ��L���}��ܪ{*�xn7�O%Pl�c��h��� ��cm� ���sx� ��`���X���b�;��VS2��&�+���7\q"ةt ���c�]:��'za�[��`��B�0۽�:�?�龭KJbX��h��Is�
metadata.gz.sig DELETED
Binary file