1
0
mirror of https://github.com/openshift/installer.git synced 2026-02-06 09:47:02 +01:00
Files
installer/pkg/agent/logging.go
Richard Su ff3b202730 AGENT-967: Improve monitoring output for multi-node
Monitoring output are now batched and displayed every 5 seconds
for each node. This makes the logs easier to read because the logs
for each node are more likely to be grouped together.
2024-11-05 17:36:00 -05:00

85 lines
1.5 KiB
Go

package agent
import (
"fmt"
"sync"
"time"
"github.com/sirupsen/logrus"
)
// Constants representing logging levels.
const (
Debug = "Debug"
Info = "Info"
Warning = "Warning"
Trace = "Trace"
Error = "Error"
)
const (
logInterval = 5
)
type logEntry struct {
level string
message string
}
// Uses logger if ch is nil.
func log(level, message string, logger *logrus.Logger, ch chan logEntry) {
if ch != nil {
ch <- logEntry{level: level, message: message}
} else {
switch level {
case Debug:
logger.Debug(message)
case Info:
logger.Info(message)
case Warning:
logger.Warn(message)
case Trace:
logger.Trace(message)
}
}
}
func printChannelLogs(ip string, ch chan logEntry) {
for len(ch) > 0 {
entry := <-ch
message := fmt.Sprintf("Node %s: %s", ip, entry.message)
switch entry.level {
case Debug:
logrus.Debug(message)
case Info:
logrus.Info(message)
case Warning:
logrus.Warn(message)
default:
logrus.Info(message)
}
}
}
func printLogs(wg *sync.WaitGroup, ipChanMap map[string]chan logEntry) {
defer wg.Done()
for {
if len(ipChanMap) == 0 {
// no IPs to monitor or all channels are closed, exit loop
break
}
for ip, ch := range ipChanMap {
if len(ch) == 0 {
// check if channel is closed
_, ok := <-ch
if !ok {
// channel is closed, remove IP from map to stop checking for logs
delete(ipChanMap, ip)
}
}
printChannelLogs(ip, ch)
}
time.Sleep(logInterval * time.Second)
}
}