Skip to content

Commit 4a2e18c

Browse files
committed
wip log sink
1 parent 4e149a3 commit 4a2e18c

File tree

11 files changed

+357
-271
lines changed

11 files changed

+357
-271
lines changed

codersdk/workspacesdk/connector.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,16 @@ import (
77
"io"
88
"net/http"
99
"slices"
10+
"strings"
1011
"sync"
12+
"sync/atomic"
1113
"time"
1214

1315
"github.com/google/uuid"
1416
"golang.org/x/xerrors"
1517
"nhooyr.io/websocket"
18+
"storj.io/drpc"
19+
"storj.io/drpc/drpcerr"
1620
"tailscale.com/tailcfg"
1721

1822
"cdr.dev/slog"
@@ -66,6 +70,10 @@ type tailnetAPIConnector struct {
6670
connected chan error
6771
isFirst bool
6872
closed chan struct{}
73+
74+
// Set to true if we get a response from the server that it doesn't support
75+
// network telemetry.
76+
telemetryDisabled atomic.Bool
6977
}
7078

7179
// Create a new tailnetAPIConnector without running it
@@ -269,12 +277,16 @@ func (tac *tailnetAPIConnector) SendTelemetryEvent(event *proto.TelemetryEvent)
269277
// We hold the lock for the entire telemetry request, but this would only block
270278
// a coordinate retry, and closing the connection.
271279
defer tac.clientMu.RUnlock()
272-
if tac.client == nil {
280+
if tac.client == nil || tac.telemetryDisabled.Load() {
273281
return
274282
}
275283
ctx, cancel := context.WithTimeout(tac.ctx, 5*time.Second)
276284
defer cancel()
277-
_, _ = tac.client.PostTelemetry(ctx, &proto.TelemetryRequest{
285+
_, err := tac.client.PostTelemetry(ctx, &proto.TelemetryRequest{
278286
Events: []*proto.TelemetryEvent{event},
279287
})
288+
if drpcerr.Code(err) == drpcerr.Unimplemented || drpc.ProtocolError.Has(err) && strings.Contains(err.Error(), "unknown rpc: ") {
289+
tac.logger.Debug(tac.ctx, "attempted to send telemetry to a server that doesn't support it", slog.Error(err))
290+
tac.telemetryDisabled.Store(true)
291+
}
280292
}

codersdk/workspacesdk/connector_internal_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,8 @@ func TestTailnetAPIConnector_UplevelVersion(t *testing.T) {
125125

126126
fConn := newFakeTailnetConn()
127127

128-
uut := runTailnetAPIConnector(ctx, logger, agentID, svr.URL, &websocket.DialOptions{}, fConn)
128+
uut := newTailnetAPIConnector(ctx, logger, agentID, svr.URL, &websocket.DialOptions{})
129+
uut.runConnector(fConn)
129130

130131
err := testutil.RequireRecvCtx(ctx, t, uut.connected)
131132
var sdkErr *codersdk.Error

tailnet/configmaps.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,14 +66,14 @@ type configMaps struct {
6666
peers map[uuid.UUID]*peerLifecycle
6767
addresses []netip.Prefix
6868
derpMap *tailcfg.DERPMap
69-
logger slog.Logger
69+
logger multiLogger
7070
blockEndpoints bool
7171

7272
// for testing
7373
clock clock.Clock
7474
}
7575

76-
func newConfigMaps(logger slog.Logger, engine engineConfigurable, nodeID tailcfg.NodeID, nodeKey key.NodePrivate, discoKey key.DiscoPublic) *configMaps {
76+
func newConfigMaps(logger multiLogger, engine engineConfigurable, nodeID tailcfg.NodeID, nodeKey key.NodePrivate, discoKey key.DiscoPublic) *configMaps {
7777
pubKey := nodeKey.Public()
7878
c := &configMaps{
7979
phased: phased{Cond: *(sync.NewCond(&sync.Mutex{}))},

tailnet/configmaps_internal_test.go

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import (
2929
func TestConfigMaps_setAddresses_different(t *testing.T) {
3030
t.Parallel()
3131
ctx := testutil.Context(t, testutil.WaitShort)
32-
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
32+
logger := newMultiLogger(slogtest.Make(t, nil).Leveled(slog.LevelDebug))
3333
fEng := newFakeEngineConfigurable()
3434
nodePrivateKey := key.NewNode()
3535
nodeID := tailcfg.NodeID(5)
@@ -87,7 +87,7 @@ func TestConfigMaps_setAddresses_different(t *testing.T) {
8787
func TestConfigMaps_setAddresses_same(t *testing.T) {
8888
t.Parallel()
8989
ctx := testutil.Context(t, testutil.WaitShort)
90-
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
90+
logger := newMultiLogger(slogtest.Make(t, nil).Leveled(slog.LevelDebug))
9191
fEng := newFakeEngineConfigurable()
9292
nodePrivateKey := key.NewNode()
9393
nodeID := tailcfg.NodeID(5)
@@ -118,7 +118,7 @@ func TestConfigMaps_setAddresses_same(t *testing.T) {
118118
func TestConfigMaps_updatePeers_new(t *testing.T) {
119119
t.Parallel()
120120
ctx := testutil.Context(t, testutil.WaitShort)
121-
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
121+
logger := newMultiLogger(slogtest.Make(t, nil).Leveled(slog.LevelDebug))
122122
fEng := newFakeEngineConfigurable()
123123
nodePrivateKey := key.NewNode()
124124
nodeID := tailcfg.NodeID(5)
@@ -188,7 +188,7 @@ func TestConfigMaps_updatePeers_new(t *testing.T) {
188188
func TestConfigMaps_updatePeers_new_waitForHandshake_neverConfigures(t *testing.T) {
189189
t.Parallel()
190190
ctx := testutil.Context(t, testutil.WaitShort)
191-
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
191+
logger := newMultiLogger(slogtest.Make(t, nil).Leveled(slog.LevelDebug))
192192
fEng := newFakeEngineConfigurable()
193193
nodePrivateKey := key.NewNode()
194194
nodeID := tailcfg.NodeID(5)
@@ -232,7 +232,7 @@ func TestConfigMaps_updatePeers_new_waitForHandshake_neverConfigures(t *testing.
232232
func TestConfigMaps_updatePeers_new_waitForHandshake_outOfOrder(t *testing.T) {
233233
t.Parallel()
234234
ctx := testutil.Context(t, testutil.WaitShort)
235-
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
235+
logger := newMultiLogger(slogtest.Make(t, nil).Leveled(slog.LevelDebug))
236236
fEng := newFakeEngineConfigurable()
237237
nodePrivateKey := key.NewNode()
238238
nodeID := tailcfg.NodeID(5)
@@ -303,7 +303,7 @@ func TestConfigMaps_updatePeers_new_waitForHandshake_outOfOrder(t *testing.T) {
303303
func TestConfigMaps_updatePeers_new_waitForHandshake(t *testing.T) {
304304
t.Parallel()
305305
ctx := testutil.Context(t, testutil.WaitShort)
306-
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
306+
logger := newMultiLogger(slogtest.Make(t, nil).Leveled(slog.LevelDebug))
307307
fEng := newFakeEngineConfigurable()
308308
nodePrivateKey := key.NewNode()
309309
nodeID := tailcfg.NodeID(5)
@@ -374,7 +374,7 @@ func TestConfigMaps_updatePeers_new_waitForHandshake(t *testing.T) {
374374
func TestConfigMaps_updatePeers_new_waitForHandshake_timeout(t *testing.T) {
375375
t.Parallel()
376376
ctx := testutil.Context(t, testutil.WaitShort)
377-
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
377+
logger := newMultiLogger(slogtest.Make(t, nil).Leveled(slog.LevelDebug))
378378
fEng := newFakeEngineConfigurable()
379379
nodePrivateKey := key.NewNode()
380380
nodeID := tailcfg.NodeID(5)
@@ -432,7 +432,7 @@ func TestConfigMaps_updatePeers_new_waitForHandshake_timeout(t *testing.T) {
432432
func TestConfigMaps_updatePeers_same(t *testing.T) {
433433
t.Parallel()
434434
ctx := testutil.Context(t, testutil.WaitShort)
435-
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
435+
logger := newMultiLogger(slogtest.Make(t, nil).Leveled(slog.LevelDebug))
436436
fEng := newFakeEngineConfigurable()
437437
nodePrivateKey := key.NewNode()
438438
nodeID := tailcfg.NodeID(5)
@@ -491,7 +491,7 @@ func TestConfigMaps_updatePeers_same(t *testing.T) {
491491
func TestConfigMaps_updatePeers_disconnect(t *testing.T) {
492492
t.Parallel()
493493
ctx := testutil.Context(t, testutil.WaitShort)
494-
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
494+
logger := newMultiLogger(slogtest.Make(t, nil).Leveled(slog.LevelDebug))
495495
fEng := newFakeEngineConfigurable()
496496
nodePrivateKey := key.NewNode()
497497
nodeID := tailcfg.NodeID(5)
@@ -559,7 +559,7 @@ func TestConfigMaps_updatePeers_disconnect(t *testing.T) {
559559
func TestConfigMaps_updatePeers_lost(t *testing.T) {
560560
t.Parallel()
561561
ctx := testutil.Context(t, testutil.WaitShort)
562-
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
562+
logger := newMultiLogger(slogtest.Make(t, nil).Leveled(slog.LevelDebug))
563563
fEng := newFakeEngineConfigurable()
564564
nodePrivateKey := key.NewNode()
565565
nodeID := tailcfg.NodeID(5)
@@ -644,7 +644,7 @@ func TestConfigMaps_updatePeers_lost(t *testing.T) {
644644
func TestConfigMaps_updatePeers_lost_and_found(t *testing.T) {
645645
t.Parallel()
646646
ctx := testutil.Context(t, testutil.WaitShort)
647-
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
647+
logger := newMultiLogger(slogtest.Make(t, nil).Leveled(slog.LevelDebug))
648648
fEng := newFakeEngineConfigurable()
649649
nodePrivateKey := key.NewNode()
650650
nodeID := tailcfg.NodeID(5)
@@ -729,7 +729,7 @@ func TestConfigMaps_updatePeers_lost_and_found(t *testing.T) {
729729
func TestConfigMaps_setAllPeersLost(t *testing.T) {
730730
t.Parallel()
731731
ctx := testutil.Context(t, testutil.WaitShort)
732-
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
732+
logger := newMultiLogger(slogtest.Make(t, nil).Leveled(slog.LevelDebug))
733733
fEng := newFakeEngineConfigurable()
734734
nodePrivateKey := key.NewNode()
735735
nodeID := tailcfg.NodeID(5)
@@ -815,7 +815,7 @@ func TestConfigMaps_setAllPeersLost(t *testing.T) {
815815
func TestConfigMaps_setBlockEndpoints_different(t *testing.T) {
816816
t.Parallel()
817817
ctx := testutil.Context(t, testutil.WaitShort)
818-
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
818+
logger := newMultiLogger(slogtest.Make(t, nil).Leveled(slog.LevelDebug))
819819
fEng := newFakeEngineConfigurable()
820820
nodePrivateKey := key.NewNode()
821821
nodeID := tailcfg.NodeID(5)
@@ -859,7 +859,7 @@ func TestConfigMaps_setBlockEndpoints_different(t *testing.T) {
859859
func TestConfigMaps_setBlockEndpoints_same(t *testing.T) {
860860
t.Parallel()
861861
ctx := testutil.Context(t, testutil.WaitShort)
862-
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
862+
logger := newMultiLogger(slogtest.Make(t, nil).Leveled(slog.LevelDebug))
863863
fEng := newFakeEngineConfigurable()
864864
nodePrivateKey := key.NewNode()
865865
nodeID := tailcfg.NodeID(5)
@@ -902,7 +902,7 @@ func TestConfigMaps_setBlockEndpoints_same(t *testing.T) {
902902
func TestConfigMaps_setDERPMap_different(t *testing.T) {
903903
t.Parallel()
904904
ctx := testutil.Context(t, testutil.WaitShort)
905-
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
905+
logger := newMultiLogger(slogtest.Make(t, nil).Leveled(slog.LevelDebug))
906906
fEng := newFakeEngineConfigurable()
907907
nodePrivateKey := key.NewNode()
908908
nodeID := tailcfg.NodeID(5)
@@ -943,7 +943,7 @@ func TestConfigMaps_setDERPMap_different(t *testing.T) {
943943
func TestConfigMaps_setDERPMap_same(t *testing.T) {
944944
t.Parallel()
945945
ctx := testutil.Context(t, testutil.WaitShort)
946-
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
946+
logger := newMultiLogger(slogtest.Make(t, nil).Leveled(slog.LevelDebug))
947947
fEng := newFakeEngineConfigurable()
948948
nodePrivateKey := key.NewNode()
949949
nodeID := tailcfg.NodeID(5)
@@ -1012,7 +1012,7 @@ func TestConfigMaps_setDERPMap_same(t *testing.T) {
10121012
func TestConfigMaps_fillPeerDiagnostics(t *testing.T) {
10131013
t.Parallel()
10141014
ctx := testutil.Context(t, testutil.WaitShort)
1015-
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
1015+
logger := newMultiLogger(slogtest.Make(t, nil).Leveled(slog.LevelDebug))
10161016
fEng := newFakeEngineConfigurable()
10171017
nodePrivateKey := key.NewNode()
10181018
nodeID := tailcfg.NodeID(5)
@@ -1120,7 +1120,7 @@ func TestConfigMaps_updatePeers_nonexist(t *testing.T) {
11201120
t.Run(k.String(), func(t *testing.T) {
11211121
t.Parallel()
11221122
ctx := testutil.Context(t, testutil.WaitShort)
1123-
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
1123+
logger := newMultiLogger(slogtest.Make(t, nil).Leveled(slog.LevelDebug))
11241124
fEng := newFakeEngineConfigurable()
11251125
nodePrivateKey := key.NewNode()
11261126
nodeID := tailcfg.NodeID(5)

0 commit comments

Comments
 (0)