1
0
Fork 0
mirror of https://github.com/mperham/sidekiq.git synced 2022-11-09 13:52:34 -05:00

Merge pull request #652 from mperham/update-dashboard-stats

Dynamically update redis stats on dashboard
This commit is contained in:
Brandon Hilkert 2013-01-26 17:28:54 -08:00
commit 0a60721114
5 changed files with 73 additions and 22 deletions

View file

@ -1,5 +1,6 @@
HEAD
-----------
- Dynamically update Redis stats on dashboard [brandonhilkert]
- Add Sidekiq::Workers API giving programmatic access to the current
set of active workers.

View file

@ -99,6 +99,10 @@ module Sidekiq
parts[0].gsub!(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{options[:delimiter]}")
parts.join(options[:separator])
end
def redis_keys
["redis_stats", "uptime_in_days", "connected_clients", "used_memory_human", "used_memory_peak_human"]
end
end
get "/" do
@ -200,7 +204,7 @@ module Sidekiq
end
get '/dashboard' do
@redis_info = Sidekiq.redis { |conn| conn.info }
@redis_info = Sidekiq.redis { |conn| conn.info }.select{ |k, v| redis_keys.include? k }
stats_history = Sidekiq::Stats::History.new((params[:days] || 30).to_i)
@processed_history = stats_history.processed
@failed_history = stats_history.failed
@ -208,14 +212,19 @@ module Sidekiq
end
get '/dashboard/stats' do
stats = Sidekiq::Stats.new
sidekiq_stats = Sidekiq::Stats.new
redis_stats = Sidekiq.redis { |conn| conn.info }.select{ |k, v| redis_keys.include? k }
content_type :json
Sidekiq.dump_json({
processed: stats.processed,
failed: stats.failed,
enqueued: stats.enqueued,
scheduled: stats.scheduled_size,
retries: stats.retry_size,
sidekiq: {
processed: sidekiq_stats.processed,
failed: sidekiq_stats.failed,
enqueued: sidekiq_stats.enqueued,
scheduled: sidekiq_stats.scheduled_size,
retries: sidekiq_stats.retry_size,
},
redis: redis_stats
})
end

View file

@ -199,17 +199,49 @@ class TestWeb < MiniTest::Unit::TestCase
assert_equal 200, last_response.status
end
it 'can refresh dashboard stats' do
Sidekiq.redis do |conn|
conn.set("stat:processed", 5)
conn.set("stat:failed", 2)
describe 'stats' do
before do
Sidekiq.redis do |conn|
conn.set("stat:processed", 5)
conn.set("stat:failed", 2)
end
2.times { add_retry }
3.times { add_scheduled }
get '/dashboard/stats'
@response = Sidekiq.load_json(last_response.body)
end
2.times { add_retry }
3.times { add_scheduled }
get '/dashboard/stats'
assert_equal 200, last_response.status
assert_equal "{\"processed\":5,\"failed\":2,\"enqueued\":0,\"scheduled\":3,\"retries\":2}", last_response.body
it 'can refresh dashboard stats' do
assert_equal 200, last_response.status
end
describe "for sidekiq" do
it 'are namespaced' do
assert_includes @response.keys, "sidekiq"
end
it 'reports processed' do
assert_equal @response["sidekiq"]["processed"], 5
end
it 'reports failed' do
assert_equal @response["sidekiq"]["failed"], 2
end
it 'reports retries' do
assert_equal @response["sidekiq"]["retries"], 2
end
it 'reports scheduled' do
assert_equal @response["sidekiq"]["scheduled"], 3
end
end
describe "for redis" do
it 'are namespaced' do
assert_includes @response.keys, "redis"
end
end
end
def add_scheduled

View file

@ -53,7 +53,8 @@ var realtimeGraph = function(updatePath) {
Sidekiq.processed = data.processed;
Sidekiq.failed = data.failed;
updateStatsSummary(data);
updateStatsSummary(data.sidekiq);
updateRedisStats(data.redis);
pulseBeacon();
});
i++;
@ -116,6 +117,14 @@ var updateStatsSummary = function(data) {
$('ul.summary li.enqueued span.count').html(data.enqueued.numberWithDelimiter())
}
var updateRedisStats = function(data) {
$('.stat h3.redis_version').html(data.redis_version)
$('.stat h3.uptime_in_days').html(data.uptime_in_days)
$('.stat h3.connected_clients').html(data.connected_clients)
$('.stat h3.used_memory_human').html(data.used_memory_human)
$('.stat h3.used_memory_peak_human').html(data.used_memory_peak_human)
}
var pulseBeacon = function(){
$beacon = $('.beacon')
$beacon.find('.dot').addClass('pulse').delay(1000).queue(function(){

View file

@ -22,25 +22,25 @@ h5 Redis
- if @redis_info.fetch("redis_version", nil)
.stat
h3= @redis_info.fetch("redis_version")
h3.redis_version= @redis_info.fetch("redis_version")
p Version
- if @redis_info.fetch("uptime_in_days", nil)
.stat
h3= @redis_info.fetch("uptime_in_days")
h3.uptime_in_days= @redis_info.fetch("uptime_in_days")
p Uptime (days)
- if @redis_info.fetch("connected_clients", nil)
.stat
h3= @redis_info.fetch("connected_clients")
h3.connected_clients= @redis_info.fetch("connected_clients")
p Connections
- if @redis_info.fetch("used_memory_human", nil)
.stat
h3= @redis_info.fetch("used_memory_human")
h3.used_memory_human= @redis_info.fetch("used_memory_human")
p Memory Usage
- if @redis_info.fetch("used_memory_peak_human", nil)
.stat
h3= @redis_info.fetch("used_memory_peak_human")
h3.used_memory_peak_human= @redis_info.fetch("used_memory_peak_human")
p Peak Memory Usage