class CWLogsToS3::Command

Public Instance Methods

execute() click to toggle source
# File lib/cwlogs-s3/command.rb, line 12
def execute

  @event_cnt = 0
  @page_cnt = 0

  ending = Chronic.parse(command_options[:ending])
  period = ChronicDuration.parse(command_options[:period])
  start = Time.at(ending.to_i - period)

  s3Uri = URI(command_options[:s3_path])
  @bucket = s3Uri.host
  @s3_prefix = s3Uri.path.gsub!(/^\//, '')

  Escort::Logger.output.puts "Exporting from #{start} to #{ending}"

  @cwl = Aws::CloudWatchLogs::Client.new(region: command_options[:region])
  @s3 = Aws::S3::Resource.new(region: command_options[:region])

  @stream_list = []

  resp = @cwl.describe_log_streams(
      log_group_name: command_options[:group],
  )

  resp.each do |streams|
    streams[:log_streams].each do |stream|
      @stream_list.push stream[:log_stream_name]
    end
  end

  Escort::Logger.output.puts "Exporting streams #{@stream_list.join(', ')}"

  page = 0

  @stream_list.each do |stream|
    Escort::Logger.output.puts "Starting stream #{stream}"
    resp = @cwl.get_log_events(
        log_group_name: command_options[:group],
        log_stream_name: stream,
        start_time: start.to_i * 1000,
        end_time: ending.to_i * 1000,
        start_from_head: true
    )

    resp.each do |log_page|
      if log_page[:events].length == 0
        break
      end
      put_page log_page[:events]
    end
  end

  Escort::Logger.output.puts "Finished, #{@event_cnt} events extracted."
end
put_page(events) click to toggle source
# File lib/cwlogs-s3/command.rb, line 67
def put_page events
  page_content = ''
  events.each do |event|
    @event_cnt = @event_cnt + 1
    page_content << event[:message] << "\n"
  end
  object_name = @s3_prefix + randomise_prefix + '_' + @page_cnt.to_s + '.log'
  @s3.bucket(@bucket).object(object_name).put(
      :body => page_content
  )
  Escort::Logger.output.puts "Put #{object_name} to S3."
  @page_cnt = @page_cnt + 1
end
randomise_prefix() click to toggle source
# File lib/cwlogs-s3/command.rb, line 81
def randomise_prefix
  SecureRandom.hex(2).to_s
end