in pkg/rules/mcp/common_otel_instrumenter.go [84:114]
func (l LExperimentalAttributeExtractor) OnEnd(attributes []attribute.KeyValue, context context.Context, request mcpRequest, response any, err error) ([]attribute.KeyValue, context.Context) {
attributes, context = l.Base.OnEnd(attributes, context, request, response, err)
if request.output != nil {
var val attribute.Value
for k, v := range request.output {
switch v.(type) {
case string:
val = attribute.StringValue(v.(string))
case int:
val = attribute.IntValue(v.(int))
case int64:
val = attribute.Int64Value(v.(int64))
case float64:
val = attribute.Float64Value(v.(float64))
case bool:
val = attribute.BoolValue(v.(bool))
default:
val = attribute.StringValue(fmt.Sprintf("%#v", v))
}
if val.Type() > 0 {
attributes = append(attributes, attribute.KeyValue{
Key: attribute.Key("gen_ai.other_output." + k),
Value: val,
})
}
val = attribute.Value{}
}
}
return attributes, context
}