Adding timestamps to log output (re: #121)

This commit is contained in:
Gregory Kurtzer
2021-09-09 21:16:07 -07:00
parent a71c060b15
commit e3eb57efcd
10 changed files with 57 additions and 81 deletions

View File

@@ -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())
}
}

View File

@@ -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
}

View File

@@ -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)
}
}

View File

@@ -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())
}
}

View File

@@ -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())
}
}

View File

@@ -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")
}

View File

@@ -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())
}
}

View File

@@ -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())
}
}

View File

@@ -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
}

View File

@@ -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)
}