logtail: add Logger.SetEnabled to toggle uploads at runtime
Callers that need to turn logtail uploads on and off in response to user preference or policy changes previously had no choice: the package-level Disable is a one-way kill switch intended for the controlplane DisableLogTail debug message, and requires a process restart to undo. Add a per-Logger disabled flag, toggled via SetEnabled, that drops incoming entries without buffering while disabled. The process-wide Disable still takes precedence, so a controlplane-issued kill switch cannot be overridden by a client setting it back on. To simplify https://github.com/tailscale/tailscale-android/pull/695 Updates #13174 Change-Id: I06e75bd719c851f5f837ca5b2d1e17f7c68355f0 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
committed by
Brad Fitzpatrick
parent
8dda62cc24
commit
1fbb834dc3
@@ -321,6 +321,37 @@ func TestLoggerWriteResult(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoggerSetEnabled(t *testing.T) {
|
||||
buf := NewMemoryBuffer(100)
|
||||
lg := &Logger{
|
||||
clock: tstest.NewClock(tstest.ClockOpts{Start: time.Unix(123, 0)}),
|
||||
buffer: buf,
|
||||
}
|
||||
|
||||
if _, err := lg.Write([]byte("enabled1")); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if back, _ := buf.TryReadLine(); !strings.Contains(string(back), "enabled1") {
|
||||
t.Fatalf("initial write not buffered; got %q", back)
|
||||
}
|
||||
|
||||
lg.SetEnabled(false)
|
||||
if _, err := lg.Write([]byte("disabled")); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if back, _ := buf.TryReadLine(); len(back) != 0 {
|
||||
t.Errorf("write while disabled leaked into buffer: %q", back)
|
||||
}
|
||||
|
||||
lg.SetEnabled(true)
|
||||
if _, err := lg.Write([]byte("enabled2")); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if back, _ := buf.TryReadLine(); !strings.Contains(string(back), "enabled2") {
|
||||
t.Errorf("write after re-enable not buffered; got %q", back)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAppendMetadata(t *testing.T) {
|
||||
var lg Logger
|
||||
lg.clock = tstest.NewClock(tstest.ClockOpts{Start: time.Date(2000, 01, 01, 0, 0, 0, 0, time.UTC)})
|
||||
|
||||
Reference in New Issue
Block a user