12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- module AgentControllerConcern
- extend ActiveSupport::Concern
- included do
- validate :validate_control_action
- end
- def default_options
- {
- 'action' => 'run'
- }
- end
- def control_action
- interpolated['action']
- end
- def validate_control_action
- case options['action']
- when 'run'
- control_targets.each { |target|
- if target.cannot_be_scheduled?
- errors.add(:base, "#{target.name} cannot be scheduled")
- end
- }
- when 'configure'
- if !options['configure_options'].is_a?(Hash) || options['configure_options'].empty?
- errors.add(:base, "A non-empty hash must be specified in the 'configure_options' option when using the 'configure' action.")
- end
- when 'enable', 'disable'
- when nil
- errors.add(:base, "action must be specified")
- when /\{[%{]/
- # Liquid template
- else
- errors.add(:base, 'invalid action')
- end
- end
- def control!
- control_targets.each do |target|
- interpolate_with('target' => target) do
- begin
- case action = control_action
- when 'run'
- case
- when target.cannot_be_scheduled?
- error "'#{target.name}' cannot run without an incoming event"
- when target.disabled?
- log "Agent run ignored for disabled Agent '#{target.name}'"
- else
- Agent.async_check(target.id)
- log "Agent run queued for '#{target.name}'"
- end
- when 'enable'
- case
- when target.disabled?
- if boolify(interpolated['drop_pending_events'])
- target.drop_pending_events = true
- end
- target.update!(disabled: false)
- log "Agent '#{target.name}' is enabled"
- else
- log "Agent '#{target.name}' is already enabled"
- end
- when 'disable'
- case
- when target.disabled?
- log "Agent '#{target.name}' is alread disabled"
- else
- target.update!(disabled: true)
- log "Agent '#{target.name}' is disabled"
- end
- when 'configure'
- target.update! options: target.options.deep_merge(interpolated['configure_options'])
- log "Agent '#{target.name}' is configured with #{interpolated['configure_options'].inspect}"
- when ''
- log 'No action is performed.'
- else
- error "Unsupported action '#{action}' ignored for '#{target.name}'"
- end
- rescue => e
- error "Failed to #{action} '#{target.name}': #{e.message}"
- end
- end
- end
- end
- end
|