[tor-commits] [snowflake/master] Make BytesSyncLogger's implementation details internal.

dcf at torproject.org dcf at torproject.org
Fri Apr 24 16:27:06 UTC 2020


commit 2853fc93628bf997903de33cd7aebd1420e5975f
Author: David Fifield <david at bamsoftware.com>
Date:   Thu Apr 23 21:20:16 2020 -0600

    Make BytesSyncLogger's implementation details internal.
    
    Provide NewBytesSyncLogger that returns an opaque data structure.
    Automatically start up the logging loop goroutine in NewBytesSyncLogger.
---
 client/lib/util.go  | 52 ++++++++++++++++++++++++++++------------------------
 client/snowflake.go | 10 +---------
 2 files changed, 29 insertions(+), 33 deletions(-)

diff --git a/client/lib/util.go b/client/lib/util.go
index 8ac0213..44df031 100644
--- a/client/lib/util.go
+++ b/client/lib/util.go
@@ -10,7 +10,6 @@ const (
 )
 
 type BytesLogger interface {
-	Log()
 	AddOutbound(int)
 	AddInbound(int)
 }
@@ -18,50 +17,55 @@ type BytesLogger interface {
 // Default BytesLogger does nothing.
 type BytesNullLogger struct{}
 
-func (b BytesNullLogger) Log()                   {}
 func (b BytesNullLogger) AddOutbound(amount int) {}
 func (b BytesNullLogger) AddInbound(amount int)  {}
 
 // BytesSyncLogger uses channels to safely log from multiple sources with output
 // occuring at reasonable intervals.
 type BytesSyncLogger struct {
-	OutboundChan chan int
-	InboundChan  chan int
-	Outbound     int
-	Inbound      int
-	OutEvents    int
-	InEvents     int
+	outboundChan chan int
+	inboundChan  chan int
 }
 
-func (b *BytesSyncLogger) Log() {
-	var amount int
+// NewBytesSyncLogger returns a new BytesSyncLogger and starts it loggin.
+func NewBytesSyncLogger() *BytesSyncLogger {
+	b := &BytesSyncLogger{
+		outboundChan: make(chan int, 5),
+		inboundChan:  make(chan int, 5),
+	}
+	go b.log()
+	return b
+}
+
+func (b *BytesSyncLogger) log() {
+	var outbound, inbound, outEvents, inEvents int
 	output := func() {
 		log.Printf("Traffic Bytes (in|out): %d | %d -- (%d OnMessages, %d Sends)",
-			b.Inbound, b.Outbound, b.InEvents, b.OutEvents)
-		b.Outbound = 0
-		b.OutEvents = 0
-		b.Inbound = 0
-		b.InEvents = 0
+			inbound, outbound, inEvents, outEvents)
+		outbound = 0
+		outEvents = 0
+		inbound = 0
+		inEvents = 0
 	}
 	last := time.Now()
 	for {
 		select {
-		case amount = <-b.OutboundChan:
-			b.Outbound += amount
-			b.OutEvents++
+		case amount := <-b.outboundChan:
+			outbound += amount
+			outEvents++
 			if time.Since(last) > time.Second*LogTimeInterval {
 				last = time.Now()
 				output()
 			}
-		case amount = <-b.InboundChan:
-			b.Inbound += amount
-			b.InEvents++
+		case amount := <-b.inboundChan:
+			inbound += amount
+			inEvents++
 			if time.Since(last) > time.Second*LogTimeInterval {
 				last = time.Now()
 				output()
 			}
 		case <-time.After(time.Second * LogTimeInterval):
-			if b.InEvents > 0 || b.OutEvents > 0 {
+			if inEvents > 0 || outEvents > 0 {
 				output()
 			}
 		}
@@ -69,9 +73,9 @@ func (b *BytesSyncLogger) Log() {
 }
 
 func (b *BytesSyncLogger) AddOutbound(amount int) {
-	b.OutboundChan <- amount
+	b.outboundChan <- amount
 }
 
 func (b *BytesSyncLogger) AddInbound(amount int) {
-	b.InboundChan <- amount
+	b.inboundChan <- amount
 }
diff --git a/client/snowflake.go b/client/snowflake.go
index dda59ae..d66225d 100644
--- a/client/snowflake.go
+++ b/client/snowflake.go
@@ -161,15 +161,7 @@ func main() {
 	snowflakes.Tongue = sf.NewWebRTCDialer(broker, iceServers)
 
 	// Use a real logger to periodically output how much traffic is happening.
-	snowflakes.BytesLogger = &sf.BytesSyncLogger{
-		InboundChan:  make(chan int, 5),
-		OutboundChan: make(chan int, 5),
-		Inbound:      0,
-		Outbound:     0,
-		InEvents:     0,
-		OutEvents:    0,
-	}
-	go snowflakes.BytesLogger.Log()
+	snowflakes.BytesLogger = sf.NewBytesSyncLogger()
 
 	go ConnectLoop(snowflakes)
 





More information about the tor-commits mailing list