Class: MessageBus::Diagnostics

Inherits:
Object
  • Object
show all
Defined in:
lib/message_bus/diagnostics.rb

Class Method Summary collapse

Class Method Details

.enableObject



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/message_bus/diagnostics.rb', line 26

def self.enable
  full_path = full_process_path
  start_time = Time.now.to_f
  hostname = self.hostname

  # it may make sense to add a channel per machine/host to streamline
  #  process to process comms
  MessageBus.subscribe('/_diagnostics/hup') do |msg|
    if Process.pid == msg.data["pid"] && hostname == msg.data["hostname"]
      $shutdown = true
      sleep 4
      Process.kill("HUP", $$)
    end
  end

  MessageBus.subscribe('/_diagnostics/discover') do |msg|
    MessageBus.on_connect.call msg.site_id if MessageBus.on_connect
    MessageBus.publish '/_diagnostics/process-discovery', {
      pid: Process.pid,
      process_name: $0,
      full_path: full_path,
      uptime: (Time.now.to_f - start_time).to_i,
      hostname: hostname
    }, user_ids: [msg.data["user_id"]]
    MessageBus.on_disconnect.call msg.site_id if MessageBus.on_disconnect
  end
end

.full_process_pathObject



2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# File 'lib/message_bus/diagnostics.rb', line 2

def self.full_process_path
  begin
    system = `uname`.strip
    if system == "Darwin"
      `ps -o "comm=" -p #{Process.pid}`
    elsif system == "FreeBSD"
      `ps -o command -p #{Process.pid}`.split("\n",2)[1].strip()
    else
      info = `ps -eo "%p|$|%a" | grep '^\\s*#{Process.pid}'`
      info.strip.split('|$|')[1]
    end
  rescue
    # skip it ... not linux or something weird
  end
end

.hostnameObject



18
19
20
21
22
23
24
# File 'lib/message_bus/diagnostics.rb', line 18

def self.hostname
  begin
    `hostname`.strip
  rescue
    # skip it
  end
end