Scrub ptEvent logs

This commit is contained in:
itchyonion 2022-03-23 08:49:28 -07:00 committed by Cecylia Bocovich
parent aab806429f
commit e2838201ad
No known key found for this signature in database
GPG key ID: 009DE379FD9B7B90
3 changed files with 47 additions and 19 deletions

View file

@ -1,10 +1,12 @@
package main
import (
"bytes"
"fmt"
pt "git.torproject.org/pluggable-transports/goptlib.git"
"git.torproject.org/pluggable-transports/snowflake.git/v2/common/event"
"git.torproject.org/pluggable-transports/snowflake.git/v2/common/safelog"
"strings"
)
func NewPTEventLogger() event.SnowflakeEventReceiver {
@ -14,30 +16,67 @@ func NewPTEventLogger() event.SnowflakeEventReceiver {
type ptEventLogger struct {
}
type logSeverity int
const (
Debug logSeverity = iota
Info
Notice
Warning
Error
)
func safePTLog(severity logSeverity, format string, a ...interface{}) {
var buff bytes.Buffer
scrubber := &safelog.LogScrubber{Output: &buff}
// make sure logString ends with exactly one "\n" so it's not stuck in scrubber.Write()'s internal buffer
logString := strings.TrimRight(fmt.Sprintf(format, a...), "\n") + "\n"
scrubber.Write([]byte(logString))
// remove newline before calling pt.Log because it adds a newline
msg := strings.TrimRight(buff.String(), "\n")
switch severity {
case Error:
pt.Log(pt.LogSeverityError, msg)
case Warning:
pt.Log(pt.LogSeverityWarning, msg)
case Notice:
pt.Log(pt.LogSeverityWarning, msg)
case Info:
pt.Log(pt.LogSeverityInfo, msg)
case Debug:
pt.Log(pt.LogSeverityDebug, msg)
default:
pt.Log(pt.LogSeverityNotice, msg)
}
}
func (p ptEventLogger) OnNewSnowflakeEvent(e event.SnowflakeEvent) {
switch e.(type) {
case event.EventOnOfferCreated:
e := e.(event.EventOnOfferCreated)
if e.Error != nil {
pt.Log(pt.LogSeverityNotice, fmt.Sprintf("offer creation failure %v", e.Error.Error()))
safePTLog(Notice, "offer creation failure %v", e.Error.Error())
} else {
pt.Log(pt.LogSeverityNotice, fmt.Sprintf("offer created"))
safePTLog(Notice, "offer created")
}
case event.EventOnBrokerRendezvous:
e := e.(event.EventOnBrokerRendezvous)
if e.Error != nil {
pt.Log(pt.LogSeverityNotice, fmt.Sprintf("broker failure %v", e.Error.Error()))
safePTLog(Notice, "broker failure %v", e.Error.Error())
} else {
pt.Log(pt.LogSeverityNotice, fmt.Sprintf("broker rendezvous peer received"))
safePTLog(Notice, "broker rendezvous peer received")
}
case event.EventOnSnowflakeConnected:
pt.Log(pt.LogSeverityNotice, fmt.Sprintf("connected"))
safePTLog(Notice, "connected")
case event.EventOnSnowflakeConnectionFailed:
e := e.(event.EventOnSnowflakeConnectionFailed)
pt.Log(pt.LogSeverityNotice, fmt.Sprintf("connection failed %v", e.Error.Error()))
safePTLog(Notice, "trying a new proxy: %v", e.Error.Error())
}
}