diff --git a/elektronLogging/ElektronFormatter.go b/elektronLogging/ElektronFormatter.go index 265d73b..c54fc6a 100644 --- a/elektronLogging/ElektronFormatter.go +++ b/elektronLogging/ElektronFormatter.go @@ -2,7 +2,6 @@ package elektronLogging import ( "bytes" - "fmt" "github.com/fatih/color" log "github.com/sirupsen/logrus" "strings" @@ -37,14 +36,12 @@ func (f ElektronFormatter) Format(entry *log.Entry) ([]byte, error) { levelColor := f.getColor(entry) level := levelColor.Sprintf("[%s]:", strings.ToUpper(entry.Level.String())) - message := fmt.Sprintf("%s %s ", level, entry.Time.Format(f.TimestampFormat)) - if entry.Message != "" { - message = fmt.Sprintf("%s %s %s ", level, entry.Time.Format(f.TimestampFormat), entry.Message) - } + message := strings.Join([]string{level, entry.Time.Format(f.TimestampFormat), entry.Message, " "}, " ") + var formattedFields []string for key, value := range entry.Data { formattedFields = append(formattedFields, - strings.Join([]string{key, fmt.Sprintf("%s", value)}, "=")) + strings.Join([]string{key, value.(string)}, "=")) } b.WriteString(message) diff --git a/elektronLogging/clsfnTaskDistOverheadLogger.go b/elektronLogging/clsfnTaskDistOverheadLogger.go index 749c776..9bae203 100644 --- a/elektronLogging/clsfnTaskDistOverheadLogger.go +++ b/elektronLogging/clsfnTaskDistOverheadLogger.go @@ -3,6 +3,7 @@ package elektronLogging import ( log "github.com/sirupsen/logrus" "os" + "strings" ) type ClsfnTaskDistOverheadLogger struct { @@ -10,7 +11,7 @@ type ClsfnTaskDistOverheadLogger struct { } func NewClsfnTaskDistOverheadLogger(logType int, prefix string) *ClsfnTaskDistOverheadLogger { - cLog := new(ClsfnTaskDistOverheadLogger) + cLog := &ClsfnTaskDistOverheadLogger{} cLog.Type = logType cLog.SetLogFile(prefix) return cLog @@ -36,9 +37,9 @@ func (cLog *ClsfnTaskDistOverheadLogger) Log(logType int, level log.Level, logDa func (cLog *ClsfnTaskDistOverheadLogger) SetLogFile(prefix string) { - tskDistLogPrefix := prefix + config.TaskDistConfig.FilenameExtension + tskDistLogPrefix := strings.Join([]string{prefix, config.TaskDistConfig.FilenameExtension}, "") if logDir != "" { - tskDistLogPrefix = logDir + "/" + tskDistLogPrefix + tskDistLogPrefix = strings.Join([]string{logDir, tskDistLogPrefix}, "/") } if logFile, err := os.Create(tskDistLogPrefix); err != nil { log.Fatal("Unable to create logFile: ", err) diff --git a/elektronLogging/consoleLogger.go b/elektronLogging/consoleLogger.go index 0801295..1c6b379 100644 --- a/elektronLogging/consoleLogger.go +++ b/elektronLogging/consoleLogger.go @@ -3,6 +3,7 @@ package elektronLogging import ( log "github.com/sirupsen/logrus" "os" + "strings" ) type ConsoleLogger struct { @@ -10,7 +11,7 @@ type ConsoleLogger struct { } func NewConsoleLogger(logType int, prefix string) *ConsoleLogger { - cLog := new(ConsoleLogger) + cLog := &ConsoleLogger{} cLog.Type = logType cLog.SetLogFile(prefix) return cLog @@ -18,7 +19,6 @@ func NewConsoleLogger(logType int, prefix string) *ConsoleLogger { func (cLog *ConsoleLogger) Log(logType int, level log.Level, logData log.Fields, message string) { if logType <= cLog.Type { - //logFields := cloneFields(logData) logger.SetLevel(level) logger.SetOutput(os.Stdout) @@ -34,9 +34,9 @@ func (cLog *ConsoleLogger) Log(logType int, level log.Level, logData log.Fields, func (cLog *ConsoleLogger) SetLogFile(prefix string) { - consoleLogPrefix := prefix + config.ConsoleConfig.FilenameExtension + consoleLogPrefix := strings.Join([]string{prefix, config.ConsoleConfig.FilenameExtension}, "") if logDir != "" { - consoleLogPrefix = logDir + "/" + consoleLogPrefix + consoleLogPrefix = strings.Join([]string{logDir, consoleLogPrefix}, "/") } if logFile, err := os.Create(consoleLogPrefix); err != nil { log.Fatal("Unable to create logFile: ", err) diff --git a/elektronLogging/createLogDir.go b/elektronLogging/createLogDir.go index 397a2a7..8de5faa 100644 --- a/elektronLogging/createLogDir.go +++ b/elektronLogging/createLogDir.go @@ -4,6 +4,7 @@ import ( logrus "github.com/sirupsen/logrus" "os" "strconv" + "strings" "time" ) @@ -16,18 +17,13 @@ func GetLogDir(startTime time.Time, prefix string) { } func createLogDir(prefix string, startTime time.Time) string { + // Creating directory to store all logs for this run - logDirName := "./" + prefix + strconv.Itoa(startTime.Year()) - logDirName += "-" - logDirName += startTime.Month().String() - logDirName += "-" - logDirName += strconv.Itoa(startTime.Day()) - logDirName += "_" - logDirName += strconv.Itoa(startTime.Hour()) - logDirName += "-" - logDirName += strconv.Itoa(startTime.Minute()) - logDirName += "-" - logDirName += strconv.Itoa(startTime.Second()) + logDirName := strings.Join([]string{"./", prefix, strconv.Itoa(startTime.Year())}, "") + logDirName = strings.Join([]string{logDirName, startTime.Month().String(), strconv.Itoa(startTime.Day())}, "-") + logDirName = strings.Join([]string{logDirName, strconv.Itoa(startTime.Hour())}, "_") + logDirName = strings.Join([]string{logDirName, strconv.Itoa(startTime.Minute()), strconv.Itoa(startTime.Second())}, "-") + if _, err := os.Stat(logDirName); os.IsNotExist(err) { os.Mkdir(logDirName, 0755) } else { diff --git a/elektronLogging/logger.go b/elektronLogging/logger.go index 94e4b62..08bab12 100644 --- a/elektronLogging/logger.go +++ b/elektronLogging/logger.go @@ -1,18 +1,18 @@ package elektronLogging import ( - "fmt" log "github.com/sirupsen/logrus" . "github.com/spdfg/elektron/elektronLogging/types" - "strconv" + "strings" "time" ) var config LoggerConfig var logger *log.Logger var formatter ElektronFormatter +var ElektronLog *LoggerImpl -func BuildLogger() *LoggerImpl { +func BuildLogger(prefix string) { // read configuration from yaml config.GetConfig() @@ -20,17 +20,17 @@ func BuildLogger() *LoggerImpl { // create the log directory startTime := time.Now() formatter.TimestampFormat = "2006-01-02 15:04:05" + formattedStartTime := startTime.Format("20060102150405") GetLogDir(startTime, "_") - prefix := fmt.Sprintf("_%d%d%s%s%s%s", startTime.Year(), startTime.Month(), strconv.Itoa(startTime.Day()), - strconv.Itoa(startTime.Hour()), strconv.Itoa(startTime.Minute()), strconv.Itoa(startTime.Second())) + prefix = strings.Join([]string{prefix, formattedStartTime}, "_") //create a single logrus instance and set its formatter to ElektronFormatter logger = log.New() logger.SetFormatter(&formatter) // create a chain of loggers - head := new(LoggerImpl) + head := &LoggerImpl{} cLog := NewConsoleLogger(CONSOLE, prefix) pLog := NewPcpLogger(PCP, prefix) schedTraceLog := NewSchedTraceLogger(SCHED_TRACE, prefix) @@ -45,7 +45,5 @@ func BuildLogger() *LoggerImpl { spsLog.SetNext(schedWindowLog) schedWindowLog.SetNext(tskDistLog) - return head + ElektronLog = head } - -var ElektronLog = BuildLogger() diff --git a/elektronLogging/loggerChain.go b/elektronLogging/loggerChain.go index 236f2fa..8a8207a 100644 --- a/elektronLogging/loggerChain.go +++ b/elektronLogging/loggerChain.go @@ -1,9 +1,8 @@ package elektronLogging import ( - "os" - //data "github.com/spdfg/elektron/elektronLogging/data" log "github.com/sirupsen/logrus" + "os" ) type Logger interface { @@ -27,11 +26,3 @@ func (l *LoggerImpl) Log(logType int, level log.Level, logData log.Fields, messa l.next.Log(logType, level, logData, message) } } - -/*func cloneFields(logData data.LogData) log.Fields { - var newMap = make(log.Fields) - for k,v := range logData { - newMap[k] = v - } - return newMap -}*/ diff --git a/elektronLogging/pcpLogger.go b/elektronLogging/pcpLogger.go index 4969054..d7d12ae 100644 --- a/elektronLogging/pcpLogger.go +++ b/elektronLogging/pcpLogger.go @@ -3,6 +3,7 @@ package elektronLogging import ( log "github.com/sirupsen/logrus" "os" + "strings" ) type PcpLogger struct { @@ -10,7 +11,7 @@ type PcpLogger struct { } func NewPcpLogger(logType int, prefix string) *PcpLogger { - pLog := new(PcpLogger) + pLog := &PcpLogger{} pLog.Type = logType pLog.SetLogFile(prefix) return pLog @@ -36,9 +37,9 @@ func (pLog *PcpLogger) Log(logType int, level log.Level, logData log.Fields, mes func (plog *PcpLogger) SetLogFile(prefix string) { - pcpLogPrefix := prefix + config.PCPConfig.FilenameExtension + pcpLogPrefix := strings.Join([]string{prefix, config.PCPConfig.FilenameExtension}, "") if logDir != "" { - pcpLogPrefix = logDir + "/" + pcpLogPrefix + pcpLogPrefix = strings.Join([]string{logDir, pcpLogPrefix}, "/") } if logFile, err := os.Create(pcpLogPrefix); err != nil { log.Fatal("Unable to create logFile: ", err) diff --git a/elektronLogging/schedPolicySwitchLogger.go b/elektronLogging/schedPolicySwitchLogger.go index d2d41a0..6417bd3 100644 --- a/elektronLogging/schedPolicySwitchLogger.go +++ b/elektronLogging/schedPolicySwitchLogger.go @@ -3,6 +3,7 @@ package elektronLogging import ( log "github.com/sirupsen/logrus" "os" + "strings" ) type SchedPolicySwitchLogger struct { @@ -10,7 +11,7 @@ type SchedPolicySwitchLogger struct { } func NewSchedPolicySwitchLogger(logType int, prefix string) *SchedPolicySwitchLogger { - sLog := new(SchedPolicySwitchLogger) + sLog := &SchedPolicySwitchLogger{} sLog.Type = logType sLog.SetLogFile(prefix) return sLog @@ -36,9 +37,9 @@ func (sLog *SchedPolicySwitchLogger) Log(logType int, level log.Level, logData l func (sLog *SchedPolicySwitchLogger) SetLogFile(prefix string) { - spsLogPrefix := prefix + config.SPSConfig.FilenameExtension + spsLogPrefix := strings.Join([]string{prefix, config.SPSConfig.FilenameExtension}, "") if logDir != "" { - spsLogPrefix = logDir + "/" + spsLogPrefix + spsLogPrefix = strings.Join([]string{logDir, spsLogPrefix}, "/") } if logFile, err := os.Create(spsLogPrefix); err != nil { log.Fatal("Unable to create logFile: ", err) diff --git a/elektronLogging/schedTraceLogger.go b/elektronLogging/schedTraceLogger.go index 238c8e6..59b65bf 100644 --- a/elektronLogging/schedTraceLogger.go +++ b/elektronLogging/schedTraceLogger.go @@ -3,6 +3,7 @@ package elektronLogging import ( log "github.com/sirupsen/logrus" "os" + "strings" ) type SchedTraceLogger struct { @@ -10,7 +11,7 @@ type SchedTraceLogger struct { } func NewSchedTraceLogger(logType int, prefix string) *SchedTraceLogger { - sLog := new(SchedTraceLogger) + sLog := &SchedTraceLogger{} sLog.Type = logType sLog.SetLogFile(prefix) return sLog @@ -36,9 +37,9 @@ func (sLog *SchedTraceLogger) Log(logType int, level log.Level, logData log.Fiel func (sLog *SchedTraceLogger) SetLogFile(prefix string) { - schedTraceLogPrefix := prefix + config.SchedTraceConfig.FilenameExtension + schedTraceLogPrefix := strings.Join([]string{prefix, config.SchedTraceConfig.FilenameExtension}, "") if logDir != "" { - schedTraceLogPrefix = logDir + "/" + schedTraceLogPrefix + schedTraceLogPrefix = strings.Join([]string{logDir, schedTraceLogPrefix}, "/") } if logFile, err := os.Create(schedTraceLogPrefix); err != nil { log.Fatal("Unable to create logFile: ", err) diff --git a/elektronLogging/schedWindowLogger.go b/elektronLogging/schedWindowLogger.go index 9439698..e9e83ad 100644 --- a/elektronLogging/schedWindowLogger.go +++ b/elektronLogging/schedWindowLogger.go @@ -3,6 +3,7 @@ package elektronLogging import ( log "github.com/sirupsen/logrus" "os" + "strings" ) type SchedWindowLogger struct { @@ -10,7 +11,7 @@ type SchedWindowLogger struct { } func NewSchedWindowLogger(logType int, prefix string) *SchedWindowLogger { - sLog := new(SchedWindowLogger) + sLog := &SchedWindowLogger{} sLog.Type = logType sLog.SetLogFile(prefix) return sLog @@ -20,6 +21,7 @@ func (sLog *SchedWindowLogger) Log(logType int, level log.Level, logData log.Fie if sLog.Type == logType { logger.SetLevel(level) + if sLog.AllowOnConsole { logger.SetOutput(os.Stdout) logger.WithFields(logData).Println(message) @@ -35,9 +37,9 @@ func (sLog *SchedWindowLogger) Log(logType int, level log.Level, logData log.Fie func (sLog *SchedWindowLogger) SetLogFile(prefix string) { - schedWindowLogPrefix := prefix + config.SchedWindowConfig.FilenameExtension + schedWindowLogPrefix := strings.Join([]string{prefix, config.SchedWindowConfig.FilenameExtension}, "") if logDir != "" { - schedWindowLogPrefix = logDir + "/" + schedWindowLogPrefix + schedWindowLogPrefix = strings.Join([]string{logDir, schedWindowLogPrefix}, "/") } if logFile, err := os.Create(schedWindowLogPrefix); err != nil { log.Fatal("Unable to create logFile: ", err) diff --git a/elektronLogging/types/types.go b/elektronLogging/types/types.go index 0dd7fec..db6b624 100644 --- a/elektronLogging/types/types.go +++ b/elektronLogging/types/types.go @@ -1,14 +1,14 @@ package elektronLogging const ( - ERROR = iota - WARNING = iota - GENERAL = iota - SUCCESS = iota - CONSOLE = iota - PCP = iota - SCHED_TRACE = iota - SPS = iota - SCHED_WINDOW = iota - CLSFN_TASKDIST_OVERHEAD = iota + ERROR = iota + WARNING + GENERAL + SUCCESS + CONSOLE + PCP + SCHED_TRACE + SPS + SCHED_WINDOW + CLSFN_TASKDIST_OVERHEAD ) diff --git a/scheduler.go b/scheduler.go index 63cd2f1..d6c28a2 100644 --- a/scheduler.go +++ b/scheduler.go @@ -21,10 +21,6 @@ package main // import github.com/spdfg/elektron import ( "flag" "fmt" - "os" - "os/signal" - "time" - "github.com/golang/protobuf/proto" mesos "github.com/mesos/mesos-go/api/v0/mesosproto" sched "github.com/mesos/mesos-go/api/v0/scheduler" @@ -35,6 +31,10 @@ import ( "github.com/spdfg/elektron/pcp" "github.com/spdfg/elektron/powerCap" "github.com/spdfg/elektron/schedulers" + "os" + "os/signal" + "strings" + "time" ) var master = flag.String("master", "", "Location of leading Mesos master -- :") @@ -116,11 +116,6 @@ func main() { pcpLog := make(chan struct{}) recordPCP := false - // Logging channels. - // These channels are used by the framework to log messages. - // The channels are used to send the type of log message and the message string. - //schedOptions = append(schedOptions, schedulers.WithLoggingChannels(logMType, logMsg)) - // Shutdown indicator channels. // These channels are used to notify, // 1. scheduling is complete. @@ -225,9 +220,10 @@ func main() { } // Checking if prefix contains any special characters. - /*if strings.Contains(*pcplogPrefix, "/") { + if strings.Contains(*pcplogPrefix, "/") { log.Fatal("log file prefix should not contain '/'.") - }*/ + } + elektronLogging.BuildLogger(*pcplogPrefix) // Starting PCP logging. if noPowercap {