module Cli::Poller

Public Instance Methods

poll(interval) click to toggle source
# File lib/as-combined-metrics/poller.rb, line 2
def poll(interval)
  logger.progname = "#{Module.nesting.first.to_s} #{__method__}"
 
  if options[:scalein_only]
    modes = [:ScaleIn]
  elsif  options[:scaleout_only]
    modes = [:ScaleOut]
  else
    modes = [:ScaleIn, :ScaleOut]
  end

  loop do
    @combined_metrics = {}
    modes.each do |mode|
      @config[:autoscale_group_name].each do |autoscale_group|
      logger.info "Polling metrics for #{autoscale_group} AutoScale Group on #{mode}"

        @config[mode].each do |metric|
          logger.debug "Getting stats for #{autoscale_group} AutoScale Group on metric #{metric}"
          @combined_metrics[metric[:metric_name]] ||= {}

          if metric.has_key?(:aggregate_as_group)
            logger.debug "Aggregating autoscale group metrics"
            @combined_metrics[metric[:metric_name]][:measure] = aggregate_instances_per_as_group(metric)
          else
            metric[:dimensions] = [{ name: "AutoScalingGroupName", value: autoscale_group}]
            @combined_metrics[metric[:metric_name]][:measure] = fetch_metric(metric) unless @combined_metrics[metric[:metric_name]].has_key?(:measure)
          end

          @combined_metrics[metric[:metric_name]][:threshold] = metric[:threshold]
          @combined_metrics[metric[:metric_name]][:comparison_operator] = metric[:comparison_operator]
        end

        logger.info { set_color  "Combined metrics attributes for #{autoscale_group} AutoScale Group on #{mode}: #{@combined_metrics}", :cyan }
        combined_metric_value = check_combined_metrics(mode)

        logger.info { set_color "Combined metrics value for #{autoscale_group} AutoScale Group: #{combined_metric_value} => [0 = Do Not #{mode}, 1 = OK To #{mode}]", :yellow, :bold }

        publish_metric(mode, autoscale_group, combined_metric_value)
      end
    end

      if options[:once]
        logger.info { set_color "Ran Once - Exiting now..." }
        exit 0
      else
        logger.info { set_color "Next metrics check in #{interval} seconds..." }
        sleep interval
      end
   end
end