Module: Legion::MCP::LoggingSupport

Extended by:
Logging::Helper
Defined in:
lib/legion/mcp/logging_support.rb

Class Method Summary collapse

Class Method Details

.blank?(value) ⇒ Boolean

Returns:

  • (Boolean)


154
155
156
# File 'lib/legion/mcp/logging_support.rb', line 154

def blank?(value)
  value.nil? || value == '' || value == []
end

.debug(event, **fields) ⇒ Object



20
21
22
# File 'lib/legion/mcp/logging_support.rb', line 20

def debug(event, **fields)
  emit(:debug, event, **fields)
end

.emit(level, event, **fields) ⇒ Object



100
101
102
103
104
105
106
107
108
109
110
# File 'lib/legion/mcp/logging_support.rb', line 100

def emit(level, event, **fields)
  message = "[mcp] #{event}"
  formatted = format_fields(fields)
  message = "#{message} #{formatted}" unless formatted.empty?
  logger = log
  return unless logger.respond_to?(level)

  logger.public_send(level, message)
rescue StandardError
  nil
end

.format_fields(fields) ⇒ Object



112
113
114
115
116
117
118
# File 'lib/legion/mcp/logging_support.rb', line 112

def format_fields(fields)
  fields.compact.filter_map do |key, value|
    next if blank?(value)

    "#{key}=#{format_value(value)}"
  end.join(' ')
end

.format_value(value) ⇒ Object



120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/legion/mcp/logging_support.rb', line 120

def format_value(value)
  case value
  when String
    summarize_text(value).inspect
  when Symbol, Numeric, TrueClass, FalseClass
    value.inspect
  when Hash
    summarize_hash(value).inspect
  when Array
    summarize_array(value).inspect
  when NilClass
    'nil'
  else
    summarize_text(value.inspect).inspect
  end
end

.info(event, **fields) ⇒ Object



12
13
14
# File 'lib/legion/mcp/logging_support.rb', line 12

def info(event, **fields)
  emit(:info, event, **fields)
end

.request_id_from(*sources) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/legion/mcp/logging_support.rb', line 24

def request_id_from(*sources)
  sources.compact.each do |source|
    next unless source.respond_to?(:[])

    %i[request_id correlation_id trace_id].each do |key|
      value = source[key]
      return value.to_s unless blank?(value)
    end

    %w[request_id correlation_id trace_id].each do |key|
      value = source[key]
      return value.to_s unless blank?(value)
    end
  end

  nil
end

.summarize_array(array, max_items: 6) ⇒ Object



64
65
66
67
68
69
70
# File 'lib/legion/mcp/logging_support.rb', line 64

def summarize_array(array, max_items: 6)
  return '[]' unless array.is_a?(Array) && !array.empty?

  items = array.first(max_items).map { |value| summarize_value(value) }
  suffix = array.size > max_items ? " +#{array.size - max_items} more" : ''
  "[#{items.join(', ')}]#{suffix}"
end

.summarize_hash(hash, max_pairs: 6) ⇒ Object



54
55
56
57
58
59
60
61
62
# File 'lib/legion/mcp/logging_support.rb', line 54

def summarize_hash(hash, max_pairs: 6)
  return '{}' unless hash.is_a?(Hash) && !hash.empty?

  pairs = hash.to_a.first(max_pairs).map do |key, value|
    "#{key}=#{summarize_value(value)}"
  end
  suffix = hash.size > max_pairs ? " +#{hash.size - max_pairs} more" : ''
  "{#{pairs.join(', ')}}#{suffix}"
end

.summarize_identity(identity) ⇒ Object



89
90
91
92
93
94
95
96
97
98
# File 'lib/legion/mcp/logging_support.rb', line 89

def summarize_identity(identity)
  case identity
  when Hash
    summarize_hash(identity, max_pairs: 4)
  when NilClass
    'none'
  else
    summarize_value(identity)
  end
end

.summarize_params(params, max_pairs: 6) ⇒ Object



50
51
52
# File 'lib/legion/mcp/logging_support.rb', line 50

def summarize_params(params, max_pairs: 6)
  summarize_hash(params, max_pairs: max_pairs)
end

.summarize_result(result) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/legion/mcp/logging_support.rb', line 72

def summarize_result(result)
  if result.respond_to?(:error?) && result.respond_to?(:content)
    return "mcp_response(error=#{result.error?}, content_items=#{Array(result.content).size})"
  end

  case result
  when Hash
    "hash(keys=#{result.keys.first(8).join(',')})"
  when Array
    "array(size=#{result.size})"
  when NilClass
    'nil'
  else
    summarize_value(result)
  end
end

.summarize_text(value, max: 120) ⇒ Object



42
43
44
45
46
47
48
# File 'lib/legion/mcp/logging_support.rb', line 42

def summarize_text(value, max: 120)
  text = value.to_s.gsub(/\s+/, ' ').strip
  return '' if text.empty?
  return text if text.length <= max

  "#{text[0, max - 3]}..."
end

.summarize_value(value) ⇒ Object



137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# File 'lib/legion/mcp/logging_support.rb', line 137

def summarize_value(value)
  case value
  when String
    summarize_text(value)
  when Symbol, Numeric, TrueClass, FalseClass
    value.to_s
  when Hash
    summarize_hash(value)
  when Array
    summarize_array(value)
  when NilClass
    'nil'
  else
    summarize_text(value.inspect)
  end
end

.warn(event, **fields) ⇒ Object



16
17
18
# File 'lib/legion/mcp/logging_support.rb', line 16

def warn(event, **fields)
  emit(:warn, event, **fields)
end