From e3eb57efcdb1cd314fe20472933108c98ad76245 Mon Sep 17 00:00:00 2001 From: Gregory Kurtzer Date: Thu, 9 Sep 2021 21:16:07 -0700 Subject: [PATCH] Adding timestamps to log output (re: #121) --- internal/pkg/warewulfd/container.go | 9 +++----- internal/pkg/warewulfd/daemon.go | 11 ++++----- internal/pkg/warewulfd/ipxe.go | 36 +++++++++++------------------ internal/pkg/warewulfd/kernel.go | 9 +++----- internal/pkg/warewulfd/kmods.go | 9 +++----- internal/pkg/warewulfd/nodedb.go | 6 +---- internal/pkg/warewulfd/runtime.go | 24 ++++++++----------- internal/pkg/warewulfd/system.go | 9 +++----- internal/pkg/warewulfd/util.go | 12 ++++++++-- internal/pkg/warewulfd/warewulfd.go | 13 ++++------- 10 files changed, 57 insertions(+), 81 deletions(-) diff --git a/internal/pkg/warewulfd/container.go b/internal/pkg/warewulfd/container.go index 498d5bec..355f62ee 100644 --- a/internal/pkg/warewulfd/container.go +++ b/internal/pkg/warewulfd/container.go @@ -1,7 +1,6 @@ package warewulfd import ( - "log" "net/http" "github.com/hpcng/warewulf/internal/pkg/container" @@ -11,7 +10,7 @@ func ContainerSend(w http.ResponseWriter, req *http.Request) { node, err := getSanity(req) if err != nil { w.WriteHeader(404) - log.Panicln(err) + daemonLogf("ERROR: %s\n", err) return } @@ -20,13 +19,11 @@ func ContainerSend(w http.ResponseWriter, req *http.Request) { err = sendFile(w, containerImage, node.Id.Get()) if err != nil { - log.Printf("ERROR1: %s\n", err) + daemonLogf("ERROR: %s\n", err) w.WriteHeader(503) - } else { - log.Printf("SEND: %15s: %s\n", node.Id.Get(), containerImage) } } else { w.WriteHeader(503) - log.Printf("ERROR: No Container set for node %s\n", node.Id.Get()) + daemonLogf("WARNING: No Container set for node %s\n", node.Id.Get()) } } diff --git a/internal/pkg/warewulfd/daemon.go b/internal/pkg/warewulfd/daemon.go index a89b8c5e..a3f17125 100644 --- a/internal/pkg/warewulfd/daemon.go +++ b/internal/pkg/warewulfd/daemon.go @@ -9,7 +9,6 @@ import ( "syscall" "github.com/hpcng/warewulf/internal/pkg/util" - "github.com/hpcng/warewulf/internal/pkg/wwlog" "github.com/pkg/errors" ) @@ -24,6 +23,7 @@ func DaemonStart() error { if err != nil { return errors.Wrap(err, "failed to run server") } + } else { os.Setenv("WAREWULFD_BACKGROUND", "1") @@ -36,6 +36,7 @@ func DaemonStart() error { if err != nil { return err } + defer p.Close() cmd := exec.Command(os.Args[0], "server", "start") cmd.Stdout = f @@ -48,8 +49,6 @@ func DaemonStart() error { fmt.Fprintf(p, "%d", pid) - p.Close() - } return nil @@ -57,7 +56,7 @@ func DaemonStart() error { func DaemonStatus() error { if !util.IsFile(WAREWULFD_PIDFILE) { - wwlog.Printf(wwlog.INFO, "Warewulf daemon process not running (%s)\n", WAREWULFD_PIDFILE) + fmt.Printf("Warewulf daemon process not running (%s)\n", WAREWULFD_PIDFILE) return nil } @@ -86,7 +85,7 @@ func DaemonStatus() error { func DaemonReload() error { if !util.IsFile(WAREWULFD_PIDFILE) { - wwlog.Printf(wwlog.INFO, "Warewulf daemon process not running (%s)\n", WAREWULFD_PIDFILE) + fmt.Printf("Warewulf daemon process not running (%s)\n", WAREWULFD_PIDFILE) return nil } @@ -114,7 +113,7 @@ func DaemonReload() error { func DaemonStop() error { if !util.IsFile(WAREWULFD_PIDFILE) { - wwlog.Printf(wwlog.INFO, "Warewulf daemon process not running (%s)\n", WAREWULFD_PIDFILE) + fmt.Printf("Warewulf daemon process not running (%s)\n", WAREWULFD_PIDFILE) return nil } diff --git a/internal/pkg/warewulfd/ipxe.go b/internal/pkg/warewulfd/ipxe.go index f6c018f9..f8a57dc9 100644 --- a/internal/pkg/warewulfd/ipxe.go +++ b/internal/pkg/warewulfd/ipxe.go @@ -2,7 +2,6 @@ package warewulfd import ( "fmt" - "log" "net/http" "strconv" "strings" @@ -33,7 +32,7 @@ func IpxeSend(w http.ResponseWriter, req *http.Request) { var unconfiguredNode bool if url[2] == "" { - log.Printf("ERROR: Bad iPXE request from %s\n", req.RemoteAddr) + daemonLogf("ERROR: Bad iPXE request from %s\n", req.RemoteAddr) w.WriteHeader(404) return } @@ -42,13 +41,11 @@ func IpxeSend(w http.ResponseWriter, req *http.Request) { conf, err := warewulfconf.New() if err != nil { - wwlog.Printf(wwlog.ERROR, "%s\n", err) + daemonLogf("ERROR: Could not open Warewulf configuration: %s\n", err) w.WriteHeader(503) return } - log.Printf("IPXEREQ: %s\n", req.URL.Path) - nodeobj, err := GetNode(hwaddr) if err != nil { @@ -57,44 +54,41 @@ func IpxeSend(w http.ResponseWriter, req *http.Request) { nodeDB, err := node.New() if err != nil { - log.Printf("Could not read node configuration file: %s\n", err) + daemonLogf("Could not read node configuration file: %s\n", err) w.WriteHeader(503) return } - wwlog.Printf(wwlog.INFO, "Node was not found, looking for discoverable nodes...\n") + daemonLogf("IPXEREQ: %s (node not configured)\n", hwaddr) n, netdev, err := nodeDB.FindDiscoverableNode() if err != nil { - wwlog.Printf(wwlog.WARN, "No nodes are set as discoverable...\n") unconfiguredNode = true } else { - wwlog.Printf(wwlog.INFO, "Adding new configuration to discoverable node: %s\n", n.Id.Get()) - n.NetDevs[netdev].Hwaddr.Set(hwaddr) n.Discoverable.SetB(false) err := nodeDB.NodeUpdate(n) if err != nil { - wwlog.Printf(wwlog.ERROR, "Could not add discovered configuration for node: %s\n", n.Id.Get()) + daemonLogf("IPXEREQ: %s (failed to set node configuration)\n", hwaddr) + unconfiguredNode = true } else { err := nodeDB.Persist() if err != nil { - wwlog.Printf(wwlog.ERROR, "Could not persist new node configuration while adding node: %s\n", n.Id.Get()) + daemonLogf("IPXEREQ: %s (failed to persist node configuration)\n", hwaddr) + unconfiguredNode = true } else { nodeobj = n - wwlog.Printf(wwlog.INFO, "Building System Overlay:\n") _ = overlay.BuildSystemOverlay([]node.NodeInfo{n}) - wwlog.Printf(wwlog.INFO, "Building Runtime Overlay:\n") _ = overlay.BuildRuntimeOverlay([]node.NodeInfo{n}) - wwlog.Printf(wwlog.INFO, "Added node %s\n", nodeobj.Id.Get()) + daemonLogf("IPXEREQ: %s (node automatically configured)\n", hwaddr) err := LoadNodeDB() if err != nil { - wwlog.Printf(wwlog.WARN, "Could not reload database: %s\n", err) + daemonLogf("Could not reload configuration: %s\n", err) } } @@ -103,11 +97,11 @@ func IpxeSend(w http.ResponseWriter, req *http.Request) { } if unconfiguredNode { - log.Printf("UNCONFIGURED NODE: %15s\n", hwaddr) + daemonLogf("IPXEREQ: %s (unknown/unconfigured node)\n", hwaddr) tmpl, err := template.ParseFiles("/etc/warewulf/ipxe/unconfigured.ipxe") if err != nil { - wwlog.Printf(wwlog.ERROR, "%s\n", err) + daemonLogf("ERROR: Could not parse unconfigured node IPXE template: %s\n", err) return } @@ -117,7 +111,7 @@ func IpxeSend(w http.ResponseWriter, req *http.Request) { err = tmpl.Execute(w, replace) if err != nil { - wwlog.Printf(wwlog.ERROR, "%s\n", err) + daemonLogf("ERROR: Could not update unconfigured node IPXE template: %s\n", err) return } @@ -125,8 +119,6 @@ func IpxeSend(w http.ResponseWriter, req *http.Request) { } else { - log.Printf("IPXE: %15s: %s\n", nodeobj.Id.Get(), req.URL.Path) - ipxeTemplate := fmt.Sprintf("/etc/warewulf/ipxe/%s.ipxe", nodeobj.Ipxe.Get()) tmpl, err := template.ParseFiles(ipxeTemplate) @@ -152,7 +144,7 @@ func IpxeSend(w http.ResponseWriter, req *http.Request) { return } - log.Printf("SEND: %15s: %s\n", nodeobj.Id.Get(), ipxeTemplate) + daemonLogf("SEND: %15s: %s\n", nodeobj.Id.Get(), ipxeTemplate) } } diff --git a/internal/pkg/warewulfd/kernel.go b/internal/pkg/warewulfd/kernel.go index c51b74a2..58196a72 100644 --- a/internal/pkg/warewulfd/kernel.go +++ b/internal/pkg/warewulfd/kernel.go @@ -1,7 +1,6 @@ package warewulfd import ( - "log" "net/http" "github.com/hpcng/warewulf/internal/pkg/kernel" @@ -11,7 +10,7 @@ func KernelSend(w http.ResponseWriter, req *http.Request) { node, err := getSanity(req) if err != nil { w.WriteHeader(404) - log.Println(err) + daemonLogf("ERROR: %s\n", err) return } @@ -20,13 +19,11 @@ func KernelSend(w http.ResponseWriter, req *http.Request) { err := sendFile(w, fileName, node.Id.Get()) if err != nil { - log.Printf("ERROR: %s\n", err) - } else { - log.Printf("SEND: %15s: %s\n", node.Id.Get(), fileName) + daemonLogf("ERROR: %s\n", err) } } else { w.WriteHeader(503) - log.Printf("ERROR: No 'kernel version' set for node %s\n", node.Id.Get()) + daemonLogf("WARNING: No 'kernel version' set for node %s\n", node.Id.Get()) } } diff --git a/internal/pkg/warewulfd/kmods.go b/internal/pkg/warewulfd/kmods.go index b0a9fa1e..473f8e77 100644 --- a/internal/pkg/warewulfd/kmods.go +++ b/internal/pkg/warewulfd/kmods.go @@ -1,7 +1,6 @@ package warewulfd import ( - "log" "net/http" "github.com/hpcng/warewulf/internal/pkg/kernel" @@ -12,7 +11,7 @@ func KmodsSend(w http.ResponseWriter, req *http.Request) { node, err := getSanity(req) if err != nil { w.WriteHeader(404) - log.Println(err) + daemonLogf("ERROR: %s\n", err) return } @@ -21,13 +20,11 @@ func KmodsSend(w http.ResponseWriter, req *http.Request) { err := sendFile(w, fileName, node.Id.Get()) if err != nil { - log.Printf("ERROR: %s\n", err) - } else { - log.Printf("SEND: %15s: %s\n", node.Id.Get(), fileName) + daemonLogf("ERROR: %s\n", err) } } else { w.WriteHeader(503) - log.Printf("ERROR: No 'kernel version' set for node %s\n", node.Id.Get()) + daemonLogf("WARNING: No 'kernel version' set for node %s\n", node.Id.Get()) } } diff --git a/internal/pkg/warewulfd/nodedb.go b/internal/pkg/warewulfd/nodedb.go index 38a0af6e..c9c09645 100644 --- a/internal/pkg/warewulfd/nodedb.go +++ b/internal/pkg/warewulfd/nodedb.go @@ -6,7 +6,6 @@ import ( "github.com/pkg/errors" "github.com/hpcng/warewulf/internal/pkg/node" - "github.com/hpcng/warewulf/internal/pkg/wwlog" ) type nodeDB struct { @@ -21,7 +20,7 @@ var ( func LoadNodeDB() error { TmpMap := make(map[string]node.NodeInfo) - wwlog.Printf(wwlog.INFO, "Loading the node Database\n") + daemonLogf("(re)Loading the node Database\n") DB, err := node.New() if err != nil { @@ -35,8 +34,6 @@ func LoadNodeDB() error { for _, n := range nodes { for _, netdev := range n.NetDevs { - wwlog.Printf(wwlog.DEBUG, "Caching node entry: '%s' -> %s\n", netdev.Hwaddr.Get(), n.Id.Get()) - TmpMap[netdev.Hwaddr.Get()] = n } } @@ -57,7 +54,6 @@ func GetNode(val string) (node.NodeInfo, error) { return db.NodeInfo[val], nil } - wwlog.Printf(wwlog.VERBOSE, "Node not found in DB: %s\n", val) var empty node.NodeInfo return empty, errors.New("No node found") } diff --git a/internal/pkg/warewulfd/runtime.go b/internal/pkg/warewulfd/runtime.go index 7c98f667..38cb38ce 100644 --- a/internal/pkg/warewulfd/runtime.go +++ b/internal/pkg/warewulfd/runtime.go @@ -1,8 +1,6 @@ package warewulfd import ( - "fmt" - "log" "net/http" "strconv" "strings" @@ -15,14 +13,14 @@ import ( func RuntimeOverlaySend(w http.ResponseWriter, req *http.Request) { conf, err := warewulfconf.New() if err != nil { - log.Printf("Could not read Warewulf configuration file: %s\n", err) + daemonLogf("ERROR: Could not read Warewulf configuration file: %s\n", err) w.WriteHeader(503) return } nodes, err := node.New() if err != nil { - log.Printf("Could not read node configuration file: %s\n", err) + daemonLogf("%s | ERROR: Could not read node configuration file: %s\n", err) w.WriteHeader(503) return } @@ -30,19 +28,19 @@ func RuntimeOverlaySend(w http.ResponseWriter, req *http.Request) { remote := strings.Split(req.RemoteAddr, ":") port, err := strconv.Atoi(remote[1]) if err != nil { - log.Printf("Could not convert port to integer: %s\n", remote[1]) + daemonLogf("%s | ERROR: Could not convert port to integer: %s\n", remote[1]) w.WriteHeader(503) return } if err != nil { - fmt.Printf("ERROR: Could not load configuration file: %s\n", err) + daemonLogf("%s | ERROR: Could not load configuration file: %s\n", err) return } if conf.Warewulf.Secure { if port >= 1024 { - log.Panicf("DENIED: Connection coming from non-privledged port: %s\n", req.RemoteAddr) + daemonLogf("DENIED: Connection coming from non-privledged port: %s\n", req.RemoteAddr) w.WriteHeader(401) return } @@ -50,17 +48,17 @@ func RuntimeOverlaySend(w http.ResponseWriter, req *http.Request) { node, err := nodes.FindByIpaddr(remote[0]) if err != nil { - fmt.Printf("Could not find node by IP address: %s\n", remote[0]) + daemonLogf("WARNING: Could not find node by IP address: %s\n", remote[0]) w.WriteHeader(404) return } if node.Id.Defined() { - log.Printf("UNKNOWN: %15s: %s\n", remote[0], req.URL.Path) + daemonLogf("REQ: %15s: %s (unknown/unconfigured node)\n", node.Id.Get(), req.URL.Path) w.WriteHeader(404) return } else { - log.Printf("REQ: %15s: %s\n", node.Id.Get(), req.URL.Path) + daemonLogf("REQ: %15s: %s\n", node.Id.Get(), req.URL.Path) } if node.RuntimeOverlay.Defined() { @@ -68,12 +66,10 @@ func RuntimeOverlaySend(w http.ResponseWriter, req *http.Request) { err := sendFile(w, fileName, node.Id.Get()) if err != nil { - log.Printf("ERROR: %s\n", err) - } else { - log.Printf("SEND: %15s: %s\n", node.Id.Get(), fileName) + daemonLogf("ERROR: %s\n", err) } } else { w.WriteHeader(503) - log.Printf("ERROR: No 'runtime system-overlay' set for node %s\n", node.Id.Get()) + daemonLogf("WARNING: No 'runtime system-overlay' set for node %s\n", node.Id.Get()) } } diff --git a/internal/pkg/warewulfd/system.go b/internal/pkg/warewulfd/system.go index d17abe0f..293c88ca 100644 --- a/internal/pkg/warewulfd/system.go +++ b/internal/pkg/warewulfd/system.go @@ -1,7 +1,6 @@ package warewulfd import ( - "log" "net/http" "github.com/hpcng/warewulf/internal/pkg/config" @@ -11,7 +10,7 @@ func SystemOverlaySend(w http.ResponseWriter, req *http.Request) { node, err := getSanity(req) if err != nil { w.WriteHeader(404) - log.Println(err) + daemonLogf("ERROR: %s\n", err) return } @@ -20,12 +19,10 @@ func SystemOverlaySend(w http.ResponseWriter, req *http.Request) { err := sendFile(w, fileName, node.Id.Get()) if err != nil { - log.Printf("ERROR: %s\n", err) - } else { - log.Printf("SEND: %15s: %s\n", node.Id.Get(), fileName) + daemonLogf("ERROR: %s\n", err) } } else { w.WriteHeader(503) - log.Printf("ERROR: No 'system system-overlay' set for node %s\n", node.Id.Get()) + daemonLogf("WARNING: No 'system system-overlay' set for node %s\n", node.Id.Get()) } } diff --git a/internal/pkg/warewulfd/util.go b/internal/pkg/warewulfd/util.go index 93627454..f88514bb 100644 --- a/internal/pkg/warewulfd/util.go +++ b/internal/pkg/warewulfd/util.go @@ -1,17 +1,23 @@ package warewulfd import ( + "fmt" "io" - "log" "net/http" "os" "strconv" "strings" + "time" "github.com/hpcng/warewulf/internal/pkg/node" "github.com/pkg/errors" ) +func daemonLogf(message string, a ...interface{}) { + prefix := fmt.Sprintf("[%s] ", time.Now().Format(time.UnixDate)) + fmt.Printf(prefix+message, a...) +} + func getSanity(req *http.Request) (node.NodeInfo, error) { url := strings.Split(req.URL.Path, "/") @@ -23,7 +29,7 @@ func getSanity(req *http.Request) (node.NodeInfo, error) { return ret, errors.New("Could not find node by HW address: " + req.URL.Path) } - log.Printf("REQ: %15s: %s\n", nodeobj.Id.Get(), req.URL.Path) + daemonLogf("REQ: %15s: %s\n", nodeobj.Id.Get(), req.URL.Path) return nodeobj, nil } @@ -58,5 +64,7 @@ func sendFile(w http.ResponseWriter, filename string, sendto string) error { return errors.Wrap(err, "failed to copy") } + daemonLogf("SEND: %15s: %s\n", sendto, filename) + return nil } diff --git a/internal/pkg/warewulfd/warewulfd.go b/internal/pkg/warewulfd/warewulfd.go index 8c94be67..e84a0357 100644 --- a/internal/pkg/warewulfd/warewulfd.go +++ b/internal/pkg/warewulfd/warewulfd.go @@ -1,12 +1,11 @@ package warewulfd import ( + "fmt" "net/http" "os" "os/signal" "syscall" - - "github.com/hpcng/warewulf/internal/pkg/wwlog" ) // TODO: https://github.com/danderson/netboot/blob/master/pixiecore/dhcp.go @@ -21,18 +20,16 @@ func RunServer() error { for range c { err := LoadNodeDB() if err != nil { - wwlog.Printf(wwlog.WARN, "Could not load database: %s\n", err) + fmt.Printf("ERROR: Could not load database: %s\n", err) } } }() err := LoadNodeDB() if err != nil { - wwlog.Printf(wwlog.WARN, "Could not load database: %s\n", err) + fmt.Printf("ERROR: Could not load database: %s\n", err) } - wwlog.Printf(wwlog.DEBUG, "Registering handlers for the web service\n") - http.HandleFunc("/ipxe/", IpxeSend) http.HandleFunc("/kernel/", KernelSend) http.HandleFunc("/kmods/", KmodsSend) @@ -40,11 +37,11 @@ func RunServer() error { http.HandleFunc("/overlay-system/", SystemOverlaySend) http.HandleFunc("/overlay-runtime", RuntimeOverlaySend) - wwlog.Printf(wwlog.VERBOSE, "Starting HTTPD REST service\n") + daemonLogf("Starting HTTPD REST service\n") err = http.ListenAndServe(":9873", nil) if err != nil { - wwlog.Printf(wwlog.ERROR, "Could not start listening service: %s\n", err) + fmt.Printf("ERROR: Could not start listening service: %s\n", err) os.Exit(1) }