Skip to content

Commit 89a1187

Browse files
committed
chore: log actor override
Signed-off-by: Danny Kopping <danny@coder.com>
1 parent 32c22ae commit 89a1187

File tree

3 files changed

+35
-6
lines changed

3 files changed

+35
-6
lines changed

bridge.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,9 +179,15 @@ func newInterceptionProcessor(p provider.Provider, cbs *circuitbreaker.ProviderC
179179
if ownerID := r.Header.Get("X-Coder-Owner-Id"); ownerID != "" {
180180
existingActor := aibcontext.ActorFromContext(ctx)
181181
var md recorder.Metadata
182+
var previousActorID string
182183
if existingActor != nil {
183184
md = existingActor.Metadata
185+
previousActorID = existingActor.ID
184186
}
187+
logger.Debug(ctx, "overriding initiator with X-Coder-Owner-Id",
188+
slog.F("previous_actor_id", previousActorID),
189+
slog.F("new_actor_id", ownerID),
190+
)
185191
ctx = aibcontext.AsActor(ctx, ownerID, md)
186192
r = r.WithContext(ctx)
187193
}

internal/integrationtest/bridge_test.go

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import (
1212
"testing"
1313
"time"
1414

15+
"cdr.dev/slog/v3"
16+
"cdr.dev/slog/v3/sloggers/sloghuman"
1517
"github.com/anthropics/anthropic-sdk-go"
1618
"github.com/anthropics/anthropic-sdk-go/packages/ssestream"
1719
"github.com/anthropics/anthropic-sdk-go/shared/constant"
@@ -2093,12 +2095,14 @@ func TestCoderAgentsInitiatorOverride(t *testing.T) {
20932095
userAgent string
20942096
ownerIDHeader string
20952097
expectInitiator string
2098+
expectLogOverride bool
20962099
}{
20972100
{
2098-
name: "coder_agents_with_owner_id",
2099-
userAgent: "coder-agents/v2.24.0 (linux/amd64)",
2100-
ownerIDHeader: overrideActorID,
2101-
expectInitiator: overrideActorID,
2101+
name: "coder_agents_with_owner_id",
2102+
userAgent: "coder-agents/v2.24.0 (linux/amd64)",
2103+
ownerIDHeader: overrideActorID,
2104+
expectInitiator: overrideActorID,
2105+
expectLogOverride: true,
21022106
},
21032107
{
21042108
name: "coder_agents_without_owner_id",
@@ -2124,7 +2128,9 @@ func TestCoderAgentsInitiatorOverride(t *testing.T) {
21242128
fix := fixtures.Parse(t, fixtures.AntSimple)
21252129
upstream := newMockUpstream(t, ctx, newFixtureResponse(fix))
21262130

2127-
bridgeServer := newBridgeTestServer(t, ctx, upstream.URL)
2131+
var logBuf bytes.Buffer
2132+
logger := slog.Make(sloghuman.Sink(&logBuf)).Leveled(slog.LevelDebug)
2133+
bridgeServer := newBridgeTestServer(t, ctx, upstream.URL, withLogger(logger))
21282134

21292135
headers := http.Header{"User-Agent": {tc.userAgent}}
21302136
if tc.ownerIDHeader != "" {
@@ -2139,6 +2145,15 @@ func TestCoderAgentsInitiatorOverride(t *testing.T) {
21392145
interceptions := bridgeServer.Recorder.RecordedInterceptions()
21402146
require.Len(t, interceptions, 1)
21412147
require.Equal(t, tc.expectInitiator, interceptions[0].InitiatorID)
2148+
2149+
logOutput := logBuf.String()
2150+
if tc.expectLogOverride {
2151+
assert.Contains(t, logOutput, "overriding initiator with X-Coder-Owner-Id")
2152+
assert.Contains(t, logOutput, defaultActorID)
2153+
assert.Contains(t, logOutput, overrideActorID)
2154+
} else {
2155+
assert.NotContains(t, logOutput, "overriding initiator with X-Coder-Owner-Id")
2156+
}
21422157
})
21432158
}
21442159
}

internal/integrationtest/setupbridge.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ type bridgeConfig struct {
4949
userID string
5050
metadata recorder.Metadata
5151
logger slog.Logger
52+
loggerSet bool
5253
}
5354

5455
// bridgeTestServer wraps an httptest.Server running a RequestBridge.
@@ -117,6 +118,11 @@ func withMCP(p mcp.ServerProxier) bridgeOption {
117118
return func(c *bridgeConfig) { c.mcpProxy = p }
118119
}
119120

121+
// withLogger overrides the default test logger.
122+
func withLogger(l slog.Logger) bridgeOption {
123+
return func(c *bridgeConfig) { c.logger = l; c.loggerSet = true }
124+
}
125+
120126
// withActor sets the actor ID and metadata for the BaseContext.
121127
func withActor(id string, md recorder.Metadata) bridgeOption {
122128
return func(c *bridgeConfig) { c.userID = id; c.metadata = md }
@@ -146,7 +152,9 @@ func newBridgeTestServer(
146152
if cfg.tracer == nil {
147153
cfg.tracer = defaultTracer
148154
}
149-
cfg.logger = newLogger(t)
155+
if !cfg.loggerSet {
156+
cfg.logger = newLogger(t)
157+
}
150158
if cfg.mcpProxy == nil {
151159
cfg.mcpProxy = newNoopMCPManager()
152160
}

0 commit comments

Comments
 (0)