Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f1ecde0b25 | ||
|
|
8a2932128e | ||
|
|
030f32147b | ||
|
|
40fd2d5dfb | ||
|
|
bfedc63eb6 | ||
|
|
6ab4732b85 | ||
|
|
cc68365977 | ||
|
|
72e2870684 | ||
|
|
a6f340b311 | ||
|
|
eb7bc9e0fd | ||
|
|
06e215cde8 | ||
|
|
8a8e453f18 | ||
|
|
01846f300a |
No files matched your search
+1
-1
@@ -42,6 +42,6 @@ channel=CHANNEL
|
|||||||
checksum=[the SHA512 checksum of the message]
|
checksum=[the SHA512 checksum of the message]
|
||||||
|
|
||||||
Constrains to the environment:
|
Constrains to the environment:
|
||||||
The web server cannot reorder the fields of the request or response. The order of fields at the data object (message) must correspond with the order of fields inside the HTTP message. Therefore, a reorder is not possible at the moment. Also, the three field names 'command', 'channel' and 'checksum' are reserved, thus, you cannot use these names.
|
The three field names 'command', 'channel' and 'checksum' are reserved, thus, you cannot use these names.
|
||||||
*/
|
*/
|
||||||
package ICCC
|
package ICCC
|
||||||
@@ -35,6 +35,7 @@ func ICCCGetHostsReceiver(data map[string][]string) (result map[string][]string)
|
|||||||
answerMessage := SystemMessages.ICCCGetHostsAnswer{}
|
answerMessage := SystemMessages.ICCCGetHostsAnswer{}
|
||||||
answerMessage.Hostnames = make([]string, countHosts, countHosts)
|
answerMessage.Hostnames = make([]string, countHosts, countHosts)
|
||||||
answerMessage.IPAddressesPorts = make([]string, countHosts, countHosts)
|
answerMessage.IPAddressesPorts = make([]string, countHosts, countHosts)
|
||||||
|
answerMessage.Kinds = make([]byte, countHosts, countHosts)
|
||||||
|
|
||||||
// Loop over all hosts which are currently available at the cache:
|
// Loop over all hosts which are currently available at the cache:
|
||||||
n := 0
|
n := 0
|
||||||
@@ -42,6 +43,7 @@ func ICCCGetHostsReceiver(data map[string][]string) (result map[string][]string)
|
|||||||
host := entry.Value.(Scheme.Host)
|
host := entry.Value.(Scheme.Host)
|
||||||
answerMessage.Hostnames[n] = host.Hostname
|
answerMessage.Hostnames[n] = host.Hostname
|
||||||
answerMessage.IPAddressesPorts[n] = host.IPAddressPort
|
answerMessage.IPAddressesPorts[n] = host.IPAddressPort
|
||||||
|
answerMessage.Kinds[n] = host.Kind
|
||||||
n++
|
n++
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ func ICCCGetListenersReceiver(data map[string][]string) (result map[string][]str
|
|||||||
answerMessage.Channels = make([]string, countListeners, countListeners)
|
answerMessage.Channels = make([]string, countListeners, countListeners)
|
||||||
answerMessage.Commands = make([]string, countListeners, countListeners)
|
answerMessage.Commands = make([]string, countListeners, countListeners)
|
||||||
answerMessage.IPAddressesPorts = make([]string, countListeners, countListeners)
|
answerMessage.IPAddressesPorts = make([]string, countListeners, countListeners)
|
||||||
|
answerMessage.Kinds = make([]byte, countListeners, countListeners)
|
||||||
|
|
||||||
// Loop over all hosts which are currently available at the cache:
|
// Loop over all hosts which are currently available at the cache:
|
||||||
n := 0
|
n := 0
|
||||||
@@ -44,6 +45,7 @@ func ICCCGetListenersReceiver(data map[string][]string) (result map[string][]str
|
|||||||
answerMessage.Channels[n] = listener.Channel
|
answerMessage.Channels[n] = listener.Channel
|
||||||
answerMessage.Commands[n] = listener.Command
|
answerMessage.Commands[n] = listener.Command
|
||||||
answerMessage.IPAddressesPorts[n] = listener.IPAddressPort
|
answerMessage.IPAddressesPorts[n] = listener.IPAddressPort
|
||||||
|
answerMessage.Kinds[n] = listener.Kind
|
||||||
n++
|
n++
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ func ICCCGetVersionReceiver(data map[string][]string) (result map[string][]strin
|
|||||||
|
|
||||||
// Prepare the answer:
|
// Prepare the answer:
|
||||||
answer := SystemMessages.ICCCGetVersionAnswer{}
|
answer := SystemMessages.ICCCGetVersionAnswer{}
|
||||||
answer.Kind = `Ocean`
|
answer.Kind = KindOCEAN
|
||||||
answer.Name = Tools.ThisHostname()
|
answer.Name = Tools.ThisHostname()
|
||||||
answer.Version = Version.GetVersion()
|
answer.Version = Version.GetVersion()
|
||||||
|
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ func ICCCListenerUpdateReceiver(data map[string][]string) (result map[string][]s
|
|||||||
updatedObject.Command = messageData.Command
|
updatedObject.Command = messageData.Command
|
||||||
updatedObject.IPAddressPort = messageData.IPAddressPort
|
updatedObject.IPAddressPort = messageData.IPAddressPort
|
||||||
updatedObject.IsActive = messageData.IsActiveNew
|
updatedObject.IsActive = messageData.IsActiveNew
|
||||||
|
updatedObject.Kind = messageData.Kind
|
||||||
|
|
||||||
// Update the entry:
|
// Update the entry:
|
||||||
if errUpdate := collectionListener.Update(selectionUpdate, updatedObject); errUpdate != nil {
|
if errUpdate := collectionListener.Update(selectionUpdate, updatedObject); errUpdate != nil {
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ func ICCCRegisterHostReceiver(data map[string][]string) (result map[string][]str
|
|||||||
Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `ICCC message: Register another host.`, fmt.Sprintf("hostname=%s", messageData.Hostname), fmt.Sprintf("ipAddressPort=%s", messageData.IPAddressPort))
|
Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `ICCC message: Register another host.`, fmt.Sprintf("hostname=%s", messageData.Hostname), fmt.Sprintf("ipAddressPort=%s", messageData.IPAddressPort))
|
||||||
|
|
||||||
// Execute the command:
|
// Execute the command:
|
||||||
registerHost2Database(messageData.Hostname, messageData.IPAddressPort)
|
registerHost2Database(messageData.Hostname, messageData.IPAddressPort, messageData.Kind)
|
||||||
|
|
||||||
// Update the caches:
|
// Update the caches:
|
||||||
InitCacheNow()
|
InitCacheNow()
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ func ICCCRegisterListenerReceiver(data map[string][]string) (result map[string][
|
|||||||
Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `ICCC message: Should register another listener.`, `channel=`+messageData.Channel, `command=`+messageData.Command, `IPAddressPort=`+messageData.IPAddressPort, fmt.Sprintf(`isActive=%v`, messageData.IsActive))
|
Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `ICCC message: Should register another listener.`, `channel=`+messageData.Channel, `command=`+messageData.Command, `IPAddressPort=`+messageData.IPAddressPort, fmt.Sprintf(`isActive=%v`, messageData.IsActive))
|
||||||
|
|
||||||
// Execute the command:
|
// Execute the command:
|
||||||
registerListener2Database(messageData.Channel, messageData.Command, messageData.IPAddressPort, messageData.IsActive)
|
registerListener2Database(messageData.Channel, messageData.Command, messageData.IPAddressPort, messageData.IsActive, messageData.Kind)
|
||||||
|
|
||||||
// Update the caches:
|
// Update the caches:
|
||||||
InitCacheNow()
|
InitCacheNow()
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ func initDB() {
|
|||||||
//
|
//
|
||||||
// Take care about the indexes for ICCCListener:
|
// Take care about the indexes for ICCCListener:
|
||||||
//
|
//
|
||||||
|
collectionListener.EnsureIndexKey(`Kind`)
|
||||||
collectionListener.EnsureIndexKey(`Command`)
|
collectionListener.EnsureIndexKey(`Command`)
|
||||||
collectionListener.EnsureIndexKey(`Command`, `IsActive`)
|
collectionListener.EnsureIndexKey(`Command`, `IsActive`)
|
||||||
|
|
||||||
@@ -52,6 +53,7 @@ func initDB() {
|
|||||||
//
|
//
|
||||||
// Index for hosts:
|
// Index for hosts:
|
||||||
//
|
//
|
||||||
|
collectionHosts.EnsureIndexKey(`Kind`)
|
||||||
collectionHosts.EnsureIndexKey(`Hostname`)
|
collectionHosts.EnsureIndexKey(`Hostname`)
|
||||||
collectionHosts.EnsureIndexKey(`IPAddressPort`)
|
collectionHosts.EnsureIndexKey(`IPAddressPort`)
|
||||||
|
|
||||||
|
|||||||
@@ -8,12 +8,13 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Function to register a server to the ICCC.
|
// Function to register a server to the ICCC.
|
||||||
func registerHost2Database(hostname, ipAddressPort string) {
|
func registerHost2Database(hostname, ipAddressPort string, kind byte) {
|
||||||
|
|
||||||
// Create the host entry:
|
// Create the host entry:
|
||||||
host := Scheme.Host{}
|
host := Scheme.Host{}
|
||||||
host.Hostname = hostname
|
host.Hostname = hostname
|
||||||
host.IPAddressPort = ipAddressPort
|
host.IPAddressPort = ipAddressPort
|
||||||
|
host.Kind = kind
|
||||||
|
|
||||||
// The query to find already existing entries:
|
// The query to find already existing entries:
|
||||||
selection := bson.D{{`Hostname`, host.Hostname}, {`IPAddressPort`, host.IPAddressPort}}
|
selection := bson.D{{`Hostname`, host.Hostname}, {`IPAddressPort`, host.IPAddressPort}}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// The internal function to register an listener to ICCC.
|
// The internal function to register an listener to ICCC.
|
||||||
func registerListener2Database(channel, command, ipAddressPort string, isActive bool) {
|
func registerListener2Database(channel, command, ipAddressPort string, isActive bool, kind byte) {
|
||||||
Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `Register this ICCC command in to the database.`, `channel=`+channel, `command=`+command, `IPAddressPort=`+ipAddressPort, fmt.Sprintf("isActive=%v", isActive))
|
Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `Register this ICCC command in to the database.`, `channel=`+channel, `command=`+command, `IPAddressPort=`+ipAddressPort, fmt.Sprintf("isActive=%v", isActive))
|
||||||
|
|
||||||
entry := Scheme.Listener{}
|
entry := Scheme.Listener{}
|
||||||
@@ -17,6 +17,7 @@ func registerListener2Database(channel, command, ipAddressPort string, isActive
|
|||||||
entry.Command = command
|
entry.Command = command
|
||||||
entry.IsActive = isActive
|
entry.IsActive = isActive
|
||||||
entry.IPAddressPort = ipAddressPort
|
entry.IPAddressPort = ipAddressPort
|
||||||
|
entry.Kind = kind
|
||||||
|
|
||||||
//
|
//
|
||||||
// Case: Exists?
|
// Case: Exists?
|
||||||
|
|||||||
@@ -8,5 +8,5 @@ func registerLocalListener2Database(channel, command string) {
|
|||||||
there would be no server which can execute the ICCC command.
|
there would be no server which can execute the ICCC command.
|
||||||
Therefore, every Ocean server registers the own listeners directly.
|
Therefore, every Ocean server registers the own listeners directly.
|
||||||
*/
|
*/
|
||||||
registerListener2Database(channel, command, correctAddressWithPort, true)
|
registerListener2Database(channel, command, correctAddressWithPort, true, KindOCEAN)
|
||||||
}
|
}
|
||||||
@@ -12,5 +12,5 @@ func registerThisHost2Database() {
|
|||||||
there would be no server which can execute the ICCC command.
|
there would be no server which can execute the ICCC command.
|
||||||
Therefore, every Ocean server registers the own host directly.
|
Therefore, every Ocean server registers the own host directly.
|
||||||
*/
|
*/
|
||||||
registerHost2Database(Tools.ThisHostname(), correctAddressWithPort)
|
registerHost2Database(Tools.ThisHostname(), correctAddressWithPort, KindOCEAN)
|
||||||
}
|
}
|
||||||
@@ -4,4 +4,5 @@ package Scheme
|
|||||||
type Host struct {
|
type Host struct {
|
||||||
Hostname string `bson:"Hostname"`
|
Hostname string `bson:"Hostname"`
|
||||||
IPAddressPort string `bson:"IPAddressPort"`
|
IPAddressPort string `bson:"IPAddressPort"`
|
||||||
|
Kind byte `bson:"Kind"`
|
||||||
}
|
}
|
||||||
@@ -6,4 +6,5 @@ type Listener struct {
|
|||||||
Command string `bson:"Command"`
|
Command string `bson:"Command"`
|
||||||
IsActive bool `bson:"IsActive"`
|
IsActive bool `bson:"IsActive"`
|
||||||
IPAddressPort string `bson:"IPAddressPort"`
|
IPAddressPort string `bson:"IPAddressPort"`
|
||||||
|
Kind byte `bson:"Kind"`
|
||||||
}
|
}
|
||||||
@@ -8,4 +8,5 @@ type ICCCGetHosts struct {
|
|||||||
type ICCCGetHostsAnswer struct {
|
type ICCCGetHostsAnswer struct {
|
||||||
Hostnames []string
|
Hostnames []string
|
||||||
IPAddressesPorts []string
|
IPAddressesPorts []string
|
||||||
|
Kinds []byte
|
||||||
}
|
}
|
||||||
@@ -9,4 +9,5 @@ type ICCCGetListenersAnswer struct {
|
|||||||
Channels []string
|
Channels []string
|
||||||
Commands []string
|
Commands []string
|
||||||
IPAddressesPorts []string
|
IPAddressesPorts []string
|
||||||
|
Kinds []byte
|
||||||
}
|
}
|
||||||
@@ -6,7 +6,7 @@ type ICCCGetVersion struct {
|
|||||||
|
|
||||||
// Answer to the version request
|
// Answer to the version request
|
||||||
type ICCCGetVersionAnswer struct {
|
type ICCCGetVersionAnswer struct {
|
||||||
Kind string // Ocean || Component
|
Kind byte // Ocean || Component
|
||||||
Name string // Ocean: Hostname; Components: Name
|
Name string // Ocean: Hostname; Components: Name
|
||||||
Version string // The current version
|
Version string // The current version
|
||||||
}
|
}
|
||||||
@@ -6,4 +6,5 @@ type ICCCListenerUpdate struct {
|
|||||||
Command string
|
Command string
|
||||||
IPAddressPort string
|
IPAddressPort string
|
||||||
IsActiveNew bool
|
IsActiveNew bool
|
||||||
|
Kind byte
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package SystemMessages
|
||||||
|
|
||||||
|
// The message to send logging events over ICCC.
|
||||||
|
type ICCCNewLogEvent struct {
|
||||||
|
Project string
|
||||||
|
UnixTimestampUTC int64
|
||||||
|
Sender string
|
||||||
|
Category string
|
||||||
|
Level string
|
||||||
|
Severity string
|
||||||
|
Impact string
|
||||||
|
MessageName string
|
||||||
|
MessageDescription string
|
||||||
|
Parameters []string
|
||||||
|
}
|
||||||
@@ -4,4 +4,5 @@ package SystemMessages
|
|||||||
type ICCCRegisterHost struct {
|
type ICCCRegisterHost struct {
|
||||||
Hostname string // The hostname for the end-point
|
Hostname string // The hostname for the end-point
|
||||||
IPAddressPort string // The IP address and port for the end-point
|
IPAddressPort string // The IP address and port for the end-point
|
||||||
|
Kind byte // Ocean || Component
|
||||||
}
|
}
|
||||||
@@ -6,4 +6,5 @@ type ICCCRegisterListener struct {
|
|||||||
Command string // The provided command
|
Command string // The provided command
|
||||||
IsActive bool // Is the command active?
|
IsActive bool // Is the command active?
|
||||||
IPAddressPort string // The IP address and port for the end-point
|
IPAddressPort string // The IP address and port for the end-point
|
||||||
|
Kind byte // Ocean || Component
|
||||||
}
|
}
|
||||||
@@ -15,6 +15,10 @@ const (
|
|||||||
ChannelSTARTUP string = `System::Startup` // A channel for system startup messages.
|
ChannelSTARTUP string = `System::Startup` // A channel for system startup messages.
|
||||||
ChannelICCC string = `System::ICCC` // A common ICCC channel.
|
ChannelICCC string = `System::ICCC` // A common ICCC channel.
|
||||||
ChannelPING string = `System::Ping` // A channel for pings.
|
ChannelPING string = `System::Ping` // A channel for pings.
|
||||||
|
ChannelLOGGING string = `System::Logging` // A channel for send log events to the logging system
|
||||||
|
KindOCEAN byte = 0x0
|
||||||
|
KindComponent byte = 0x1
|
||||||
|
KindALL byte = 0xFF
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Function to broadcast a message to all listeners.
|
// Function to broadcast a message to all listeners.
|
||||||
func WriteMessage2All(channel, command string, message interface{}, answerPrototype interface{}) (results []interface{}) {
|
func WriteMessage2All(channel, command string, kind byte, message interface{}, answerPrototype interface{}) (results []interface{}) {
|
||||||
cacheListenerDatabaseLock.RLock()
|
cacheListenerDatabaseLock.RLock()
|
||||||
defer cacheListenerDatabaseLock.RUnlock()
|
defer cacheListenerDatabaseLock.RUnlock()
|
||||||
|
|
||||||
@@ -21,9 +21,15 @@ func WriteMessage2All(channel, command string, message interface{}, answerProtot
|
|||||||
for entry := cacheListenerDatabase.Front(); entry != nil; entry = entry.Next() {
|
for entry := cacheListenerDatabase.Front(); entry != nil; entry = entry.Next() {
|
||||||
listener := entry.Value.(Scheme.Listener)
|
listener := entry.Value.(Scheme.Listener)
|
||||||
|
|
||||||
// If the channel and the command matches, deliver the message:
|
// If the channel, command and kind matches, deliver the message:
|
||||||
if listener.Channel == channel && listener.Command == command {
|
if kind == KindALL {
|
||||||
matchingListener = append(matchingListener, listener)
|
if listener.Channel == channel && listener.Command == command {
|
||||||
|
matchingListener = append(matchingListener, listener)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if listener.Channel == channel && listener.Command == command && listener.Kind == kind {
|
||||||
|
matchingListener = append(matchingListener, listener)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Function to write a message to any listener.
|
// Function to write a message to any listener.
|
||||||
func WriteMessage2Any(channel, command string, message interface{}, answerPrototype interface{}) (result interface{}) {
|
func WriteMessage2Any(channel, command string, kind byte, message interface{}, answerPrototype interface{}) (result interface{}) {
|
||||||
cacheListenerDatabaseLock.RLock()
|
cacheListenerDatabaseLock.RLock()
|
||||||
defer cacheListenerDatabaseLock.RUnlock()
|
defer cacheListenerDatabaseLock.RUnlock()
|
||||||
|
|
||||||
@@ -22,10 +22,17 @@ func WriteMessage2Any(channel, command string, message interface{}, answerProtot
|
|||||||
for entry := cacheListenerDatabase.Front(); entry != nil; entry = entry.Next() {
|
for entry := cacheListenerDatabase.Front(); entry != nil; entry = entry.Next() {
|
||||||
listener := entry.Value.(Scheme.Listener)
|
listener := entry.Value.(Scheme.Listener)
|
||||||
|
|
||||||
// If the channel and the command matches, store the listener:
|
// If the channel, command and kind matches, store the listener:
|
||||||
if listener.Channel == channel && listener.Command == command {
|
if kind == KindALL {
|
||||||
entries = entries[:len(entries)+1]
|
if listener.Channel == channel && listener.Command == command {
|
||||||
entries[counter] = listener
|
entries = entries[:len(entries)+1]
|
||||||
|
entries[counter] = listener
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if listener.Channel == channel && listener.Command == command && listener.Kind == kind {
|
||||||
|
entries = entries[:len(entries)+1]
|
||||||
|
entries[counter] = listener
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,55 @@
|
|||||||
|
package ICCCLog
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/SommerEngineering/Ocean/ICCC"
|
||||||
|
"github.com/SommerEngineering/Ocean/ICCC/SystemMessages"
|
||||||
|
"github.com/SommerEngineering/Ocean/Log"
|
||||||
|
LM "github.com/SommerEngineering/Ocean/Log/Meta"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// The receiver function for the ICCC new log event message.
|
||||||
|
func ICCCNewLogEventReceiver(data map[string][]string) (result map[string][]string) {
|
||||||
|
|
||||||
|
// Recover from errors:
|
||||||
|
defer func() {
|
||||||
|
if err := recover(); err != nil {
|
||||||
|
Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelERROR, LM.SeverityUnknown, LM.ImpactUnknown, LM.MessageNamePARSE, "Was not able to execute the ICCC new log event message.")
|
||||||
|
result = make(map[string][]string, 0)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
// Converts the HTTP form data into an object:
|
||||||
|
_, _, obj := ICCC.Data2Message(SystemMessages.ICCCNewLogEvent{}, data)
|
||||||
|
|
||||||
|
// Was it possible to convert the data?
|
||||||
|
if obj != nil {
|
||||||
|
// Cast the object to the right type:
|
||||||
|
messageData := obj.(SystemMessages.ICCCNewLogEvent)
|
||||||
|
|
||||||
|
// Provide a log entry:
|
||||||
|
logEntry := LM.Entry{}
|
||||||
|
logEntry.Sender = LM.Sender(messageData.Sender)
|
||||||
|
logEntry.Category = LM.ParseCategory(messageData.Category)
|
||||||
|
logEntry.Level = LM.ParseLevel(messageData.Level)
|
||||||
|
logEntry.Severity = LM.ParseSeverity(messageData.Severity)
|
||||||
|
logEntry.Impact = LM.ParseImpact(messageData.Impact)
|
||||||
|
logEntry.MessageName = LM.MessageName(messageData.MessageName)
|
||||||
|
logEntry.MessageDescription = messageData.MessageDescription
|
||||||
|
logEntry.Parameters = messageData.Parameters
|
||||||
|
logEntry.Time = time.Unix(messageData.UnixTimestampUTC, 0).UTC()
|
||||||
|
|
||||||
|
// Deliver the log event:
|
||||||
|
Log.TakeEntry(logEntry)
|
||||||
|
|
||||||
|
// An answer is necessary:
|
||||||
|
return ICCC.Message2Data("", "", SystemMessages.AnswerACK)
|
||||||
|
} else {
|
||||||
|
Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `ICCC message: Was not able to create the message.`)
|
||||||
|
}
|
||||||
|
|
||||||
|
// In any other error case:
|
||||||
|
result = make(map[string][]string, 0)
|
||||||
|
return
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package ICCCLog
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/SommerEngineering/Ocean/Log/Meta"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
senderName Meta.Sender = `System::Log::ICCCLog`
|
||||||
|
)
|
||||||
@@ -6,6 +6,7 @@ import (
|
|||||||
"github.com/SommerEngineering/Ocean/CustomerDB"
|
"github.com/SommerEngineering/Ocean/CustomerDB"
|
||||||
"github.com/SommerEngineering/Ocean/ICCC"
|
"github.com/SommerEngineering/Ocean/ICCC"
|
||||||
"github.com/SommerEngineering/Ocean/Log"
|
"github.com/SommerEngineering/Ocean/Log"
|
||||||
|
"github.com/SommerEngineering/Ocean/Log/ICCCLog"
|
||||||
LM "github.com/SommerEngineering/Ocean/Log/Meta"
|
LM "github.com/SommerEngineering/Ocean/Log/Meta"
|
||||||
"github.com/SommerEngineering/Ocean/NumGen"
|
"github.com/SommerEngineering/Ocean/NumGen"
|
||||||
"github.com/SommerEngineering/Ocean/Shutdown"
|
"github.com/SommerEngineering/Ocean/Shutdown"
|
||||||
@@ -109,6 +110,7 @@ func initSystem() {
|
|||||||
ICCC.Registrar(ICCC.ChannelICCC, `ICCC::GetHosts`, ICCC.ICCCGetHostsReceiver)
|
ICCC.Registrar(ICCC.ChannelICCC, `ICCC::GetHosts`, ICCC.ICCCGetHostsReceiver)
|
||||||
ICCC.Registrar(ICCC.ChannelICCC, `ICCC::GetListeners`, ICCC.ICCCGetListenersReceiver)
|
ICCC.Registrar(ICCC.ChannelICCC, `ICCC::GetListeners`, ICCC.ICCCGetListenersReceiver)
|
||||||
ICCC.Registrar(ICCC.ChannelNUMGEN, `NumGen::Next`, NumGen.ICCCNextNumberReceiver)
|
ICCC.Registrar(ICCC.ChannelNUMGEN, `NumGen::Next`, NumGen.ICCCNextNumberReceiver)
|
||||||
|
ICCC.Registrar(ICCC.ChannelLOGGING, `Logging::NewLogEvent`, ICCCLog.ICCCNewLogEventReceiver)
|
||||||
|
|
||||||
// Start the ICCC Listener Cache:
|
// Start the ICCC Listener Cache:
|
||||||
ICCC.InitCacheNow() // Blocking, until the job is done
|
ICCC.InitCacheNow() // Blocking, until the job is done
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
package Version
|
package Version
|
||||||
|
|
||||||
var (
|
var (
|
||||||
oceansVersion string = `2.0.0` // Ocean's current version
|
oceansVersion string = `2.0.3` // Ocean's current version
|
||||||
)
|
)
|
||||||
+1
-1
@@ -30,7 +30,7 @@ func Start() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Notify the whole cluster, that this server is now up and ready:
|
// Notify the whole cluster, that this server is now up and ready:
|
||||||
answers := ICCC.WriteMessage2All(ICCC.ChannelSTARTUP, `System::OceanStart`, data, SystemMessages.ICCCDefaultAnswer{})
|
answers := ICCC.WriteMessage2All(ICCC.ChannelSTARTUP, `System::OceanStart`, ICCC.KindALL, data, SystemMessages.ICCCDefaultAnswer{})
|
||||||
for n, obj := range answers {
|
for n, obj := range answers {
|
||||||
if obj != nil {
|
if obj != nil {
|
||||||
answer := obj.(SystemMessages.ICCCDefaultAnswer)
|
answer := obj.(SystemMessages.ICCCDefaultAnswer)
|
||||||
|
|||||||
Reference in new issue
Block a user