+16
internal/atproto/client.go
+16
internal/atproto/client.go
···
4
4
"context"
5
5
"errors"
6
6
"fmt"
7
+
"net/http"
7
8
8
9
"arabica/internal/metrics"
9
10
"arabica/internal/tracing"
···
11
12
"github.com/bluesky-social/indigo/atproto/atclient"
12
13
"github.com/bluesky-social/indigo/atproto/syntax"
13
14
"github.com/rs/zerolog/log"
15
+
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
14
16
)
15
17
16
18
// ErrSessionExpired is returned when the OAuth session cannot be resumed,
···
42
44
// This client automatically handles DPOP signing and token refresh
43
45
apiClient := session.APIClient()
44
46
47
+
// Wrap the HTTP transport with OpenTelemetry instrumentation so outbound PDS
48
+
// HTTP calls appear as child spans under the existing pds.* semantic spans.
49
+
// We create a new http.Client rather than mutating the shared session client.
50
+
baseTransport := apiClient.Client.Transport
51
+
if baseTransport == nil {
52
+
baseTransport = http.DefaultTransport
53
+
}
54
+
apiClient.Client = &http.Client{
55
+
Transport: otelhttp.NewTransport(baseTransport),
56
+
Timeout: apiClient.Client.Timeout,
57
+
CheckRedirect: apiClient.Client.CheckRedirect,
58
+
Jar: apiClient.Client.Jar,
59
+
}
60
+
45
61
return apiClient, nil
46
62
}
47
63
+4
-1
internal/atproto/public_client.go
+4
-1
internal/atproto/public_client.go
···
12
12
"strings"
13
13
"sync"
14
14
"time"
15
+
16
+
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
15
17
)
16
18
17
19
const (
···
100
102
return &PublicClient{
101
103
baseURL: PublicAPIBaseURL,
102
104
httpClient: &http.Client{
103
-
Timeout: 30 * time.Second,
105
+
Timeout: 30 * time.Second,
106
+
Transport: otelhttp.NewTransport(http.DefaultTransport),
104
107
},
105
108
pdsCache: make(map[string]string),
106
109
}
History
1 round
0 comments
pdewey.com
submitted
#0
1 commit
expand
collapse
feat: improved otel tracing
expand 0 comments
pull request successfully merged