sidekiq_monitoring_bitcrowd 0.1.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 +7 -0
- data/README.md +80 -0
- data/Rakefile +32 -0
- data/app/controllers/sidekiq_monitoring/application_controller.rb +5 -0
- data/app/controllers/sidekiq_monitoring/status_controller.rb +68 -0
- data/app/jobs/sidekiq_monitoring/application_job.rb +4 -0
- data/app/jobs/sidekiq_monitoring/refresh_status_job.rb +7 -0
- data/app/services/sidekiq_monitoring/status.rb +8 -0
- data/config/initializer/redis.rb +1 -0
- data/config/routes.rb +5 -0
- data/lib/sidekiq_monitoring/engine.rb +9 -0
- data/lib/sidekiq_monitoring/version.rb +3 -0
- data/lib/sidekiq_monitoring.rb +12 -0
- metadata +172 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: fbc1b833ad154e54aca350d51e7ba5456f5691ab
|
4
|
+
data.tar.gz: 3503d4af9262baa6cdf6ce68ae3b909abd908c06
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: fb19f2c938947b7053b8374224c18fc011bdfa611926aa8f55a9fc8d73302517d64d7ef48be9e589cc95f91c5aeed6750454b38629c7c4512e57956410a069b4
|
7
|
+
data.tar.gz: cdfb47713d49f69448a5ea40dac772929112eff3566831a6b600ddbb344a28dd1bf53c67f0d3c2c2875d045bc8f288f018f77f7e88b4a8b9868d6c4867afa0e8
|
data/README.md
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
# sidekiq_monitoring_bitcrowd [](https://travis-ci.org/bitcrowd/sidekiq_monitoring)
|
2
|
+
|
3
|
+
Rails engine that provides a JSON API which serves Sidekiq
|
4
|
+
status information from a HTTP-auth protected endpoint.
|
5
|
+
This status information is gathered by scheduling a frequently
|
6
|
+
running job that saves timestamps in Redis.
|
7
|
+
|
8
|
+
## Installation
|
9
|
+
|
10
|
+
Add gem to your project:
|
11
|
+
|
12
|
+
gem 'sidekiq_monitoring_bitcrowd'
|
13
|
+
|
14
|
+
Mount engine in `routes.rb`:
|
15
|
+
|
16
|
+
Rails.application.routes.draw do
|
17
|
+
mount SidekiqMonitoring::Engine => '/sidekiq_monitoring'
|
18
|
+
end
|
19
|
+
|
20
|
+
Schedule job in `whenever`'s `schedule.rb`:
|
21
|
+
|
22
|
+
every 5.minutes do
|
23
|
+
runner 'SidekiqMonitoring::Status.refresh'
|
24
|
+
end
|
25
|
+
|
26
|
+
Be sure that your parent app provides HTTP basic authentication credentials and
|
27
|
+
a redis connection via `Redis.current` or explicitly provide a redis URL using
|
28
|
+
an initializer
|
29
|
+
|
30
|
+
# app/config/initializers/sidekiq_monitoring.rb
|
31
|
+
SidekiqMonitoring.redis_url = 'redis://127.0.0.1:6379/0' # optional
|
32
|
+
SidekiqMonitoring.http_auth_name = 'user'
|
33
|
+
SidekiqMonitoring.http_auth_password = 'password'
|
34
|
+
|
35
|
+
This engine's controller inherits from `ApplicationController` by default. You
|
36
|
+
can change this using the `parent_controller` option
|
37
|
+
|
38
|
+
SidekiqMonitoring.parent_controller = 'SomeOtherController'
|
39
|
+
|
40
|
+
## Usage
|
41
|
+
|
42
|
+
Navigate to `/sidekiq_monitoring/status` and receive Sidekiq status information:
|
43
|
+
|
44
|
+
{
|
45
|
+
"timestamps": {
|
46
|
+
"whenever_ran": "2018-01-23 15:05:02",
|
47
|
+
"sidekiq_performed": "2018-01-23 15:05:02",
|
48
|
+
"requested": "2018-01-23 15:08:28"
|
49
|
+
},
|
50
|
+
"sidekiq": {
|
51
|
+
"active_workers": 0,
|
52
|
+
"queue_sizes": {
|
53
|
+
"mailers": 0,
|
54
|
+
"default": 0,
|
55
|
+
"scheduled": 0,
|
56
|
+
"retries": 0,
|
57
|
+
"dead": 0
|
58
|
+
},
|
59
|
+
"recent_history": {
|
60
|
+
"processed": {
|
61
|
+
"2018-01-23": 18,
|
62
|
+
"2018-01-22": 0,
|
63
|
+
"2018-01-21": 0,
|
64
|
+
"2018-01-20": 0,
|
65
|
+
"2018-01-19": 0
|
66
|
+
},
|
67
|
+
"failed": {
|
68
|
+
"2018-01-23": 0,
|
69
|
+
"2018-01-22": 0,
|
70
|
+
"2018-01-21": 0,
|
71
|
+
"2018-01-20": 0,
|
72
|
+
"2018-01-19": 0
|
73
|
+
}
|
74
|
+
},
|
75
|
+
"totals": {
|
76
|
+
"processed": 18,
|
77
|
+
"failed": 0
|
78
|
+
}
|
79
|
+
}
|
80
|
+
}
|
data/Rakefile
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
begin
|
2
|
+
require 'bundler/setup'
|
3
|
+
rescue LoadError
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'rdoc/task'
|
8
|
+
|
9
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
10
|
+
rdoc.rdoc_dir = 'rdoc'
|
11
|
+
rdoc.title = 'SidekiqMonitoring'
|
12
|
+
rdoc.options << '--line-numbers'
|
13
|
+
rdoc.rdoc_files.include('README.md')
|
14
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
|
+
end
|
16
|
+
|
17
|
+
APP_RAKEFILE = File.expand_path('../test/dummy/Rakefile', __FILE__)
|
18
|
+
load 'rails/tasks/engine.rake'
|
19
|
+
|
20
|
+
load 'rails/tasks/statistics.rake'
|
21
|
+
|
22
|
+
require 'bundler/gem_tasks'
|
23
|
+
|
24
|
+
require 'rake/testtask'
|
25
|
+
|
26
|
+
Rake::TestTask.new(:test) do |t|
|
27
|
+
t.libs << 'test'
|
28
|
+
t.pattern = 'test/**/*_test.rb'
|
29
|
+
t.verbose = false
|
30
|
+
end
|
31
|
+
|
32
|
+
task default: :test
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module SidekiqMonitoring
|
2
|
+
class StatusController < ApplicationController
|
3
|
+
http_basic_authenticate_with name: SidekiqMonitoring.http_auth_name,
|
4
|
+
password: SidekiqMonitoring.http_auth_password
|
5
|
+
|
6
|
+
def status
|
7
|
+
render json: status_data
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def status_data
|
13
|
+
{
|
14
|
+
timestamps: timestamps,
|
15
|
+
sidekiq: sidekiq_data
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
def timestamps
|
20
|
+
{
|
21
|
+
whenever_ran: Redis.current.get('monitoring:timestamp:whenever_ran'),
|
22
|
+
sidekiq_performed: Redis.current.get('monitoring:timestamp:sidekiq_performed'),
|
23
|
+
requested: Time.current.to_s(:db)
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
def sidekiq_data
|
28
|
+
{
|
29
|
+
active_workers: sidekiq_stats.workers_size,
|
30
|
+
queue_sizes: sidekiq_queue_sizes,
|
31
|
+
recent_history: recent_history,
|
32
|
+
totals: totals
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
def sidekiq_stats
|
37
|
+
@sidekiq_stats ||= Sidekiq::Stats.new
|
38
|
+
end
|
39
|
+
|
40
|
+
def sidekiq_history
|
41
|
+
@sidekiq_history ||= Sidekiq::Stats::History.new(5)
|
42
|
+
end
|
43
|
+
|
44
|
+
def recent_history
|
45
|
+
{
|
46
|
+
processed: sidekiq_history.processed,
|
47
|
+
failed: sidekiq_history.failed
|
48
|
+
}
|
49
|
+
end
|
50
|
+
|
51
|
+
def totals
|
52
|
+
{
|
53
|
+
processed: sidekiq_stats.processed,
|
54
|
+
failed: sidekiq_stats.failed
|
55
|
+
}
|
56
|
+
end
|
57
|
+
|
58
|
+
def sidekiq_queue_sizes
|
59
|
+
queue_sizes = sidekiq_stats.queues
|
60
|
+
|
61
|
+
queue_sizes.merge(
|
62
|
+
scheduled: sidekiq_stats.scheduled_size,
|
63
|
+
retries: sidekiq_stats.retry_size,
|
64
|
+
dead: sidekiq_stats.dead_size
|
65
|
+
)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Redis.current ||= Redis.new(SidekiqMonitoring.redis_url)
|
data/config/routes.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'sidekiq_monitoring/engine'
|
2
|
+
|
3
|
+
module SidekiqMonitoring
|
4
|
+
mattr_accessor :parent_controller
|
5
|
+
self.parent_controller = '::ApplicationController'
|
6
|
+
|
7
|
+
mattr_accessor :redis_url
|
8
|
+
self.redis_url = 'redis://127.0.0.1:6379/0'
|
9
|
+
|
10
|
+
mattr_accessor :http_auth_name
|
11
|
+
mattr_accessor :http_auth_password
|
12
|
+
end
|
metadata
ADDED
@@ -0,0 +1,172 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sidekiq_monitoring_bitcrowd
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Julian Dobmann
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-01-31 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: redis
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: sidekiq
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: fakeredis
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubocop-bitcrowd
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: sqlite3
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: timecop
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
description: |
|
126
|
+
Rails engine that provides a JSON API which serves Sidekiq
|
127
|
+
status information from a HTTP-auth protected endpoint.
|
128
|
+
This status information is gathered by scheduling a frequently
|
129
|
+
running job that saves timestamps in Redis.
|
130
|
+
email:
|
131
|
+
- julian@bitcrowd.net
|
132
|
+
executables: []
|
133
|
+
extensions: []
|
134
|
+
extra_rdoc_files: []
|
135
|
+
files:
|
136
|
+
- README.md
|
137
|
+
- Rakefile
|
138
|
+
- app/controllers/sidekiq_monitoring/application_controller.rb
|
139
|
+
- app/controllers/sidekiq_monitoring/status_controller.rb
|
140
|
+
- app/jobs/sidekiq_monitoring/application_job.rb
|
141
|
+
- app/jobs/sidekiq_monitoring/refresh_status_job.rb
|
142
|
+
- app/services/sidekiq_monitoring/status.rb
|
143
|
+
- config/initializer/redis.rb
|
144
|
+
- config/routes.rb
|
145
|
+
- lib/sidekiq_monitoring.rb
|
146
|
+
- lib/sidekiq_monitoring/engine.rb
|
147
|
+
- lib/sidekiq_monitoring/version.rb
|
148
|
+
homepage: https://github.com/bitcrowd/sidekiq_monitoring
|
149
|
+
licenses:
|
150
|
+
- MIT
|
151
|
+
metadata: {}
|
152
|
+
post_install_message:
|
153
|
+
rdoc_options: []
|
154
|
+
require_paths:
|
155
|
+
- lib
|
156
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
157
|
+
requirements:
|
158
|
+
- - ">="
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: '0'
|
161
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
162
|
+
requirements:
|
163
|
+
- - ">="
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0'
|
166
|
+
requirements: []
|
167
|
+
rubyforge_project:
|
168
|
+
rubygems_version: 2.6.13
|
169
|
+
signing_key:
|
170
|
+
specification_version: 4
|
171
|
+
summary: Provide Sidekiq status information via JSON API.
|
172
|
+
test_files: []
|