sidekiq-redislog 0.0.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.
- data/.travis.yml +17 -0
- data/CHANGELOG.md +2 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +55 -0
- data/LICENSE +22 -0
- data/README.md +57 -0
- data/Rakefile +12 -0
- data/lib/sidekiq/redislog/redis_log_helper.rb +39 -0
- data/lib/sidekiq/redislog/version.rb +5 -0
- data/lib/sidekiq/redislog/views/sidekiq_redis_log.slim +31 -0
- data/lib/sidekiq/redislog/web_extension.rb +29 -0
- data/lib/sidekiq/redislog.rb +24 -0
- data/lib/sidekiq-redislog.rb +1 -0
- data/sidekiq-redis-log.gemspec +26 -0
- data/test/test_helper.rb +14 -0
- data/test/web_extension_test.rb +37 -0
- metadata +166 -0
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
sidekiq-redislog (0.0.1)
|
5
|
+
sidekiq (>= 2.2.1)
|
6
|
+
sinatra
|
7
|
+
slim
|
8
|
+
sprockets
|
9
|
+
|
10
|
+
GEM
|
11
|
+
remote: https://rubygems.org/
|
12
|
+
specs:
|
13
|
+
celluloid (0.14.0)
|
14
|
+
timers (>= 1.0.0)
|
15
|
+
connection_pool (1.0.0)
|
16
|
+
hike (1.2.2)
|
17
|
+
multi_json (1.7.3)
|
18
|
+
rack (1.4.5)
|
19
|
+
rack-protection (1.5.0)
|
20
|
+
rack
|
21
|
+
rack-test (0.6.2)
|
22
|
+
rack (>= 1.0)
|
23
|
+
rake (10.0.4)
|
24
|
+
redis (3.0.4)
|
25
|
+
redis-namespace (1.3.0)
|
26
|
+
redis (~> 3.0.0)
|
27
|
+
sidekiq (2.11.2)
|
28
|
+
celluloid (>= 0.13.0)
|
29
|
+
connection_pool (>= 1.0.0)
|
30
|
+
multi_json
|
31
|
+
redis (>= 3.0)
|
32
|
+
redis-namespace
|
33
|
+
sinatra (1.3.6)
|
34
|
+
rack (~> 1.4)
|
35
|
+
rack-protection (~> 1.3)
|
36
|
+
tilt (~> 1.3, >= 1.3.3)
|
37
|
+
slim (1.3.8)
|
38
|
+
temple (~> 0.6.3)
|
39
|
+
tilt (~> 1.3.3)
|
40
|
+
sprockets (2.2.2)
|
41
|
+
hike (~> 1.2)
|
42
|
+
multi_json (~> 1.0)
|
43
|
+
rack (~> 1.0)
|
44
|
+
tilt (~> 1.1, != 1.3.0)
|
45
|
+
temple (0.6.4)
|
46
|
+
tilt (1.3.7)
|
47
|
+
timers (1.1.0)
|
48
|
+
|
49
|
+
PLATFORMS
|
50
|
+
ruby
|
51
|
+
|
52
|
+
DEPENDENCIES
|
53
|
+
rack-test
|
54
|
+
rake
|
55
|
+
sidekiq-redislog!
|
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2012 Marcelo Silveira
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
# Sidekiq::RedisLog [](http://travis-ci.org/rpocklin/sidekiq-redislog)
|
2
|
+
|
3
|
+
Displays a monitor window which echos the telnet status log of redis for sidekiq. Autoscrolls.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
NOTE: Doesn't work with Webrick because it uses SSE (server-sent events) and Webrick is single-threaded.
|
8
|
+
Works with Phusion Passenger / Thin / Puma / Rainbows and probably Unicorn.
|
9
|
+
|
10
|
+
Add this line to your application's Gemfile:
|
11
|
+
|
12
|
+
```ruby
|
13
|
+
gem 'sidekiq-redislog'
|
14
|
+
```
|
15
|
+
|
16
|
+
1. Start up your rails stack
|
17
|
+
2. Navigate to '/sidekiq' (or your custom remapped route)
|
18
|
+
3. Click 'redis' tab
|
19
|
+
4. You will see activity (at the very least 'OK' should appear in the text area.)
|
20
|
+
|
21
|
+
## Dependencies
|
22
|
+
|
23
|
+
Depends on Sidekiq >= 2.2.1
|
24
|
+
|
25
|
+
## Usage and Modes
|
26
|
+
|
27
|
+
- When you run your app you will now see an additional tab 'Redis' in the sidekiq web console.
|
28
|
+
- You can create activity by opening the other Sidekiq tabs (Dashboard/Workers/etc) in new browser tabs.
|
29
|
+
|
30
|
+
## Contributing
|
31
|
+
|
32
|
+
1. Fork it
|
33
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
34
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
35
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
36
|
+
5. Create new Pull Request
|
37
|
+
|
38
|
+
## License
|
39
|
+
|
40
|
+
Released under the MIT License. See the [LICENSE][license] file for further details.
|
41
|
+
|
42
|
+
[license]: https://github.com/rpocklin/sidekiq-redislog/blob/master/LICENSE
|
43
|
+
|
44
|
+
|
45
|
+
## TODO
|
46
|
+
|
47
|
+
- XHR polling (< IE8 etc.)
|
48
|
+
- Connect/Disconnect buttons since it consumes a thread for the poller.
|
49
|
+
|
50
|
+
|
51
|
+
## Notes
|
52
|
+
|
53
|
+
If you mount sidekiq to a non-standard route ie. mount Sidekiq::Web => '/admin/sidekiq' then you'll have to
|
54
|
+
redirect the stream url (which javascript hits via SSE):
|
55
|
+
```match '/sidekiq/redis_log_stream' => redirect('/admin/sidekiq/redis_log_stream')```
|
56
|
+
in ```routes.rb```
|
57
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
module Sinatra
|
2
|
+
module RedisLogHelper
|
3
|
+
def set_sse_headers response
|
4
|
+
|
5
|
+
response.headers.delete('Content-Length') # no content length
|
6
|
+
response.headers['X-Accel-Buffering'] = 'no' # for nginx
|
7
|
+
response.headers["Connection"] = "keepalive" #optimisation
|
8
|
+
response.headers["Cache-Control"] = "no-cache, no-store" #important for browsers
|
9
|
+
response.headers['Last-Modified'] = Time.now.to_s # #fixes buffering
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
def capture_redis stream, host = 'localhost', port = 6379, timeout = 30, command = 'MONITOR'
|
14
|
+
|
15
|
+
telnet_session = Net::Telnet::new("Host" => host,
|
16
|
+
"Port" => port,
|
17
|
+
"Timeout" => timeout)
|
18
|
+
|
19
|
+
telnet_session.cmd(command) do |data|
|
20
|
+
yield data if block_given?
|
21
|
+
end
|
22
|
+
|
23
|
+
telnet_session.close
|
24
|
+
end
|
25
|
+
|
26
|
+
def get_redis_config
|
27
|
+
|
28
|
+
config = {:host => 'localhost', :port => 6379}
|
29
|
+
|
30
|
+
Sidekiq.redis do |redis|
|
31
|
+
config[:host] = redis.client.host
|
32
|
+
config[:port] = redis.client.port
|
33
|
+
end
|
34
|
+
|
35
|
+
config
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
header.row
|
2
|
+
.span2
|
3
|
+
h3 Redis Log
|
4
|
+
.span10
|
5
|
+
textarea id="logger" style='width: 100%;' rows="20" cols='50' readonly="true"
|
6
|
+
|
7
|
+
javascript:
|
8
|
+
var show_logs_for = function(event_channel, event_id, log_id) {
|
9
|
+
|
10
|
+
if (!!window.EventSource) {
|
11
|
+
source = new EventSource(event_channel); // match routes.rb
|
12
|
+
|
13
|
+
element = document.getElementById(log_id); // match template
|
14
|
+
|
15
|
+
source.addEventListener(event_id, function(e) {
|
16
|
+
//firefox has no 'data'
|
17
|
+
if (e.data) data = e.data; else data = e;
|
18
|
+
|
19
|
+
element.innerHTML += data + "\n";
|
20
|
+
element.scrollTop = element.scrollHeight;
|
21
|
+
});
|
22
|
+
}
|
23
|
+
else {
|
24
|
+
// Result to xhr polling :( TODO
|
25
|
+
}
|
26
|
+
};
|
27
|
+
|
28
|
+
$(function() {
|
29
|
+
show_logs_for('/sidekiq/redis_log_stream', 'redis_log', 'logger')
|
30
|
+
});
|
31
|
+
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Sidekiq
|
2
|
+
module RedisLog
|
3
|
+
module WebExtension
|
4
|
+
|
5
|
+
def self.registered(app)
|
6
|
+
|
7
|
+
app.helpers Sinatra::RedisLogHelper
|
8
|
+
|
9
|
+
app.get "/redis" do
|
10
|
+
view_path = File.join(File.expand_path("..", __FILE__), "views")
|
11
|
+
render(:slim, File.read(File.join(view_path, "sidekiq_redis_log.slim")))
|
12
|
+
end
|
13
|
+
|
14
|
+
app.get "/redis_log_stream", provides: 'text/event-stream' do
|
15
|
+
|
16
|
+
set_sse_headers response
|
17
|
+
config = get_redis_config
|
18
|
+
|
19
|
+
stream :keep_open do |stream|
|
20
|
+
capture_redis stream, config[:host], config[:port] do |data|
|
21
|
+
stream << "event: redis_log\n"
|
22
|
+
stream << "data: #{data}\n\n"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require "sidekiq/web"
|
2
|
+
require "sidekiq/redislog/version"
|
3
|
+
require "sidekiq/redislog/redis_log_helper"
|
4
|
+
require "sidekiq/redislog/web_extension"
|
5
|
+
|
6
|
+
module Sidekiq
|
7
|
+
module RedisLog
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
Sidekiq::Web.register Sidekiq::RedisLog::WebExtension
|
12
|
+
|
13
|
+
if Sidekiq::Web.tabs.is_a?(Array)
|
14
|
+
# For sidekiq < 2.5
|
15
|
+
Sidekiq::Web.tabs << "redis"
|
16
|
+
else
|
17
|
+
Sidekiq::Web.tabs["Redis"] = "redis"
|
18
|
+
end
|
19
|
+
|
20
|
+
Sidekiq.configure_server do |config|
|
21
|
+
config.server_middleware do |chain|
|
22
|
+
chain.add Sidekiq::RedisLog::Middleware
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require "sidekiq/redislog"
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/sidekiq/redislog/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Robert Pocklington"]
|
6
|
+
gem.email = ["rpocklin@gmail.com"]
|
7
|
+
gem.description = %q{View redis log for sidekiq on the web}
|
8
|
+
gem.summary = %q{Allows you to monitor the redis log of sidekiq to track what is happening under the covers.}
|
9
|
+
gem.homepage = "https://github.com/rpocklin/sidekiq-redislog/"
|
10
|
+
|
11
|
+
gem.files = `git ls-files`.split($\)
|
12
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
13
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
14
|
+
gem.name = "sidekiq-redislog"
|
15
|
+
gem.require_paths = ["lib"]
|
16
|
+
gem.version = Sidekiq::RedisLog::VERSION
|
17
|
+
|
18
|
+
gem.add_dependency "sidekiq", ">= 2.2.1"
|
19
|
+
gem.add_dependency "slim"
|
20
|
+
gem.add_dependency "sinatra"
|
21
|
+
gem.add_dependency "sprockets"
|
22
|
+
|
23
|
+
gem.add_development_dependency "rake"
|
24
|
+
gem.add_development_dependency "rack-test"
|
25
|
+
|
26
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
Encoding.default_external = Encoding::UTF_8
|
2
|
+
Encoding.default_internal = Encoding::UTF_8
|
3
|
+
|
4
|
+
require "minitest/autorun"
|
5
|
+
require "minitest/spec"
|
6
|
+
require "minitest/mock"
|
7
|
+
|
8
|
+
require "rack/test"
|
9
|
+
require "sidekiq"
|
10
|
+
require "sidekiq-redislog"
|
11
|
+
|
12
|
+
Sidekiq.logger.level = Logger::ERROR
|
13
|
+
|
14
|
+
REDIS = Sidekiq::RedisConnection.create(:url => "redis://localhost/15", :namespace => 'sidekiq_redis_log')
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
require "net/telnet"
|
3
|
+
|
4
|
+
module Sidekiq
|
5
|
+
describe "RedisLog" do
|
6
|
+
include Rack::Test::Methods
|
7
|
+
|
8
|
+
def app
|
9
|
+
Sidekiq::Web
|
10
|
+
end
|
11
|
+
|
12
|
+
before do
|
13
|
+
Sidekiq.redis = REDIS
|
14
|
+
Sidekiq.redis {|c| c.flushdb }
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'can display home with redis log tab' do
|
18
|
+
get '/redis'
|
19
|
+
|
20
|
+
last_response.status.must_equal 200
|
21
|
+
last_response.body.must_match /Sidekiq/
|
22
|
+
last_response.body.must_match /Redis/
|
23
|
+
end
|
24
|
+
|
25
|
+
## NOTE: requires redis localhost:6379 running
|
26
|
+
it 'can capture redis log via telnet' do
|
27
|
+
|
28
|
+
null_stream = File.open(File::NULL, "w")
|
29
|
+
|
30
|
+
class RedisMonitor
|
31
|
+
include Sinatra::RedisLogHelper
|
32
|
+
end
|
33
|
+
|
34
|
+
RedisMonitor.new.capture_redis null_stream, 'localhost', 6379, 30, 'QUIT'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
metadata
ADDED
@@ -0,0 +1,166 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sidekiq-redislog
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Robert Pocklington
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-06-09 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: sidekiq
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 2.2.1
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 2.2.1
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: slim
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: sinatra
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: sprockets
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rake
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: rack-test
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
description: View redis log for sidekiq on the web
|
111
|
+
email:
|
112
|
+
- rpocklin@gmail.com
|
113
|
+
executables: []
|
114
|
+
extensions: []
|
115
|
+
extra_rdoc_files: []
|
116
|
+
files:
|
117
|
+
- .travis.yml
|
118
|
+
- CHANGELOG.md
|
119
|
+
- Gemfile
|
120
|
+
- Gemfile.lock
|
121
|
+
- LICENSE
|
122
|
+
- README.md
|
123
|
+
- Rakefile
|
124
|
+
- lib/sidekiq-redislog.rb
|
125
|
+
- lib/sidekiq/redislog.rb
|
126
|
+
- lib/sidekiq/redislog/redis_log_helper.rb
|
127
|
+
- lib/sidekiq/redislog/version.rb
|
128
|
+
- lib/sidekiq/redislog/views/sidekiq_redis_log.slim
|
129
|
+
- lib/sidekiq/redislog/web_extension.rb
|
130
|
+
- sidekiq-redis-log.gemspec
|
131
|
+
- test/test_helper.rb
|
132
|
+
- test/web_extension_test.rb
|
133
|
+
homepage: https://github.com/rpocklin/sidekiq-redislog/
|
134
|
+
licenses: []
|
135
|
+
post_install_message:
|
136
|
+
rdoc_options: []
|
137
|
+
require_paths:
|
138
|
+
- lib
|
139
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
140
|
+
none: false
|
141
|
+
requirements:
|
142
|
+
- - ! '>='
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0'
|
145
|
+
segments:
|
146
|
+
- 0
|
147
|
+
hash: 1305450152839076812
|
148
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
149
|
+
none: false
|
150
|
+
requirements:
|
151
|
+
- - ! '>='
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
154
|
+
segments:
|
155
|
+
- 0
|
156
|
+
hash: 1305450152839076812
|
157
|
+
requirements: []
|
158
|
+
rubyforge_project:
|
159
|
+
rubygems_version: 1.8.25
|
160
|
+
signing_key:
|
161
|
+
specification_version: 3
|
162
|
+
summary: Allows you to monitor the redis log of sidekiq to track what is happening
|
163
|
+
under the covers.
|
164
|
+
test_files:
|
165
|
+
- test/test_helper.rb
|
166
|
+
- test/web_extension_test.rb
|