Add verbosity switch to suppress diagnostic output

This commit is contained in:
Shelikhoo 2022-02-02 11:35:12 +00:00
parent e828b06076
commit 00e8415d8e
No known key found for this signature in database
GPG key ID: C4D5E79D22B25316
2 changed files with 18 additions and 9 deletions

View file

@ -2,14 +2,16 @@ package snowflake_proxy
import ( import (
"git.torproject.org/pluggable-transports/snowflake.git/v2/common/task" "git.torproject.org/pluggable-transports/snowflake.git/v2/common/task"
"io"
"log" "log"
"time" "time"
"git.torproject.org/pluggable-transports/snowflake.git/v2/common/event" "git.torproject.org/pluggable-transports/snowflake.git/v2/common/event"
) )
func NewProxyEventLogger(logPeriod time.Duration) event.SnowflakeEventReceiver { func NewProxyEventLogger(logPeriod time.Duration, output io.Writer) event.SnowflakeEventReceiver {
el := &logEventLogger{logPeriod: logPeriod} logger := log.New(output, "", log.LstdFlags|log.LUTC)
el := &logEventLogger{logPeriod: logPeriod, logger: logger}
el.task = &task.Periodic{Interval: logPeriod, Execute: el.logTick} el.task = &task.Periodic{Interval: logPeriod, Execute: el.logTick}
el.task.Start() el.task.Start()
return el return el
@ -21,6 +23,7 @@ type logEventLogger struct {
connectionCount int connectionCount int
logPeriod time.Duration logPeriod time.Duration
task *task.Periodic task *task.Periodic
logger *log.Logger
} }
func (p *logEventLogger) OnNewSnowflakeEvent(e event.SnowflakeEvent) { func (p *logEventLogger) OnNewSnowflakeEvent(e event.SnowflakeEvent) {
@ -36,7 +39,7 @@ func (p *logEventLogger) OnNewSnowflakeEvent(e event.SnowflakeEvent) {
func (p *logEventLogger) logTick() error { func (p *logEventLogger) logTick() error {
inbound, inboundUnit := formatTraffic(p.inboundSum) inbound, inboundUnit := formatTraffic(p.inboundSum)
outbound, outboundUnit := formatTraffic(p.inboundSum) outbound, outboundUnit := formatTraffic(p.inboundSum)
log.Printf("In the last %v, there are %v connections. Traffic Relayed ↑ %v %v, ↓ %v %v.\n", p.logger.Printf("In the last %v, there are %v connections. Traffic Relayed ↑ %v %v, ↓ %v %v.\n",
p.logPeriod.String(), p.connectionCount, inbound, inboundUnit, outbound, outboundUnit) p.logPeriod.String(), p.connectionCount, inbound, inboundUnit, outbound, outboundUnit)
p.outboundSum = 0 p.outboundSum = 0
p.inboundSum = 0 p.inboundSum = 0

View file

@ -4,6 +4,7 @@ import (
"flag" "flag"
"git.torproject.org/pluggable-transports/snowflake.git/v2/common/event" "git.torproject.org/pluggable-transports/snowflake.git/v2/common/event"
"io" "io"
"io/ioutil"
"log" "log"
"os" "os"
"time" "time"
@ -24,15 +25,12 @@ func main() {
"the time interval in second before NAT type is retested, 0s disables retest. Valid time units are \"s\", \"m\", \"h\". ") "the time interval in second before NAT type is retested, 0s disables retest. Valid time units are \"s\", \"m\", \"h\". ")
SummaryInterval := flag.Duration("summary-interval", time.Hour, SummaryInterval := flag.Duration("summary-interval", time.Hour,
"the time interval to output summary, 0s disables retest. Valid time units are \"s\", \"m\", \"h\". ") "the time interval to output summary, 0s disables retest. Valid time units are \"s\", \"m\", \"h\". ")
verboseLogging := flag.Bool("verbose", false, "increase log verbosity")
flag.Parse() flag.Parse()
periodicEventLogger := sf.NewProxyEventLogger(*SummaryInterval)
eventLogger := event.NewSnowflakeEventDispatcher() eventLogger := event.NewSnowflakeEventDispatcher()
eventLogger.AddSnowflakeEventListener(periodicEventLogger)
proxy := sf.SnowflakeProxy{ proxy := sf.SnowflakeProxy{
Capacity: uint(*capacity), Capacity: uint(*capacity),
STUNURL: *stunURL, STUNURL: *stunURL,
@ -45,16 +43,21 @@ func main() {
} }
var logOutput io.Writer = os.Stderr var logOutput io.Writer = os.Stderr
var eventlogOutput io.Writer = os.Stderr
log.SetFlags(log.LstdFlags | log.LUTC) log.SetFlags(log.LstdFlags | log.LUTC)
log.SetFlags(log.LstdFlags | log.LUTC) if !*verboseLogging {
logOutput = ioutil.Discard
}
if *logFilename != "" { if *logFilename != "" {
f, err := os.OpenFile(*logFilename, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0600) f, err := os.OpenFile(*logFilename, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0600)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
defer f.Close() defer f.Close()
logOutput = io.MultiWriter(os.Stderr, f) logOutput = io.MultiWriter(logOutput, f)
eventlogOutput = io.MultiWriter(eventlogOutput, f)
} }
if *unsafeLogging { if *unsafeLogging {
log.SetOutput(logOutput) log.SetOutput(logOutput)
@ -62,6 +65,9 @@ func main() {
log.SetOutput(&safelog.LogScrubber{Output: logOutput}) log.SetOutput(&safelog.LogScrubber{Output: logOutput})
} }
periodicEventLogger := sf.NewProxyEventLogger(*SummaryInterval, eventlogOutput)
eventLogger.AddSnowflakeEventListener(periodicEventLogger)
err := proxy.Start() err := proxy.Start()
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)