123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- 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
|