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