dry_runnable.rb 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. module DryRunnable
  2. def dry_run!
  3. readonly!
  4. class << self
  5. prepend Sandbox
  6. end
  7. log = StringIO.new
  8. @dry_run_logger = Logger.new(log)
  9. @dry_run_results = {
  10. events: [],
  11. }
  12. begin
  13. raise "#{short_type} does not support dry-run" unless can_dry_run?
  14. check
  15. rescue => e
  16. error "Exception during dry-run. #{e.message}: #{e.backtrace.join("\n")}"
  17. end
  18. @dry_run_results.update(
  19. memory: memory,
  20. log: log.string,
  21. )
  22. end
  23. module Sandbox
  24. attr_accessor :results
  25. def logger
  26. @dry_run_logger
  27. end
  28. def save
  29. valid?
  30. end
  31. def save!
  32. save or raise ActiveRecord::RecordNotSaved
  33. end
  34. def log(message, options = {})
  35. case options[:level] || 3
  36. when 0..2
  37. sev = Logger::DEBUG
  38. when 3
  39. sev = Logger::INFO
  40. else
  41. sev = Logger::ERROR
  42. end
  43. logger.log(sev, message)
  44. end
  45. def create_event(event_hash)
  46. if can_create_events?
  47. @dry_run_results[:events] << event_hash[:payload]
  48. else
  49. error "This Agent cannot create events!"
  50. end
  51. end
  52. end
  53. end