metric_update.rb 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. module Sidekiq
  2. module Cloudwatch
  3. class MetricUpdate
  4. require_relative 'client'
  5. require_relative 'workers/metric_update_worker'
  6. Dir[File.dirname(__FILE__) + "/metric/**/*.rb"].each { |f| require f }
  7. DEFAULT_METRIC_UPDATE_FREQUENCY_SECONDS = 60
  8. DEFAULT_METRIC_UPDATE_SCHEDULER_FREQUENCY_SECONDS = 600
  9. def schedule!
  10. (metric_update_scheduler_frequency_seconds / metric_update_frequency_seconds).times do |schedule|
  11. ::Sidekiq::Cloudwatch::MetricUpdateWorker.perform_at(Time.now + (schedule * metric_update_frequency_seconds))
  12. end
  13. end
  14. def run!
  15. ::Sidekiq::Cloudwatch::Metric::Base.descendants.each do |sidekiq_metric_class|
  16. client.metric = sidekiq_metric_class.new
  17. client.put
  18. end
  19. end
  20. private
  21. def metric_update_frequency_seconds
  22. (ENV["SIDEKIQ_CLOUDWATCH_METRIC_UPDATE_FREQUENCY_SECONDS"] || DEFAULT_METRIC_UPDATE_FREQUENCY_SECONDS).to_i
  23. end
  24. def metric_update_scheduler_frequency_seconds
  25. (ENV["SIDEKIQ_CLOUDWATCH_METRIC_UPDATE_SCHEDULER_FREQUENCY_SECONDS"] || DEFAULT_METRIC_UPDATE_SCHEDULER_FREQUENCY_SECONDS).to_i
  26. end
  27. def client
  28. @client ||= ::Sidekiq::Cloudwatch::Client.new
  29. end
  30. end
  31. end
  32. end