Class: ClearSkies::AWS::CloudWatch::Gauge
- Inherits:
-
GreekFire::Gauge
- Object
- GreekFire::Gauge
- ClearSkies::AWS::CloudWatch::Gauge
- Includes:
- ActiveModel::Conversion
- Defined in:
- lib/clear_skies/aws/cloud_watch/gauge.rb
Direct Known Subclasses
Class Method Summary collapse
Instance Method Summary collapse
- #aws_metrics ⇒ Object
-
#initialize(namespace, metric_name, dimensions, statistics, description: nil, aws_parameters: nil, &block) ⇒ Gauge
constructor
A new instance of Gauge.
- #labels_from_metric(metric) ⇒ Object
- #metrics ⇒ Object
Constructor Details
#initialize(namespace, metric_name, dimensions, statistics, description: nil, aws_parameters: nil, &block) ⇒ Gauge
Returns a new instance of Gauge.
12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/clear_skies/aws/cloud_watch/gauge.rb', line 12 def initialize(namespace, metric_name, dimensions, statistics, description:nil, aws_parameters:nil, &block) super("#{namespace.underscore.gsub("/", "_")}_#{metric_name.underscore}", description: description) @namespace = namespace @metric_name = metric_name @dimensions = dimensions @statistics = statistics.select { |stat| ["SampleCount", "Average", "Sum", "Minimum", "Maximum"].include?(stat.to_s) } @extended_statistics = statistics - @statistics @aws_parameters = aws_parameters || { } @block = block end |
Class Method Details
.cloudwatch_client ⇒ Object
24 25 26 |
# File 'lib/clear_skies/aws/cloud_watch/gauge.rb', line 24 def self.cloudwatch_client @client ||= Aws::CloudWatch::Client.new end |
.register(*args, &block) ⇒ Object
8 9 10 |
# File 'lib/clear_skies/aws/cloud_watch/gauge.rb', line 8 def self.register(*args, &block) GreekFire::Metric.register(self.new(*args, &block)) end |
Instance Method Details
#aws_metrics ⇒ Object
28 29 30 31 32 33 34 |
# File 'lib/clear_skies/aws/cloud_watch/gauge.rb', line 28 def aws_metrics Aws::CloudWatch::Resource.new(client: self.class.cloudwatch_client).metrics( namespace: @namespace, metric_name: @metric_name, dimensions: @dimensions.map {|dimension| {name: dimension} } ).select { |metrics| metrics.dimensions.count == @dimensions.count } end |
#labels_from_metric(metric) ⇒ Object
36 37 38 39 40 41 |
# File 'lib/clear_skies/aws/cloud_watch/gauge.rb', line 36 def labels_from_metric(metric) metric.dimensions.inject(ActiveSupport::HashWithIndifferentAccess.new) do |labels, dimension| labels[dimension.name.underscore] = dimension.value labels end end |
#metrics ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/clear_skies/aws/cloud_watch/gauge.rb', line 43 def metrics aws_metrics.map do |metric| labels = labels_from_metric(metric) next unless @block.call(labels) if @block stats = metric.get_statistics( start_time: Time.now.advance(@aws_parameters[:start_time] || {minutes: -6}), end_time: Time.now.advance(@aws_parameters[:end_time] || {minutes: -5}), period: @aws_parameters[:period] || 1, statistics: @statistics, extended_statistics: @extended_statistics, dimensions: metric.dimensions ) stats.datapoints.map do |datapoint| datapoint.to_h.select {|k, v| ![:unit, :timestamp].include?(k) }.map do |key, value| if (key == :extended_statistics) value.map {|e_key, e_value| GreekFire::Metric.new(name, labels.merge({statistic: e_key}), e_value)} else GreekFire::Metric.new(name, labels.merge({statistic: key}), value) end end end end.flatten.compact end |