Sha256: b4eba3e988626a24644aa76ce5ee06d408e0cd75611c3692645890a977abb301
Contents?: true
Size: 1.22 KB
Versions: 3
Compression:
Stored size: 1.22 KB
Contents
module Instrumentation # Reads data from system and process information and writes it to # websocket class Report attr_reader :memory, :loadavg attr_accessor :socket def initialize(pid) @pid = pid @sleep = 1 @memory = BoundedArray.new(300) @loadavg = BoundedArray.new(300) @socket = nil end def start @thread = Thread.new do loop do read_data send_data if socket sleep @sleep end end end def read_data now = Time.now.strftime('%FT%T') @memory = @memory << [now, read_memory] @loadavg = @loadavg << [now, read_loadavg] rescue => error puts "Error when reading data: #{error.inspect}" end def send_data socket.send_data(event(:memory, @memory.items)) socket.send_data(event(:loadavg, @loadavg.items)) rescue => error puts "Error when sending data: #{error.inspect}" end def event(name, data) { data_type: name, data: data }.to_json end def read_memory Memory.new(@pid).read end def read_loadavg LoadAverage.new.read[:one] end def join @thread.join end def shutdown @thread.kill end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
process-instrumentation-0.1.3 | lib/instrumentation/report.rb |
process-instrumentation-0.1.2 | lib/instrumentation/report.rb |
process-instrumentation-0.1.1 | lib/instrumentation/report.rb |