Sha256: 26b372d541f7ee1b83fe22420814af7706f3e1bd2c97088731b7b843e5409cae

Contents?: true

Size: 1.43 KB

Versions: 1

Compression:

Stored size: 1.43 KB

Contents

class Radiosonde::Client
  include Radiosonde::Logger::Helper
  include Radiosonde::Utils

  def initialize(options = {})
    @options = options
    @cloud_watch = AWS::CloudWatch.new
  end

  def export(opts = {})
    exported = nil

    AWS.memoize do
      exported = Radiosonde::Exporter.export(@cloud_watch, @options.merge(opts))
    end

    Radiosonde::DSL.convert(exported, @options.merge(opts))
  end

  def apply(file)
    AWS.memoize { walk(file) }
  end

  private

  def walk(file)
    dsl = load_file(file)
    dsl_alarms = collect_to_hash(dsl.alarms, :alarm_name)
    aws = Radiosonde::Wrapper.wrap(@cloud_watch, @options)
    aws_alarms = collect_to_hash(aws.alarms, :alarm_name)

    dsl_alarms.each do |alarm_name, dsl_alarm|
      aws_alarm = aws_alarms.delete(alarm_name)

      if aws_alarm
        walk_alarm(dsl_alarm, aws_alarm)
      else
        aws.alarms.create(alarm_name, dsl_alarm)
      end
    end

    aws_alarms.each do |alarm_name, aws_alarm|
      aws_alarm.delete
    end

    @cloud_watch.modified?
  end

  def walk_alarm(dsl_alarm, aws_alarm)
    unless aws_alarm.eql?(dsl_alarm)
      aws_alarm.update(dsl_alarm)
    end
  end

  def load_file(file)
    if file.kind_of?(String)
      open(file) do |f|
        Radiosonde::DSL.parse(f.read, file)
      end
    elsif file.respond_to?(:read)
      Radiosonde::DSL.parse(file.read, file.path)
    else
      raise TypeError, "can't convert #{file} into File"
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
radiosonde-0.0.1 lib/radiosonde/client.rb