client.rb 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. module Sidekiq
  2. module Cloudwatch
  3. class Client
  4. require 'aws-sdk'
  5. DEFAULT_NAMESPACE = "Namespace"
  6. DEFAULT_METRIC_NAME = "MetricName"
  7. DEFAULT_DIMENSION_NAME = "AutoScalingGroupName"
  8. DEFAULT_DIMENSION_VALUE = "AutoScalingGroupName"
  9. METRIC_UNITS = {
  10. nil => "None",
  11. :count => "Count"
  12. }
  13. attr_accessor :metric
  14. def initialize(metric = nil)
  15. self.metric = metric
  16. end
  17. def put
  18. client.put_metric_data(put_metric_data_payload)
  19. end
  20. private
  21. def put_metric_data_payload
  22. {:namespace => namespace, :metric_data => metric_data}
  23. end
  24. def metric_data
  25. [
  26. {
  27. :metric_name => metric_name,
  28. :dimensions => dimensions,
  29. :timestamp => timestamp,
  30. :value => value,
  31. :unit => unit
  32. }
  33. ]
  34. end
  35. def namespace
  36. ENV["AWS_CLOUDWATCH_NAMESPACE"] || DEFAULT_NAMESPACE
  37. end
  38. def metric_name
  39. ENV["AWS_CLOUDWATCH_METRIC_NAME"] || DEFAULT_METRIC_NAME
  40. end
  41. def dimension_name
  42. ENV["AWS_CLOUDWATCH_DIMENSION_NAME"] || DEFAULT_DIMENSION_NAME
  43. end
  44. def dimension_value
  45. ENV["AWS_CLOUDWATCH_DIMENSION_VALUE"] || DEFAULT_DIMENSION_VALUE
  46. end
  47. def dimensions
  48. (ENV["AWS_CLOUDWATCH_DIMENSIONS"] && JSON.parse(ENV["AWS_CLOUDWATCH_DIMENSIONS"])) || default_dimensions
  49. end
  50. def default_dimensions
  51. [{:name => dimension_name, :value => dimension_value}]
  52. end
  53. def timestamp
  54. Time.now
  55. end
  56. def value
  57. metric.value
  58. end
  59. def unit
  60. METRIC_UNITS[metric.unit]
  61. end
  62. def client
  63. @client ||= ::Aws::CloudWatch::Client.new
  64. end
  65. end
  66. end
  67. end