commit 2853fc93628bf997903de33cd7aebd1420e5975f
Author: David Fifield <da...@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)
 



_______________________________________________
tor-commits mailing list
tor-commits@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits

Reply via email to