Class: Chronos::Core::TelemetrySerializer

Inherits:
Object
  • Object
show all
Defined in:
lib/chronos/core/telemetry_event.rb

Overview

Serializes framework telemetry into the common Chronos event envelope.

Examples:

serialized = serializer.call(event)

Instance Method Summary collapse

Constructor Details

#initialize(config, clock = nil, options = {}) ⇒ TelemetrySerializer

Returns a new instance of TelemetrySerializer.



64
65
66
67
68
69
70
71
# File 'lib/chronos/core/telemetry_event.rb', line 64

def initialize(config, clock = nil, options = {})
  @config = config
  @clock = clock || proc { Time.now }
  @sanitizer = options[:sanitizer] || Sanitizer.new(config)
  @safe_serializer = options[:safe_serializer] || SafeSerializer.new
  @max_payload_size = options[:max_payload_size] || proc { @config.max_payload_size }
  @runtime_info = RuntimeInfo.new
end

Instance Method Details

#call(event) ⇒ Object

Raises:

  • (ArgumentError)


73
74
75
76
77
78
79
80
81
82
# File 'lib/chronos/core/telemetry_event.rb', line 73

def call(event)
  raise ArgumentError, "event must be a TelemetryEvent" unless event.is_a?(TelemetryEvent)

  envelope = @safe_serializer.call(@sanitizer.call(build_envelope(event)))
  body = JSON.generate(envelope)
  body = JSON.generate(compact_envelope(envelope)) if body.bytesize > @max_payload_size.call
  raise Error, "event exceeds max_payload_size" if body.bytesize > @max_payload_size.call

  SerializedEvent.new(event.event_id, body)
end