class Meteorlog::Client

Public Class Methods

new(options = {}) click to toggle source
# File lib/meteorlog/client.rb, line 5
def initialize(options = {})
  @options = options
  @cloud_watch_logs = Aws::CloudWatchLogs::Client.new
end

Public Instance Methods

apply(file) click to toggle source
# File lib/meteorlog/client.rb, line 15
def apply(file)
  walk(file)
end
export(opts = {}) click to toggle source
# File lib/meteorlog/client.rb, line 10
def export(opts = {})
  exported = Meteorlog::Exporter.export(@cloud_watch_logs, @options.merge(opts))
  Meteorlog::DSL.convert(exported, @options.merge(opts))
end

Private Instance Methods

load_file(file) click to toggle source
# File lib/meteorlog/client.rb, line 101
def load_file(file)
  if file.kind_of?(String)
    open(file) do |f|
      Meteorlog::DSL.parse(f.read, file)
    end
  elsif file.respond_to?(:read)
    Meteorlog::DSL.parse(file.read, file.path)
  else
    raise TypeError, "can't convert #{file} into File"
  end
end
walk(file) click to toggle source
# File lib/meteorlog/client.rb, line 21
def walk(file)
  dsl = load_file(file)
  dsl_log_groups = collect_to_hash(dsl.log_groups, :log_group_name)
  aws = Meteorlog::Wrapper.wrap(@cloud_watch_logs, @options)
  aws_log_groups = collect_to_hash(aws.log_groups, :log_group_name)

  dsl_log_groups.each do |log_group_name, dsl_log_group|
    next unless Meteorlog::Utils.matched?(log_group_name, @options[:include], @options[:exclude])
    aws_log_group = aws_log_groups[log_group_name]

    unless aws_log_group
      aws_log_group = aws.log_groups.create(log_group_name)
      aws_log_groups[log_group_name] = aws_log_group
    end
  end

  dsl_log_groups.each do |log_group_name, dsl_log_group|
    next unless Meteorlog::Utils.matched?(log_group_name, @options[:include], @options[:exclude])
    aws_log_group = aws_log_groups.delete(log_group_name)
    walk_log_group(dsl_log_group, aws_log_group)
  end

  unless @options[:skip_delete_group]
    aws_log_groups.each do |log_group_name, aws_log_group|
      next unless Meteorlog::Utils.matched?(log_group_name, @options[:include], @options[:exclude])
      aws_log_group.delete
    end
  end

  aws.modified?
end
walk_log_group(dsl_log_group, aws_log_group) click to toggle source
# File lib/meteorlog/client.rb, line 53
def walk_log_group(dsl_log_group, aws_log_group)
  unless dsl_log_group.any_log_streams
    walk_log_streams(dsl_log_group.log_streams, aws_log_group.log_streams)
  end

  walk_metric_filters(dsl_log_group.metric_filters, aws_log_group.metric_filters)
end
walk_log_streams(dsl_log_streams, aws_log_streams) click to toggle source
# File lib/meteorlog/client.rb, line 61
def walk_log_streams(dsl_log_streams, aws_log_streams)
  collection_api = aws_log_streams
  dsl_log_streams = collect_to_hash(dsl_log_streams, :log_stream_name)
  aws_log_streams = collect_to_hash(aws_log_streams, :log_stream_name)

  dsl_log_streams.each do |log_stream_name, dsl_log_stream|
    aws_log_stream = aws_log_streams.delete(log_stream_name)

    unless aws_log_stream
      collection_api.create(log_stream_name)
    end
  end

  aws_log_streams.each do |log_stream_name, aws_log_stream|
    aws_log_stream.delete
  end
end
walk_metric_filters(dsl_metric_filters, aws_metric_filters) click to toggle source
# File lib/meteorlog/client.rb, line 79
def walk_metric_filters(dsl_metric_filters, aws_metric_filters)
  collection_api = aws_metric_filters
  dsl_metric_filters = collect_to_hash(dsl_metric_filters, :filter_name)
  aws_metric_filters = collect_to_hash(aws_metric_filters, :filter_name)

  dsl_metric_filters.each do |filter_name, dsl_metric_filter|
    aws_metric_filter = aws_metric_filters.delete(filter_name)

    if aws_metric_filter
      unless aws_metric_filter.eql?(dsl_metric_filter)
        aws_metric_filter.update(dsl_metric_filter)
      end
    else
      collection_api.create(filter_name, dsl_metric_filter)
    end
  end

  aws_metric_filters.each do |filter_name, aws_metric_filter|
    aws_metric_filter.delete
  end
end