From 473e7e3b07457c39cb4da8681cef0d88b76cdda7 Mon Sep 17 00:00:00 2001 From: Alex Grintsvayg Date: Wed, 29 Aug 2018 09:04:09 -0400 Subject: [PATCH] consolidate errors that happen a lot and we know about --- reflector/server.go | 6 ++++-- reflector/stats.go | 15 +++++++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/reflector/server.go b/reflector/server.go index 00b7fb0..565b535 100644 --- a/reflector/server.go +++ b/reflector/server.go @@ -155,8 +155,10 @@ func (s *Server) handleConn(conn net.Conn) { } func (s *Server) doError(conn net.Conn, err error) error { - log.Errorln(errors.FullTrace(err)) - s.stats.AddError(err) + shouldLog := s.stats.AddError(err) + if shouldLog { + log.Errorln(errors.FullTrace(err)) + } if e2, ok := err.(*json.SyntaxError); ok { log.Errorf("syntax error at byte offset %d", e2.Offset) } diff --git a/reflector/stats.go b/reflector/stats.go index b3bbe96..39989d7 100644 --- a/reflector/stats.go +++ b/reflector/stats.go @@ -2,6 +2,7 @@ package reflector import ( "fmt" + "strings" "sync" "time" @@ -54,14 +55,24 @@ func (s *stats) AddStream() { defer s.mu.Unlock() s.streams += 1 } -func (s *stats) AddError(e error) { + +func (s *stats) AddError(e error) (shouldLog bool) { // shouldLog is a hack, but whataever if e == nil { return } err := errors.Wrap(e, 0) + name := err.TypeName() + if strings.Contains(err.Error(), "i/o timeout") { + name = "i/o timeout" + } else if strings.Contains(err.Error(), "read: connection reset by peer") { + name = "read conn reset" + } + + shouldLog = true s.mu.Lock() defer s.mu.Unlock() - s.errors[err.TypeName()] += 1 + s.errors[name] += 1 + return } func (s *stats) runSlackLogger() {