1
1
package tracing
2
2
3
3
import (
4
+ "context"
5
+ "fmt"
6
+ "strings"
7
+
4
8
"github.com/nhatthm/otelsql"
5
- semconv"go.opentelemetry.io/otel/semconv/v1.4 .0"
9
+ semconv"go.opentelemetry.io/otel/semconv/v1.7 .0"
6
10
"go.opentelemetry.io/otel/trace"
7
11
"golang.org/x/xerrors"
8
12
)
@@ -17,10 +21,22 @@ func PostgresDriver(tp trace.TracerProvider, service string) (string, error) {
17
21
otelsql .TraceQueryWithoutArgs (),
18
22
otelsql .WithSystem (semconv .DBSystemPostgreSQL ),
19
23
otelsql .WithTracerProvider (tp ),
24
+ otelsql .WithSpanNameFormatter (formatPostgresSpan ),
20
25
)
21
26
if err != nil {
22
27
return "" ,xerrors .Errorf ("registering postgres tracing driver: %w" ,err )
23
28
}
24
29
25
30
return driverName ,nil
26
31
}
32
+
33
+ func formatPostgresSpan (ctx context.Context ,op string )string {
34
+ const qPrefix = "-- name: "
35
+ q := otelsql .QueryFromContext (ctx )
36
+ if q == "" || ! strings .HasPrefix (q ,qPrefix ) {
37
+ return strings .ToUpper (op )
38
+ }
39
+
40
+ s := strings .Split (strings .TrimPrefix (q ,qPrefix )," " )[0 ]
41
+ return fmt .Sprintf ("%s %s" ,strings .ToUpper (op ),s )
42
+ }