Module: Dontbugme::TracesHelper

Defined in:
app/helpers/dontbugme/traces_helper.rb

Constant Summary collapse

OUTPUT_KEYS =
%w[output result response_body].freeze
DEDICATED_INPUT_KEYS =
%w[input].freeze

Instance Method Summary collapse

Instance Method Details

#format_span_detail_for_display(span) ⇒ Object



57
58
59
# File 'app/helpers/dontbugme/traces_helper.rb', line 57

def format_span_detail_for_display(span)
  span.detail
end

#format_span_payload(span) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'app/helpers/dontbugme/traces_helper.rb', line 38

def format_span_payload(span)
  return [] if span.payload.blank?

  payload = span.payload.is_a?(Hash) ? span.payload : {}
  payload.map do |key, value|
    next if value.nil?
    next if OUTPUT_KEYS.include?(key.to_s)
    next if DEDICATED_INPUT_KEYS.include?(key.to_s)

    display_value = case value
    when Array then value.map { |v| v.is_a?(String) ? v : v.inspect }.join(', ')
    when Hash then value.inspect
    else value.to_s
    end
    display_value = "#{display_value[0, 500]}..." if display_value.length > 500
    [key.to_s.tr('_', ' ').capitalize, display_value]
  end.compact
end

#span_category_badge_class(category) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
# File 'app/helpers/dontbugme/traces_helper.rb', line 5

def span_category_badge_class(category)
  case category.to_sym
  when :sql then 'badge-sql'
  when :http then 'badge-http'
  when :redis then 'badge-redis'
  when :cache then 'badge-cache'
  when :mailer then 'badge-mailer'
  when :enqueue then 'badge-enqueue'
  when :custom then 'badge-custom'
  when :snapshot then 'badge-snapshot'
  else 'badge-default'
  end
end

#span_input(span) ⇒ Object



22
23
24
25
26
27
28
# File 'app/helpers/dontbugme/traces_helper.rb', line 22

def span_input(span)
  return nil if span.payload.blank?

  payload = span.payload.is_a?(Hash) ? span.payload : {}
  key = DEDICATED_INPUT_KEYS.find { |k| payload[k.to_sym] || payload[k] }
  key ? (payload[key.to_sym] || payload[key]) : nil
end

#span_output(span) ⇒ Object



30
31
32
33
34
35
36
# File 'app/helpers/dontbugme/traces_helper.rb', line 30

def span_output(span)
  return nil if span.payload.blank?

  payload = span.payload.is_a?(Hash) ? span.payload : {}
  key = OUTPUT_KEYS.find { |k| payload[k.to_sym] || payload[k] }
  key ? (payload[key.to_sym] || payload[key]) : nil
end

#span_timestamp_formatted(trace, span) ⇒ Object



87
88
89
90
91
92
93
94
# File 'app/helpers/dontbugme/traces_helper.rb', line 87

def span_timestamp_formatted(trace, span)
  return nil unless trace.respond_to?(:started_at_utc) && trace.started_at_utc
  return nil unless span.respond_to?(:started_at) && span.started_at

  offset_sec = (span.started_at.to_f / 1000.0)
  at = trace.started_at_utc + offset_sec
  at.respond_to?(:strftime) ? at.strftime('%H:%M:%S.%3N') : at.to_s
end

#trace_finished_at_formatted(trace) ⇒ Object



80
81
82
83
84
85
# File 'app/helpers/dontbugme/traces_helper.rb', line 80

def trace_finished_at_formatted(trace)
  return nil unless trace.respond_to?(:duration_ms) && trace.duration_ms

  finished = trace.started_at_utc + (trace.duration_ms / 1000.0)
  finished.respond_to?(:strftime) ? finished.strftime('%Y-%m-%d %H:%M:%S.%3N UTC') : finished.to_s
end

#trace_started_at_formatted(trace) ⇒ Object



68
69
70
71
72
# File 'app/helpers/dontbugme/traces_helper.rb', line 68

def trace_started_at_formatted(trace)
  return nil unless trace.respond_to?(:started_at_utc) && trace.started_at_utc

  trace.started_at_utc.respond_to?(:strftime) ? trace.started_at_utc.strftime('%Y-%m-%d %H:%M:%S.%3N UTC') : trace.started_at_utc.to_s
end

#trace_started_at_short(trace) ⇒ Object



74
75
76
77
78
# File 'app/helpers/dontbugme/traces_helper.rb', line 74

def trace_started_at_short(trace)
  return nil unless trace.respond_to?(:started_at_utc) && trace.started_at_utc

  trace.started_at_utc.respond_to?(:strftime) ? trace.started_at_utc.strftime('%Y-%m-%d %H:%M:%S') : trace.started_at_utc.to_s
end

#truncate_detail(str, max_len = 80) ⇒ Object



61
62
63
64
65
66
# File 'app/helpers/dontbugme/traces_helper.rb', line 61

def truncate_detail(str, max_len = 80)
  return '' if str.blank?
  str = str.to_s.strip
  return str if str.length <= max_len
  "#{str[0, max_len - 3]}..."
end