@@ -199,15 +199,12 @@ public final actor ValkeyConnection: ValkeyClientProtocol, Sendable {
199199 }
200200 } catch let error as ValkeyClientError {
201201 #if DistributedTracingSupport
202- span? . recordError ( error )
203- if let message = error . message {
204- var prefixEndIndex = message . startIndex
205- while prefixEndIndex < message . endIndex , message [ prefixEndIndex ] != " " {
206- message . formIndex ( after : & prefixEndIndex )
202+ if let span {
203+ span . recordError ( error )
204+ span . setStatus ( SpanStatus ( code : . error ) )
205+ if let prefix = error . simpleErrorPrefix {
206+ span . attributes [ " db.response.status_code " ] = " \( prefix ) "
207207 }
208- let prefix = message [ message. startIndex..< prefixEndIndex]
209- span? . attributes [ " db.response.status_code " ] = " \( prefix) "
210- span? . setStatus ( SpanStatus ( code: . error) )
211208 }
212209 #endif
213210 throw error
@@ -455,3 +452,20 @@ struct AutoIncrementingInteger {
455452 return value - 1
456453 }
457454}
455+
456+ #if DistributedTracingSupport
457+ extension ValkeyClientError {
458+ /// Extract the simple error prefix from this error.
459+ ///
460+ /// - SeeAlso: [](https://valkey.io/topics/protocol/#simple-errors)
461+ @usableFromInline
462+ var simpleErrorPrefix : Substring ? {
463+ guard let message else { return nil }
464+ var prefixEndIndex = message. startIndex
465+ while prefixEndIndex < message. endIndex, message [ prefixEndIndex] != " " {
466+ message. formIndex ( after: & prefixEndIndex)
467+ }
468+ return message [ message. startIndex..< prefixEndIndex]
469+ }
470+ }
471+ #endif
0 commit comments