Просмотр исходного кода

HTTP debug middleware should be behind ShouldDebug()

Jakob Borg 10 лет назад
Родитель
Сommit
f7ad97918a
2 измененных файлов с 21 добавлено и 15 удалено
  1. 4 0
      cmd/syncthing/debug.go
  2. 17 15
      cmd/syncthing/gui.go

+ 4 - 0
cmd/syncthing/debug.go

@@ -18,6 +18,10 @@ var (
 	httpl = logger.DefaultLogger.NewFacility("http", "REST API")
 )
 
+func shouldDebugHTTP() bool {
+	return l.ShouldDebug("http")
+}
+
 func init() {
 	l.SetDebug("main", strings.Contains(os.Getenv("STTRACE"), "main") || os.Getenv("STTRACE") == "all")
 	l.SetDebug("http", strings.Contains(os.Getenv("STTRACE"), "http") || os.Getenv("STTRACE") == "all")

+ 17 - 15
cmd/syncthing/gui.go

@@ -298,23 +298,25 @@ func debugMiddleware(h http.Handler) http.Handler {
 	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 		t0 := time.Now()
 		h.ServeHTTP(w, r)
-		ms := 1000 * time.Since(t0).Seconds()
-
-		// The variable `w` is most likely a *http.response, which we can't do
-		// much with since it's a non exported type. We can however peek into
-		// it with reflection to get at the status code and number of bytes
-		// written.
-		var status, written int64
-		if rw := reflect.Indirect(reflect.ValueOf(w)); rw.IsValid() && rw.Kind() == reflect.Struct {
-			if rf := rw.FieldByName("status"); rf.IsValid() && rf.Kind() == reflect.Int {
-				status = rf.Int()
-			}
-			if rf := rw.FieldByName("written"); rf.IsValid() && rf.Kind() == reflect.Int64 {
-				written = rf.Int()
+
+		if shouldDebugHTTP() {
+			ms := 1000 * time.Since(t0).Seconds()
+
+			// The variable `w` is most likely a *http.response, which we can't do
+			// much with since it's a non exported type. We can however peek into
+			// it with reflection to get at the status code and number of bytes
+			// written.
+			var status, written int64
+			if rw := reflect.Indirect(reflect.ValueOf(w)); rw.IsValid() && rw.Kind() == reflect.Struct {
+				if rf := rw.FieldByName("status"); rf.IsValid() && rf.Kind() == reflect.Int {
+					status = rf.Int()
+				}
+				if rf := rw.FieldByName("written"); rf.IsValid() && rf.Kind() == reflect.Int64 {
+					written = rf.Int()
+				}
 			}
+			l.Debugf("http: %s %q: status %d, %d bytes in %.02f ms", r.Method, r.URL.String(), status, written, ms)
 		}
-
-		l.Debugf("http: %s %q: status %d, %d bytes in %.02f ms", r.Method, r.URL.String(), status, written, ms)
 	})
 }