72 lines
1.7 KiB
Go
72 lines
1.7 KiB
Go
package logserver
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
"net/http"
|
|
"os"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
var (
|
|
DefaultSocketLocation = "/tmp/log.sock"
|
|
)
|
|
|
|
// Server structure is used to the store backend information
|
|
type Server struct {
|
|
SocketLocation string
|
|
Debug bool
|
|
}
|
|
|
|
// StartServerWithDefaults starts the server with default values
|
|
func StartServerWithDefaults() {
|
|
s := Server{
|
|
SocketLocation: DefaultSocketLocation,
|
|
}
|
|
s.Start()
|
|
}
|
|
|
|
// Start the server
|
|
func (s *Server) Start() {
|
|
os.Remove(s.SocketLocation)
|
|
go s.ListenAndServe()
|
|
}
|
|
|
|
// ListenAndServe is used to setup handlers and
|
|
// start listening on the specified location
|
|
func (s *Server) ListenAndServe() error {
|
|
logrus.Infof("Listening on %s", s.SocketLocation)
|
|
server := http.Server{}
|
|
http.HandleFunc("/v1/loglevel", s.loglevel)
|
|
socketListener, err := net.Listen("unix", s.SocketLocation)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return server.Serve(socketListener)
|
|
}
|
|
|
|
func (s *Server) loglevel(rw http.ResponseWriter, req *http.Request) {
|
|
// curl -X POST -d "level=debug" localhost:12345/v1/loglevel
|
|
logrus.Debugf("Received loglevel request")
|
|
if req.Method == http.MethodGet {
|
|
level := logrus.GetLevel().String()
|
|
rw.Write([]byte(fmt.Sprintf("%s\n", level)))
|
|
}
|
|
|
|
if req.Method == http.MethodPost {
|
|
if err := req.ParseForm(); err != nil {
|
|
rw.WriteHeader(http.StatusInternalServerError)
|
|
rw.Write([]byte(fmt.Sprintf("Failed to parse form: %v\n", err)))
|
|
}
|
|
level, err := logrus.ParseLevel(req.Form.Get("level"))
|
|
if err != nil {
|
|
rw.WriteHeader(http.StatusInternalServerError)
|
|
rw.Write([]byte(fmt.Sprintf("Failed to parse loglevel: %v\n", err)))
|
|
} else {
|
|
logrus.SetLevel(level)
|
|
rw.Write([]byte("OK\n"))
|
|
}
|
|
}
|
|
}
|