Class: MessageBus::Diagnostics
- Inherits:
-
Object
- Object
- MessageBus::Diagnostics
- Defined in:
- lib/message_bus/diagnostics.rb
Class Method Summary collapse
Class Method Details
.enable ⇒ Object
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_path ⇒ Object
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 |
.hostname ⇒ Object
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 |