Sha256: d346f2498fe5b9ee01004c22cc462e42e14e32dd9c5d4af3eb6260f579aa925e
Contents?: true
Size: 1.35 KB
Versions: 2
Compression:
Stored size: 1.35 KB
Contents
module Kurchatov class Monitor class Task include Kurchatov::Mixin::Event attr_accessor :thread, :instance def initialize(plugin) @plugin = plugin @thread = Thread.new { @plugin.run } end def died? return false if @thread.alive? # thread died, join and extract error begin @thread.join # call error rescue => e desc = "Plugin '#{@plugin.name}' died. #{e.class}: #{e}\n." + "Plugin: #{@plugin.inspect}. Trace: #{e.backtrace.join("\n")}" Log.error(desc) unless @plugin.ignore_errors event(:service => 'riemann client errors', :desc => desc, :state => 'critical') end end @thread = Thread.new { @plugin.run } true end end attr_accessor :tasks CHECK_ALIVE_TIMEOUT = 5 def initialize(stop = false) @stop_on_error = stop @tasks = Array.new end def <<(plugin) Log.debug("Add new plugin: #{plugin.inspect}") @tasks << Task.new(plugin) end def run loop do @tasks.each { |t| exit Config[:ERROR_PLUGIN_REQ] if t.died? && @stop_on_error } Log.debug("Check alive plugins [#{@tasks.count}]") sleep CHECK_ALIVE_TIMEOUT end end def tasks_status @tasks.map { |t| t.status } end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
kurchatov-0.0.6.pre.2 | lib/kurchatov/monitor.rb |
kurchatov-0.0.6.pre.1 | lib/kurchatov/monitor.rb |