agent_controller_concern.rb 1.2KB

    module AgentControllerConcern extend ActiveSupport::Concern included do validate :validate_control_action end def default_options { 'action' => 'run', } end def control_action options['action'].presence || 'run' end def validate_control_action case control_action when 'run' control_targets.each { |target| if target.cannot_be_scheduled? errors.add(:base, "#{target.name} cannot be scheduled") end } when 'enable', 'disable' else errors.add(:base, 'invalid action') end end def control! control_targets.active.each { |target| begin case control_action when 'run' log "Agent run queued for '#{target.name}'" Agent.async_check(target.id) when 'enable' log "Enabling the Agent '#{target.name}'" target.update!(disable: false) if target.disabled? when 'disable' log "Disabling the Agent '#{target.name}'" target.update!(disable: true) unless target.disabled? end rescue => e error "Failed to #{control_action} '#{target.name}': #{e.message}" end } end end