diff options
| author | Danilo Sousa <dsgoncalves@uoldiveo.com> | 2017-08-14 18:50:48 -0300 | 
|---|---|---|
| committer | Danilo Sousa <dsgoncalves@uoldiveo.com> | 2017-08-15 11:57:58 -0300 | 
| commit | 1b9cce245de59ae1d2cff0979d640e679b720590 (patch) | |
| tree | a0a852a2faf2ae4d65d2f2adf588099de27e3bd3 /lib/oxidized | |
| parent | 9d95f9e4404f2857475a7469e511441922c21bf6 (diff) | |
create `worker_done` event
trigger a event when a full cycle was completed
Diffstat (limited to 'lib/oxidized')
| -rw-r--r-- | lib/oxidized/hook.rb | 1 | ||||
| -rw-r--r-- | lib/oxidized/node.rb | 2 | ||||
| -rw-r--r-- | lib/oxidized/worker.rb | 23 | 
3 files changed, 25 insertions, 1 deletions
| diff --git a/lib/oxidized/hook.rb b/lib/oxidized/hook.rb index 029688d..c27f6fd 100644 --- a/lib/oxidized/hook.rb +++ b/lib/oxidized/hook.rb @@ -23,6 +23,7 @@ class HookManager      :node_success,      :node_fail,      :post_store, +    :nodes_done    ]    attr_reader :registered_hooks diff --git a/lib/oxidized/node.rb b/lib/oxidized/node.rb index 8d0d0af..4f9ae54 100644 --- a/lib/oxidized/node.rb +++ b/lib/oxidized/node.rb @@ -8,6 +8,7 @@ module Oxidized      attr_reader :name, :ip, :model, :input, :output, :group, :auth, :prompt, :vars, :last, :repo      attr_accessor :running, :user, :msg, :from, :stats, :retry      alias :running? :running +      def initialize opt        Oxidized.logger.debug 'resolving DNS for %s...' % opt[:name]        # remove the prefix if an IP Address is provided with one as IPAddr converts it to a network address. @@ -217,6 +218,7 @@ module Oxidized        end        #model +      # FIXME: warning: instance variable @model not initialized        if Oxidized.config.models.has_key?(@model.class.name.to_s.downcase)          if Oxidized.config.models[@model.class.name.to_s.downcase].has_key?(key_str)            value = Oxidized.config.models[@model.class.name.to_s.downcase][key_str] diff --git a/lib/oxidized/worker.rb b/lib/oxidized/worker.rb index 80d65cb..dfe9803 100644 --- a/lib/oxidized/worker.rb +++ b/lib/oxidized/worker.rb @@ -3,6 +3,7 @@ module Oxidized    require 'oxidized/jobs'    class Worker      def initialize nodes +      @jobs_done  = 0        @nodes      = nodes        @jobs       = Jobs.new(Oxidized.config.threads, Oxidized.config.interval, @nodes)        @nodes.jobs = @jobs @@ -14,8 +15,9 @@ module Oxidized        @jobs.delete_if { |job| ended << job if not job.alive? }        ended.each      { |job| process job }        @jobs.work +        while @jobs.size < @jobs.want -        Oxidized.logger.debug "lib/oxidized/worker.rb: Jobs #{@jobs.size}, Want: #{@jobs.want}" +        Oxidized.logger.debug "lib/oxidized/worker.rb: Jobs running: #{@jobs.size} of #{@jobs.want} - ended: #{@jobs_done} of #{@nodes.size}"          # ask for next node in queue non destructive way          nextnode = @nodes.first          unless nextnode.last.nil? @@ -29,6 +31,8 @@ module Oxidized          @jobs.push Job.new node          Oxidized.logger.debug "lib/oxidized/worker.rb: Added #{node.name} to the job queue"        end + +      run_done_hook if is_cycle_finished?        Oxidized.logger.debug("lib/oxidized/worker.rb: #{@jobs.size} jobs running in parallel") unless @jobs.empty?      end @@ -38,6 +42,8 @@ module Oxidized        node.stats.add job        @jobs.duration job.time        node.running = false +      @jobs_done += 1 # needed for worker_done event +        if job.status == :success          Oxidized.Hooks.handle :node_success, :node => node,                                               :job => job @@ -71,5 +77,20 @@ module Oxidized        Oxidized.logger.warn "#{node.name} not found, removed while collecting?"      end +    private + +    def is_cycle_finished? +      @jobs_done > 0 && @jobs_done % @nodes.count == 0 +    end + +    def run_done_hook +      Oxidized.logger.debug "lib/oxidized/worker.rb: Running :nodes_done hook" +      Oxidized.Hooks.handle :nodes_done +    rescue => e +      # swallow the hook erros and continue as normal +      Oxidized.logger.error "lib/oxidized/worker.rb: #{e.message}" +    ensure +      @jobs_done = 0 +    end    end  end | 
