agent_controller_concern.rb 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. module AgentControllerConcern
  2. extend ActiveSupport::Concern
  3. included do
  4. validate :validate_control_action
  5. end
  6. def default_options
  7. {
  8. 'action' => 'run',
  9. }
  10. end
  11. def control_action
  12. interpolated['action']
  13. end
  14. def validate_control_action
  15. case options['action']
  16. when 'run'
  17. control_targets.each { |target|
  18. if target.cannot_be_scheduled?
  19. errors.add(:base, "#{target.name} cannot be scheduled")
  20. end
  21. }
  22. when 'enable', 'disable'
  23. when nil
  24. errors.add(:base, "action must be specified")
  25. when /\{[%{]/
  26. # Liquid template
  27. else
  28. errors.add(:base, 'invalid action')
  29. end
  30. end
  31. def control!
  32. control_targets.each { |target|
  33. begin
  34. case control_action
  35. when 'run'
  36. case
  37. when target.cannot_be_scheduled?
  38. error "'#{target.name}' cannot run without an incoming event"
  39. when target.disabled?
  40. log "Agent run ignored for disabled Agent '#{target.name}'"
  41. else
  42. Agent.async_check(target.id)
  43. log "Agent run queued for '#{target.name}'"
  44. end
  45. when 'enable'
  46. case
  47. when target.disabled?
  48. target.update!(disabled: false)
  49. log "Agent '#{target.name}' is enabled"
  50. else
  51. log "Agent '#{target.name}' is already enabled"
  52. end
  53. when 'disable'
  54. case
  55. when target.disabled?
  56. log "Agent '#{target.name}' is alread disabled"
  57. else
  58. target.update!(disabled: true)
  59. log "Agent '#{target.name}' is disabled"
  60. end
  61. when ''
  62. # Do nothing
  63. else
  64. error "Unsupported action '#{control_action}' ignored for '#{target.name}'"
  65. end
  66. rescue => e
  67. error "Failed to #{control_action} '#{target.name}': #{e.message}"
  68. end
  69. }
  70. end
  71. end