mirror of
https://github.com/gravitl/netmaker.git
synced 2024-11-12 12:39:47 +08:00
105 lines
2.2 KiB
Go
105 lines
2.2 KiB
Go
|
package logger
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"io/ioutil"
|
||
|
"os"
|
||
|
"sort"
|
||
|
"strconv"
|
||
|
"strings"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
const TimeFormatDay = "2006-01-02"
|
||
|
const TimeFormat = "2006-01-02 15:04:05"
|
||
|
|
||
|
var currentLogs = make(map[string]string)
|
||
|
|
||
|
func makeString(message ...string) string {
|
||
|
return strings.Join(message, " ")
|
||
|
}
|
||
|
|
||
|
func getVerbose() int32 {
|
||
|
level, err := strconv.Atoi(os.Getenv("VERBOSITY"))
|
||
|
if err != nil || level < 0 {
|
||
|
level = 0
|
||
|
}
|
||
|
if level > 3 {
|
||
|
level = 3
|
||
|
}
|
||
|
return int32(level)
|
||
|
}
|
||
|
|
||
|
// ResetLogs - reallocates logs map
|
||
|
func ResetLogs() {
|
||
|
currentLogs = make(map[string]string)
|
||
|
}
|
||
|
|
||
|
// Log - handles adding logs
|
||
|
func Log(verbosity int, message ...string) {
|
||
|
var currentTime = time.Now()
|
||
|
var currentMessage = makeString(message...)
|
||
|
if int32(verbosity) <= getVerbose() && getVerbose() >= 0 {
|
||
|
fmt.Printf("[netmaker] %s %s \n", currentTime.Format(TimeFormat), currentMessage)
|
||
|
}
|
||
|
currentLogs[currentMessage] = currentTime.Format("2006-01-02 15:04:05.999999999")
|
||
|
}
|
||
|
|
||
|
// Dump - dumps all logs into a formatted string
|
||
|
func Dump() string {
|
||
|
var dumpString = ""
|
||
|
type keyVal struct {
|
||
|
Key string
|
||
|
Value time.Time
|
||
|
}
|
||
|
var dumpLogs = make([]keyVal, 0, len(currentLogs))
|
||
|
for key, value := range currentLogs {
|
||
|
parsedTime, err := time.Parse(TimeFormat, value)
|
||
|
if err == nil {
|
||
|
dumpLogs = append(dumpLogs, keyVal{
|
||
|
Key: key,
|
||
|
Value: parsedTime,
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
sort.Slice(dumpLogs, func(i, j int) bool {
|
||
|
return dumpLogs[i].Value.Before(dumpLogs[j].Value)
|
||
|
})
|
||
|
|
||
|
for i := range dumpLogs {
|
||
|
var currLog = dumpLogs[i]
|
||
|
dumpString += fmt.Sprintf("[netmaker] %s %s \n", currLog.Value.Format(TimeFormat), currLog.Key)
|
||
|
}
|
||
|
|
||
|
return dumpString
|
||
|
}
|
||
|
|
||
|
// DumpFile - appends log dump log file
|
||
|
func DumpFile(filePath string) {
|
||
|
f, err := os.OpenFile(filePath, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0600)
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
|
||
|
defer f.Close()
|
||
|
|
||
|
if _, err = f.WriteString(Dump()); err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Retrieve - retrieves logs from given file
|
||
|
func Retrieve(filePath string) string {
|
||
|
contents, err := ioutil.ReadFile(filePath)
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
return string(contents)
|
||
|
}
|
||
|
|
||
|
// FatalLog - exits os after logging
|
||
|
func FatalLog(message ...string) {
|
||
|
fmt.Printf("[netmaker] Fatal: %s \n", makeString(message...))
|
||
|
os.Exit(2)
|
||
|
}
|