Class: Sidekiq::Monitor::Status

Inherits:
Object
  • Object
show all
Defined in:
lib/sidekiq/monitor.rb

Defined Under Namespace

Classes: QUEUE_STRUCT

Constant Summary collapse

VALID_SECTIONS =
%w[all version overview processes queues]
COL_PAD =
2

Instance Method Summary collapse

Instance Method Details

#allObject



21
22
23
24
25
26
27
28
29
# File 'lib/sidekiq/monitor.rb', line 21

def all
  version
  puts
  overview
  puts
  processes
  puts
  queues
end

#display(section = nil) ⇒ Object



11
12
13
14
15
16
17
18
19
# File 'lib/sidekiq/monitor.rb', line 11

def display(section = nil)
  section ||= "all"
  unless VALID_SECTIONS.include? section
    puts "I don't know how to check the status of '#{section}'!"
    puts "Try one of these: #{VALID_SECTIONS.join(", ")}"
    return
  end
  send(section)
end

#overviewObject



36
37
38
39
40
41
42
43
44
45
# File 'lib/sidekiq/monitor.rb', line 36

def overview
  puts "---- Overview ----"
  puts "  Processed: #{delimit stats.processed}"
  puts "     Failed: #{delimit stats.failed}"
  puts "       Busy: #{delimit stats.workers_size}"
  puts "   Enqueued: #{delimit stats.enqueued}"
  puts "    Retries: #{delimit stats.retry_size}"
  puts "  Scheduled: #{delimit stats.scheduled_size}"
  puts "       Dead: #{delimit stats.dead_size}"
end

#processesObject



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/sidekiq/monitor.rb', line 47

def processes
  puts "---- Processes (#{process_set.size}) ----"
  process_set.each_with_index do |process, index|
    # Keep compatibility with legacy versions since we don't want to break sidekiqmon during rolling upgrades or downgrades.
    #
    # Before:
    #   ["default", "critical"]
    #
    # After:
    #   {"default" => 1, "critical" => 10}
    queues =
      if process["weights"]
        process["weights"].sort_by { |queue| queue[0] }.map { |capsule| capsule.map { |name, weight| (weight > 0) ? "#{name}: #{weight}" : name }.join(", ") }
      else
        process["queues"].sort
      end

    puts "#{process["identity"]} #{tags_for(process)}"
    puts "  Started: #{Time.at(process["started_at"])} (#{time_ago(process["started_at"])})"
    puts "  Threads: #{process["concurrency"]} (#{process["busy"]} busy)"
    puts "   Queues: #{split_multiline(queues, pad: 11)}"
    puts "  Version: #{process["version"] || "Unknown"}" if process["version"] != Sidekiq::VERSION
    puts "" unless (index + 1) == process_set.size
  end
end

#queuesObject



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/sidekiq/monitor.rb', line 73

def queues
  puts "---- Queues (#{queue_data.size}) ----"
  columns = {
    name: [:ljust, (["name"] + queue_data.map(&:name)).map(&:length).max + COL_PAD],
    size: [:rjust, (["size"] + queue_data.map(&:size)).map(&:length).max + COL_PAD],
    latency: [:rjust, (["latency"] + queue_data.map(&:latency)).map(&:length).max + COL_PAD]
  }
  columns.each { |col, (dir, width)| print col.to_s.upcase.public_send(dir, width) }
  puts
  queue_data.each do |q|
    columns.each do |col, (dir, width)|
      print q.send(col).public_send(dir, width)
    end
    puts
  end
end

#versionObject



31
32
33
34
# File 'lib/sidekiq/monitor.rb', line 31

def version
  puts "Sidekiq #{Sidekiq::VERSION}"
  puts Time.now.utc
end