From 9569bf94f954261568ad7075ea3f49f48b359ace Mon Sep 17 00:00:00 2001 From: Neel Shah Date: Thu, 22 Feb 2024 17:07:19 +0100 Subject: [PATCH] capture envelope --- sentry-ruby/lib/sentry/envelope.rb | 11 ++++++----- sentry-ruby/lib/sentry/metrics/aggregator.rb | 13 ++++++++++++- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/sentry-ruby/lib/sentry/envelope.rb b/sentry-ruby/lib/sentry/envelope.rb index de981d5f2..7b6272229 100644 --- a/sentry-ruby/lib/sentry/envelope.rb +++ b/sentry-ruby/lib/sentry/envelope.rb @@ -7,11 +7,12 @@ class Item STACKTRACE_FRAME_LIMIT_ON_OVERSIZED_PAYLOAD = 500 MAX_SERIALIZED_PAYLOAD_SIZE = 1024 * 1000 - attr_accessor :headers, :payload + attr_accessor :headers, :payload, :is_json - def initialize(headers, payload) + def initialize(headers, payload, is_json: true) @headers = headers @payload = payload + @is_json = is_json end def type @@ -19,7 +20,7 @@ def type end def to_s - [JSON.generate(@headers), JSON.generate(@payload)].join("\n") + [JSON.generate(@headers), @is_json ? JSON.generate(@payload) : @payload].join("\n") end def serialize @@ -78,8 +79,8 @@ def initialize(headers = {}) @items = [] end - def add_item(headers, payload) - @items << Item.new(headers, payload) + def add_item(headers, payload, is_json: true) + @items << Item.new(headers, payload, is_json: is_json) end def item_types diff --git a/sentry-ruby/lib/sentry/metrics/aggregator.rb b/sentry-ruby/lib/sentry/metrics/aggregator.rb index a65ba6e6c..884ec751c 100644 --- a/sentry-ruby/lib/sentry/metrics/aggregator.rb +++ b/sentry-ruby/lib/sentry/metrics/aggregator.rb @@ -70,8 +70,19 @@ def flush(force: false) return if flushable_buckets.empty? payload = serialize_buckets(flushable_buckets) + envelope = Envelope.new + envelope.add_item( + { type: 'statsd', length: payload.bytesize }, + payload, + is_json: false + ) + log_debug("[Metrics::Aggregator] flushing buckets: #{flushable_buckets}") log_debug("[Metrics::Aggregator] payload: #{payload}") + + Sentry.background_worker.perform do + @client.transport.send_envelope(envelope) + end end def kill @@ -136,7 +147,7 @@ def serialize_buckets(buckets) timestamp_buckets.map do |metric_key, metric| type, key, unit, tags = metric_key values = metric.serialize.join(':') - sanitized_tags = tags.map { |k, v| "#{sanitize_key(k)}:#{sanitize_value(v)}"}.join(',') + sanitized_tags = tags.map { |k, v| "#{sanitize_key(k)}:#{sanitize_value(v)}" }.join(',') "#{sanitize_key(key)}@#{unit}:#{values}|#{type}|\##{sanitized_tags}|T#{timestamp}" end