Sha256: e5440aec117422f52db338bfffdc7616e2e87b01a6f256b5c9542ffde01f2f63

Contents?: true

Size: 1.14 KB

Versions: 4

Compression:

Stored size: 1.14 KB

Contents

# frozen_string_literal: true

require 'json'

module Puma
  class Plugin
    module Telemetry
      module Targets
        # Simple IO Target, publishing metrics to STDOUT or logs
        #
        class IOTarget
          # JSON formatter for IO, expects `call` method accepting telemetry hash
          #
          class JSONFormatter
            # NOTE: Replace dots with dashes for better support of AWS CloudWatch
            #       Log Metric filters, as they don't support dots in key names.
            def self.call(telemetry)
              log = telemetry.transform_keys { |k| k.tr('.', '-') }

              log['name'] = 'Puma::Plugin::Telemetry'
              log['message'] = 'Publish telemetry'

              ::JSON.dump(log)
            end
          end

          def initialize(io: $stdout, formatter: :json)
            @io = io
            @formatter = case formatter
                         when :json then JSONFormatter
                         else formatter
                         end
          end

          def call(telemetry)
            @io.puts(@formatter.call(telemetry))
          end
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
puma-plugin-telemetry-1.1.4 lib/puma/plugin/telemetry/targets/io_target.rb
puma-plugin-telemetry-1.1.2 lib/puma/plugin/telemetry/targets/io_target.rb
puma-plugin-telemetry-1.1.1 lib/puma/plugin/telemetry/targets/io_target.rb
puma-plugin-telemetry-1.1.0 lib/puma/plugin/telemetry/targets/io_target.rb