Class: Lepus::LogSubscriber

Inherits:
ActiveSupport::LogSubscriber
  • Object
show all
Defined in:
lib/lepus/rails/log_subscriber.rb

Instance Method Summary collapse

Instance Method Details

#deregister_process(event) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/lepus/rails/log_subscriber.rb', line 41

def deregister_process(event)
  process = event.payload[:process]

  attributes = {
    process_id: process.id,
    pid: process.pid,
    hostname: process.hostname,
    name: process.name,
    last_heartbeat_at: process.last_heartbeat_at&.strftime("%Y-%m-%d %H:%M:%S"),
    claimed_size: event.payload[:claimed_size],
    pruned: event.payload[:pruned]
  }

  if (error = event.payload[:error])
    warn formatted_event(event, action: "Error deregistering #{process.kind}", **attributes.merge(error: formatted_error(error)))
  else
    debug formatted_event(event, action: "Deregister #{process.kind}", **attributes)
  end
end

#graceful_termination(event) ⇒ Object



69
70
71
72
73
74
75
76
77
# File 'lib/lepus/rails/log_subscriber.rb', line 69

def graceful_termination(event)
  attributes = event.payload.slice(:process_id, :supervisor_pid, :supervised_processes)

  if event.payload[:shutdown_timeout_exceeded]
    warn formatted_event(event, action: "Supervisor wasn't terminated gracefully - shutdown timeout exceeded", **attributes)
  else
    info formatted_event(event, action: "Supervisor terminated gracefully", **attributes)
  end
end

#immediate_termination(event) ⇒ Object



79
80
81
# File 'lib/lepus/rails/log_subscriber.rb', line 79

def immediate_termination(event)
  info formatted_event(event, action: "Supervisor terminated immediately", **event.payload.slice(:process_id, :supervisor_pid, :supervised_processes))
end

#prune_processes(event) ⇒ Object



61
62
63
# File 'lib/lepus/rails/log_subscriber.rb', line 61

def prune_processes(event)
  debug formatted_event(event, action: "Prune dead processes", **event.payload.slice(:size))
end

#register_process(event) ⇒ Object



30
31
32
33
34
35
36
37
38
39
# File 'lib/lepus/rails/log_subscriber.rb', line 30

def register_process(event)
  process_kind = event.payload[:kind]
  attributes = event.payload.slice(:pid, :hostname, :process_id, :name)

  if (error = event.payload[:error])
    warn formatted_event(event, action: "Error registering #{process_kind}", **attributes.merge(error: formatted_error(error)))
  else
    debug formatted_event(event, action: "Register #{process_kind}", **attributes)
  end
end

#replace_fork(event) ⇒ Object



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/lepus/rails/log_subscriber.rb', line 87

def replace_fork(event)
  status = event.payload[:status]
  attributes = event.payload.slice(:pid).merge \
    status: status.exitstatus || "no exit status set",
    pid_from_status: status.pid,
    signaled: status.signaled?,
    stopsig: status.stopsig,
    termsig: status.termsig

  if (replaced_fork = event.payload[:fork])
    info formatted_event(event, action: "Replaced terminated #{replaced_fork.kind}", **attributes.merge(hostname: replaced_fork.hostname, name: replaced_fork.name))
  else
    warn formatted_event(event, action: "Tried to replace forked process but it had already died", **attributes)
  end
end

#shutdown_process(event) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/lepus/rails/log_subscriber.rb', line 17

def shutdown_process(event)
  process = event.payload[:process]

  attributes = {
    pid: process.pid,
    hostname: process.hostname,
    process_id: process.process_id,
    name: process.name
  }.merge(process.)

  info formatted_event(event, action: "Shutdown #{process.kind}", **attributes)
end

#start_process(event) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
# File 'lib/lepus/rails/log_subscriber.rb', line 4

def start_process(event)
  process = event.payload[:process]

  attributes = {
    pid: process.pid,
    hostname: process.hostname,
    process_id: process.process_id,
    name: process.name
  }.merge(process.)

  info formatted_event(event, action: "Started #{process.kind}", **attributes)
end

#thread_error(event) ⇒ Object



65
66
67
# File 'lib/lepus/rails/log_subscriber.rb', line 65

def thread_error(event)
  error formatted_event(event, action: "Error in thread", error: formatted_error(event.payload[:error]))
end

#unhandled_signal_error(event) ⇒ Object



83
84
85
# File 'lib/lepus/rails/log_subscriber.rb', line 83

def unhandled_signal_error(event)
  error formatted_event(event, action: "Received unhandled signal", **event.payload.slice(:signal))
end