mirror of
https://github.com/gitpod-io/gitpod.git
synced 2025-12-08 17:36:30 +00:00
65 lines
1.5 KiB
Go
65 lines
1.5 KiB
Go
// Copyright (c) 2020 Gitpod GmbH. All rights reserved.
|
|
// Licensed under the GNU Affero General Public License (AGPL).
|
|
// See License.AGPL.txt in the project root for license information.
|
|
|
|
package log
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
type logLevel struct {
|
|
Level string `json:"level"`
|
|
}
|
|
|
|
func LevelHandler(w http.ResponseWriter, r *http.Request) {
|
|
if r.Method == http.MethodGet {
|
|
reportLogLevel(Log.Logger.Level.String(), w, r)
|
|
return
|
|
}
|
|
|
|
if r.Method != http.MethodPost && r.Method != http.MethodPut {
|
|
http.Error(w, r.Method+" unsupported", http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
body, err := io.ReadAll(r.Body)
|
|
if err != nil {
|
|
http.Error(w, fmt.Sprintf("cannot decode request: %v", err), http.StatusPreconditionFailed)
|
|
return
|
|
}
|
|
|
|
if len(body) == 0 {
|
|
http.Error(w, "invalid request", http.StatusPreconditionFailed)
|
|
return
|
|
}
|
|
|
|
var req logLevel
|
|
err = json.Unmarshal(body, &req)
|
|
if err != nil {
|
|
http.Error(w, fmt.Sprintf("cannot decode request: %v", err), http.StatusPreconditionFailed)
|
|
return
|
|
}
|
|
|
|
newLevel, err := logrus.ParseLevel(req.Level)
|
|
if err != nil {
|
|
http.Error(w, err.Error(), http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
Log.Logger.SetLevel(newLevel)
|
|
reportLogLevel(Log.Logger.Level.String(), w, r)
|
|
}
|
|
|
|
func reportLogLevel(level string, w http.ResponseWriter, r *http.Request) {
|
|
w.Header().Set("Content-Type", "application/json")
|
|
w.WriteHeader(http.StatusOK)
|
|
//nolint
|
|
w.Write([]byte(fmt.Sprintf(`{"level": "%v"}`, level)))
|
|
}
|