-
Notifications
You must be signed in to change notification settings - Fork 905
chore(vpn): send info, debug logs over tunnel #18240
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -46,9 +46,6 @@ type Tunnel struct { | |
|
||
logger slog.Logger | ||
|
||
logMu sync.Mutex | ||
logs []*TunnelMessage | ||
Comment on lines
-49
to
-50
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm not seeing any value in this buffer, as we don't do any disk I/O - the pipe is entirely in-memory. With pings every 5 seconds and debug logs on, we produce around 150~ logs a minute, or about 35 kilobytes. The in-memory pipe can handle gigabytes a second. I think buffering would make sense were we relaying the logs to a terminal or a file, but that's not the case here. Since only Error and above logs are flushed immediately, the alternative is adding the complexity of flushing the logs from the buffer periodically. One downside of this is that the macOS timestamps on the logs once they reach the Swift code aren't actually representative of the time the log was produced. |
||
|
||
client Client | ||
|
||
// clientLogger is a separate logger than `logger` when the `UseAsLogger` | ||
|
@@ -300,29 +297,22 @@ func (t *Tunnel) stop(*StopRequest) error { | |
var _ slog.Sink = &Tunnel{} | ||
|
||
func (t *Tunnel) LogEntry(_ context.Context, e slog.SinkEntry) { | ||
t.logMu.Lock() | ||
defer t.logMu.Unlock() | ||
t.logs = append(t.logs, &TunnelMessage{ | ||
msg := &TunnelMessage{ | ||
Msg: &TunnelMessage_Log{ | ||
Log: sinkEntryToPb(e), | ||
}, | ||
}) | ||
} | ||
|
||
func (t *Tunnel) Sync() { | ||
t.logMu.Lock() | ||
logs := t.logs | ||
t.logs = nil | ||
t.logMu.Unlock() | ||
for _, msg := range logs { | ||
select { | ||
case <-t.ctx.Done(): | ||
return | ||
case t.sendCh <- msg: | ||
} | ||
} | ||
select { | ||
case <-t.updater.ctx.Done(): | ||
return | ||
case <-t.ctx.Done(): | ||
return | ||
case t.sendCh <- msg: | ||
Comment on lines
+305
to
+310
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We deliberately never cancel the tunnel ctx, due to the somewhat precarious teardown procedure. We do however cancel the updater ctx to ensure we don't tick network updates after shutdown, so we'll check for that here too. |
||
} | ||
} | ||
|
||
func (*Tunnel) Sync() {} | ||
|
||
func sinkEntryToPb(e slog.SinkEntry) *Log { | ||
l := &Log{ | ||
// #nosec G115 - Safe conversion for log levels which are small positive integers | ||
|
@@ -583,6 +573,8 @@ func (u *updater) sendAgentUpdate() { | |
return | ||
} | ||
|
||
u.logger.Debug(u.ctx, "sending agent update") | ||
|
||
msg := &TunnelMessage{ | ||
Msg: &TunnelMessage_PeerUpdate{ | ||
PeerUpdate: &PeerUpdate{ | ||
|
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The Windows app drops logs received over the tunnel, so this can be removed. It adds it's own sink to
stderr
.