Sha256: ac14313b132ca787a4dd90d6a0753df16f92ca6ce1d5a3e00e3b828238b13c5d

Contents?: true

Size: 1.94 KB

Versions: 17

Compression:

Stored size: 1.94 KB

Contents

# frozen_string_literal: true

module Datadog
  class Statsd
    module Serialization
      class EventSerializer
        EVENT_BASIC_OPTIONS = {
          date_happened:    'd:',
          hostname:         'h:',
          aggregation_key:  'k:',
          priority:         'p:',
          source_type_name: 's:',
          alert_type:       't:',
        }.freeze

        def initialize(global_tags: [])
          @tag_serializer = TagSerializer.new(global_tags)
        end

        def format(title, text, options = EMPTY_OPTIONS)
          title = escape(title)
          text = escape(text)

          String.new.tap do |event|
            event << '_e{'
            event << title.bytesize.to_s
            event << ','
            event << text.bytesize.to_s
            event << '}:'
            event << title
            event << '|'
            event << text

            # we are serializing the generic service check options
            # before serializing specialized options that need edge-cases
            EVENT_BASIC_OPTIONS.each do |option_key, shortcut|
              if value = options[option_key]
                event << '|'
                event << shortcut
                event << value.to_s.delete('|')
              end
            end

            # also returns the global tags from serializer
            if tags = tag_serializer.format(options[:tags])
              event << '|#'
              event << tags
            end

            if event.bytesize > MAX_EVENT_SIZE
              if options[:truncate_if_too_long]
                event.slice!(MAX_EVENT_SIZE..event.length)
              else
                raise "Event #{title} payload is too big (more that 8KB), event discarded"
              end
            end
          end
        end

        protected
        attr_reader :tag_serializer

        def escape(text)
          text.delete('|').tap do |t|
            t.gsub!("\n", '\n')
          end
        end
      end
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
dogstatsd-ruby-5.6.5 lib/datadog/statsd/serialization/event_serializer.rb
dogstatsd-ruby-5.6.4 lib/datadog/statsd/serialization/event_serializer.rb
dogstatsd-ruby-5.6.3 lib/datadog/statsd/serialization/event_serializer.rb
dogstatsd-ruby-5.6.2 lib/datadog/statsd/serialization/event_serializer.rb
dogstatsd-ruby-5.6.1 lib/datadog/statsd/serialization/event_serializer.rb
dogstatsd-ruby-5.6.0 lib/datadog/statsd/serialization/event_serializer.rb
dogstatsd-ruby-5.5.0 lib/datadog/statsd/serialization/event_serializer.rb
dogstatsd-ruby-5.4.0 lib/datadog/statsd/serialization/event_serializer.rb
dogstatsd-ruby-5.3.3 lib/datadog/statsd/serialization/event_serializer.rb
dogstatsd-ruby-5.3.2 lib/datadog/statsd/serialization/event_serializer.rb
dogstatsd-ruby-5.3.1 lib/datadog/statsd/serialization/event_serializer.rb
dogstatsd-ruby-5.3.0 lib/datadog/statsd/serialization/event_serializer.rb
dogstatsd-ruby-5.2.0 lib/datadog/statsd/serialization/event_serializer.rb
dogstatsd-ruby-5.1.0 lib/datadog/statsd/serialization/event_serializer.rb
dogstatsd-ruby-5.0.1 lib/datadog/statsd/serialization/event_serializer.rb
dogstatsd-ruby-5.0.0 lib/datadog/statsd/serialization/event_serializer.rb
dogstatsd-ruby-4.8.3 lib/datadog/statsd/serialization/event_serializer.rb