Module: Legion::MCP::LoggingSupport
- Extended by:
- Logging::Helper
- Defined in:
- lib/legion/mcp/logging_support.rb
Class Method Summary collapse
- .blank?(value) ⇒ Boolean
- .debug(event, **fields) ⇒ Object
- .emit(level, event, **fields) ⇒ Object
- .format_fields(fields) ⇒ Object
- .format_value(value) ⇒ Object
- .info(event, **fields) ⇒ Object
- .request_id_from(*sources) ⇒ Object
- .summarize_array(array, max_items: 6) ⇒ Object
- .summarize_hash(hash, max_pairs: 6) ⇒ Object
- .summarize_identity(identity) ⇒ Object
- .summarize_params(params, max_pairs: 6) ⇒ Object
- .summarize_result(result) ⇒ Object
- .summarize_text(value, max: 120) ⇒ Object
- .summarize_value(value) ⇒ Object
- .warn(event, **fields) ⇒ Object
Class Method Details
.blank?(value) ⇒ 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) = "[mcp] #{event}" formatted = format_fields(fields) = "#{} #{formatted}" unless formatted.empty? logger = log return unless logger.respond_to?(level) logger.public_send(level, ) 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 |