# frozen_string_literal: true

module Benchmark
  module Gems
    class CloudWatchLogs < Benchmark::Gem

      def gem_name
        'aws-sdk-cloudwatchlogs'
      end

      def client_module_name
        :CloudWatchLogs
      end

      def operation_benchmarks
        {
          put_log_events_small: {
            setup: proc do |client|
              {log_group_name: 'log_group', log_stream_name: 'log_stream', log_events: (0...5).map { |i| { timestamp: Time.now.to_i, message: "test log event #{i}"}}}
            end,
            test: proc do |client, req|
              client.put_log_events(req)
            end
          },
          put_log_events_large: {
            setup: proc do |client|
              {log_group_name: 'log_group', log_stream_name: 'log_stream', log_events: (0...5000).map { |i| { timestamp: Time.now.to_i, message: "test log event #{i} - #{TestData.random_value(i)}"}}}
            end,
            test: proc do |client, req|
              client.put_log_events(req)
            end
          },
          get_log_events_small: {
            setup: proc do |client|
              client.stub_responses(:get_log_events, [{events: (0...5).map { |i| { timestamp: Time.now.to_i, message: "test log event #{i} - #{TestData.random_value(i)}"}}}])
              {log_group_name: 'log_group', log_stream_name: 'log_stream'}
            end,
            test: proc do |client, req|
              client.get_log_events(req)
            end
          },
          get_log_events_large: {
            setup: proc do |client|
              client.stub_responses(:get_log_events, [{events: (0...5000).map { |i| { timestamp: Time.now.to_i, message: "test log event #{i} - #{TestData.random_value(i)}"}}}])
              {log_group_name: 'log_group', log_stream_name: 'log_stream'}
            end,
            test: proc do |client, req|
              client.get_log_events(req)
            end
          },
          filter_log_events_large: {
            setup: proc do |client|
              client.stub_responses(:filter_log_events, [{events: (0...5000).map { |i| { timestamp: Time.now.to_i, message: "test log event #{i} - #{TestData.random_value(i)}"}}}])
              {log_group_name: 'log_group', log_stream_names: ['log_stream'], start_time: 1, end_time: 1000}
            end,
            test: proc do |client, req|
              client.filter_log_events(req)
            end
          }
        }
      end
    end
  end
end