53 lines
1.4 KiB
Go
53 lines
1.4 KiB
Go
package Log
|
|
|
|
import (
|
|
"github.com/SommerEngineering/Ocean/Log/Meta"
|
|
"time"
|
|
)
|
|
|
|
/*
|
|
The scheduler function which runs at a own thread.
|
|
Pleae note: The scheduler is the consumer for the logging channel.
|
|
*/
|
|
func scheduler(logBuffer chan Meta.Entry) {
|
|
|
|
LogShort(senderName, Meta.CategorySYSTEM, Meta.LevelINFO, Meta.MessageNameSTARTUP, `The scheduler runs now.`)
|
|
var stopNextTime = false
|
|
|
|
// Endless loop:
|
|
for {
|
|
|
|
// Enable the loop to stop:
|
|
if stopNextTime {
|
|
break
|
|
}
|
|
|
|
// Read one entry from the buffer (channel):
|
|
nextEntry, ok := <-logBuffer
|
|
|
|
// Case: The channel was closed.
|
|
if !ok {
|
|
|
|
// Create a log message for this event.
|
|
stopNextTime = true
|
|
nextEntry = Meta.Entry{}
|
|
nextEntry.Project = projectName
|
|
nextEntry.Time = time.Now().UTC()
|
|
nextEntry.Sender = senderName
|
|
nextEntry.Category = Meta.CategorySYSTEM
|
|
nextEntry.Level = Meta.LevelWARN
|
|
nextEntry.Severity = Meta.SeverityCritical
|
|
nextEntry.Impact = Meta.ImpactNone
|
|
nextEntry.MessageName = Meta.MessageNameCOMMUNICATION
|
|
nextEntry.MessageDescription = `The logging channel was closed!`
|
|
}
|
|
|
|
// Queue the log event for the delivery to the devices:
|
|
deviceDelay(nextEntry)
|
|
}
|
|
|
|
// Exit the scheduler. Send the signal.
|
|
LogFull(senderName, Meta.CategorySYSTEM, Meta.LevelWARN, Meta.SeverityCritical, Meta.ImpactNone, Meta.MessageNameSHUTDOWN, `The scheduler is down now.`)
|
|
schedulerExitSignal <- true
|
|
}
|