Module: Periodically::Debug

Defined in:
lib/periodically/debug.rb

Class Method Summary collapse

Class Method Details

.lock_ttlsObject



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/periodically/debug.rb', line 33

def self.lock_ttls
  Periodically.redis do |conn|
    keys = conn.scan_each(:match => "locks:*").to_a
    if keys.length == 0
      {}
    else
      ttls = conn.eval(%{
        local matcher = KEYS[1] .. ":*"
        local ttls = {}

        local cursor = "0"
        repeat
          local result = redis.call("SCAN", cursor, "MATCH", matcher)
          cursor = result[1]

          local keys   = result[2]
          for i, key in ipairs(keys) do
            ttls[#ttls + 1] = redis.call('ttl', key)
          end
        until cursor == "0"
        return ttls
      }, :keys => ['locks'])
      Hash[keys.zip(ttls)]
    end
  end
end

.total_debug_dumpObject



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/periodically/debug.rb', line 5

def self.total_debug_dump
  error_counts = Periodically.redis do |conn|
    keys = conn.keys("errors:*").to_a
    if keys.length == 0
      {}
    else
      values = conn.mget(keys).map(&:to_i)
      Hash[keys.zip(values)]
    end
  end
  error_messages = Periodically.redis do |conn|
    keys = conn.keys("error_messages:*").to_a
    if keys.length == 0
      {}
    else
      values = conn.mget(keys)
      Hash[keys.zip(values)]
    end
  end
  locks = lock_ttls
  {
    job_count: Periodically._registered_jobs.size,
    error_counts: error_counts,
    error_messages: error_messages,
    lock_ttls: locks
  }
end