module RubyAemAws::MetricVerifier

Mixin for checking that an instance has associated CloudWatch metrics.

Public Instance Methods

alarm?(alarm_name) click to toggle source

@param alarm_name name of the Cloudwatch alarm @return True if Cloudwatch alarm exists

# File lib/ruby_aem_aws/mixins/metric_verifier.rb, line 126
def alarm?(alarm_name)
  response = get_alarm(alarm_name)

  return true unless response.metric_alarms.empty?
end
component_alarm?(alarm_name) click to toggle source

@param alarm_name name of the Cloudwatch alarm @return True if Cloudwatch alarm exists for component

# File lib/ruby_aem_aws/mixins/metric_verifier.rb, line 26
def component_alarm?(alarm_name)
  alarm?(alarm_name)
end
component_ec2_metric?(metric_name) click to toggle source

@param metric_name Cloudwatch EC2 metric name @return True if Cloudwatch EC2 metric exists for all component instances

# File lib/ruby_aem_aws/mixins/metric_verifier.rb, line 42
def component_ec2_metric?(metric_name)
  namespace = 'AWS/EC2'
  dimensions_name = 'InstanceId'
  instances_with_metric = []
  instances = get_all_instances
  instances_found = instances.count

  instances.each do |instance|
    next if instance.nil?

    instance_id = instance.instance_id
    dimensions_value = instance.instance_id

    response = metric?(namespace, metric_name, dimensions_name, dimensions_value)

    instances_with_metric.push(instance_id) if response.eql? true
  end

  instances_with_metric = instances_with_metric.count

  return true unless instances_with_metric < instances_found
end
component_log_event?(log_stream_name, log_message) click to toggle source

@param log_stream_name Cloudwatch log stream name @param log_message name of the logfile of the log stream @return True if log message exists in Cloudwatch log stream for all component instances

# File lib/ruby_aem_aws/mixins/metric_verifier.rb, line 68
def component_log_event?(log_stream_name, log_message)
  instances_with_log_stream = []
  loggroup_name = "#{@descriptor.stack_prefix_in}#{log_stream_name}"

  instances = get_all_instances
  instances_found = instances.count

  instances.each do |instance|
    next if instance.nil?

    instance_id = instance.instance_id
    log_stream_name = "#{@descriptor.ec2.component}/#{instance_id}"

    response = log_event?(loggroup_name, log_stream_name, log_message)

    instances_with_log_stream.push(instance_id) if response.eql? true
  end
  instances_with_log_stream = instances_with_log_stream.count

  return true unless instances_with_log_stream < instances_found
end
component_log_stream?(log_stream_name) click to toggle source

@param log_stream_name Cloudwatch log stream name @return True if Cloudwatch log stream exists for all component instances

# File lib/ruby_aem_aws/mixins/metric_verifier.rb, line 102
def component_log_stream?(log_stream_name)
  instances_with_log_stream = []
  loggroup_name = "#{@descriptor.stack_prefix_in}#{log_stream_name}"

  instances = get_all_instances
  instances_found = instances.count

  instances.each do |instance|
    next if instance.nil?

    instance_id = instance.instance_id
    log_stream_name = "#{@descriptor.ec2.component}/#{instance_id}"

    response = log_stream?(loggroup_name, log_stream_name)

    instances_with_log_stream.push(instance_id) if response.eql? true
  end
  instances_with_log_stream = instances_with_log_stream.count

  return true unless instances_with_log_stream < instances_found
end
component_loggroup?(log_stream_name) click to toggle source

@param log_stream_name Cloudwatch log stream name @return True if Cloudwatch loggroup exists for component

# File lib/ruby_aem_aws/mixins/metric_verifier.rb, line 92
def component_loggroup?(log_stream_name)
  loggroup_name = "#{@descriptor.stack_prefix_in}#{log_stream_name}"

  response = loggroup?(loggroup_name)

  return true if response.eql? true
end
component_metric?(namespace, metric_name) click to toggle source

@param namespace Cloudwatch metric namespace @param metric_name Cloudwatch metric name @return True if Cloudwatch metric exists for component

# File lib/ruby_aem_aws/mixins/metric_verifier.rb, line 33
def component_metric?(namespace, metric_name)
  dimensions_name = 'FixedDimension'
  dimensions_value = "#{@descriptor.stack_prefix_in}-#{@descriptor.ec2.component}"
  response = metric?(namespace, metric_name, dimensions_name, dimensions_value)
  return true if response.eql? true
end
log_event?(loggroup_name, log_stream_name, log_message) click to toggle source

@param loggroup_name Cloudwatch loggroup name @param log_stream_name Cloudwatch log stream name @param log_message name of the logfile of the log stream @return True if Cloudwatch log event exists

# File lib/ruby_aem_aws/mixins/metric_verifier.rb, line 162
def log_event?(loggroup_name, log_stream_name, log_message)
  response = loggroup?(loggroup_name)
  return false unless response.eql? true

  response = log_stream?(loggroup_name, log_stream_name)
  return false unless response.eql? true

  response = get_log_event(loggroup_name, log_stream_name, log_message)
  return true unless response.events.empty?
end
log_stream?(loggroup_name, log_stream_name) click to toggle source

@param loggroup_name Cloudwatch loggroup name @param log_stream_name Cloudwatch log stream name @return True if Cloudwatch log stream exists

# File lib/ruby_aem_aws/mixins/metric_verifier.rb, line 149
def log_stream?(loggroup_name, log_stream_name)
  response = loggroup?(loggroup_name)
  return false unless response.eql? true

  response = get_log_streams(loggroup_name, log_stream_name)

  return true unless response.log_streams.empty?
end
loggroup?(loggroup_name) click to toggle source

@param loggroup_name Cloudwatch loggroup name @return True if Cloudwatch loggroup exists

# File lib/ruby_aem_aws/mixins/metric_verifier.rb, line 175
def loggroup?(loggroup_name)
  namespace = 'AWS/Logs'
  metric_name = 'IncomingLogEvents'
  dimensions_name = 'LogGroupName'
  dimensions_value = loggroup_name

  dimension_values = dimensions_value_filter_for_cloudwatch_metric(dimensions_name, dimensions_value)
  dimension_filter = dimensions_filter_for_cloudwatch_metric(dimension_values)

  response = get_metrics(namespace, metric_name, dimension_filter)

  return true unless response.metrics.empty?
end
metric?(namespace, metric_name, dimensions_name, dimensions_value) click to toggle source

@param namespace Cloudwatch metric namespace @param metric_name Cloudwatch metric name @param dimensions_name Cloudwatch metric dimension name @param dimensions_value Cloudwatch metric dimension value @return True if Cloudwatch metric exists

# File lib/ruby_aem_aws/mixins/metric_verifier.rb, line 137
def metric?(namespace, metric_name, dimensions_name, dimensions_value)
  dimension_values = dimensions_value_filter_for_cloudwatch_metric(dimensions_name, dimensions_value)
  dimension_filter = dimensions_filter_for_cloudwatch_metric(dimension_values)

  response = get_metrics(namespace, metric_name, dimension_filter)

  return true unless response.metrics.empty?
end