Skip to content

Commit 0dd5134

Browse files
committed
wip log sink
1 parent c5ea219 commit 0dd5134

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
@@ -128,7 +128,8 @@ func TestTailnetAPIConnector_UplevelVersion(t *testing.T) {
128128

129129
fConn := newFakeTailnetConn()
130130

131-
uut := runTailnetAPIConnector(ctx, logger, agentID, svr.URL, &websocket.DialOptions{}, fConn)
131+
uut := newTailnetAPIConnector(ctx, logger, agentID, svr.URL, &websocket.DialOptions{})
132+
uut.runConnector(fConn)
132133

133134
err := testutil.RequireRecvCtx(ctx, t, uut.connected)
134135
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy