@ -32,6 +32,7 @@ import (
"tailscale.com/tstime"
tslogger "tailscale.com/types/logger"
"tailscale.com/types/logid"
"tailscale.com/util/eventbus"
"tailscale.com/util/set"
"tailscale.com/util/truncate"
"tailscale.com/util/zstdframe"
@ -120,6 +121,10 @@ func NewLogger(cfg Config, logf tslogger.Logf) *Logger {
shutdownStart : make ( chan struct { } ) ,
shutdownDone : make ( chan struct { } ) ,
}
if cfg . Bus != nil {
l . eventClient = cfg . Bus . Client ( "logtail.Logger" )
}
l . SetSockstatsLabel ( sockstats . LabelLogtailLogger )
l . compressLogs = cfg . CompressLogs
@ -156,6 +161,7 @@ type Logger struct {
privateID logid . PrivateID
httpDoCalls atomic . Int32
sockstatsLabel atomicSocktatsLabel
eventClient * eventbus . Client
procID uint32
includeProcSequence bool
@ -221,6 +227,9 @@ func (l *Logger) Shutdown(ctx context.Context) error {
l . httpc . CloseIdleConnections ( )
} ( )
if l . eventClient != nil {
l . eventClient . Close ( )
}
l . shutdownStartMu . Lock ( )
select {
case <- l . shutdownStart :
@ -417,6 +426,10 @@ func (l *Logger) internetUp() bool {
}
func ( l * Logger ) awaitInternetUp ( ctx context . Context ) {
if l . eventClient != nil {
l . awaitInternetUpBus ( ctx )
return
}
upc := make ( chan bool , 1 )
defer l . netMonitor . RegisterChangeCallback ( func ( delta * netmon . ChangeDelta ) {
if delta . New . AnyInterfaceUp ( ) {
@ -436,6 +449,24 @@ func (l *Logger) awaitInternetUp(ctx context.Context) {
}
}
func ( l * Logger ) awaitInternetUpBus ( ctx context . Context ) {
if l . internetUp ( ) {
return
}
sub := eventbus . Subscribe [ netmon . ChangeDelta ] ( l . eventClient )
defer sub . Close ( )
select {
case delta := <- sub . Events ( ) :
if delta . New . AnyInterfaceUp ( ) {
fmt . Fprintf ( l . stderr , "logtail: internet back up\n" )
return
}
fmt . Fprintf ( l . stderr , "logtail: network changed, but is not up" )
case <- ctx . Done ( ) :
return
}
}
// upload uploads body to the log server.
// origlen indicates the pre-compression body length.
// origlen of -1 indicates that the body is not compressed.