Sha256: e135852f8d98b1b7f3b3a023424a21c49d6fd933412d2f8d9a30b293b57248c5

Contents?: true

Size: 1.8 KB

Versions: 2

Compression:

Stored size: 1.8 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
              raise "Event #{title} payload is too big (more that 8KB), event discarded"
            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

2 entries across 2 versions & 1 rubygems

Version Path
dogstatsd-ruby-4.8.2 lib/datadog/statsd/serialization/event_serializer.rb
dogstatsd-ruby-4.8.1 lib/datadog/statsd/serialization/event_serializer.rb