Admin Interface & Handlers
* Is not done yet + Add configuration for the admin web server + Refactor the ICCC messages to an own namespace + Added a main to Ocean. It can be used by just ICCC! + Added proper logging for the servers' start up
This commit is contained in:
parent
c1e8ca4b07
commit
96bcb5da8f
@ -10,6 +10,11 @@ func checkConfiguration() {
|
||||
Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameDATABASE, `Check now the configuration database.`)
|
||||
defer Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameDATABASE, `Done checking the configuration database.`)
|
||||
|
||||
CheckSingleConfigurationPresentsAndAddIfMissing(`AdminWebServerBinding`, `127.0.0.1:60000`)
|
||||
CheckSingleConfigurationPresentsAndAddIfMissing(`AdminWebServerEnabled`, `True`)
|
||||
CheckSingleConfigurationPresentsAndAddIfMissing(`AdminWebServerReadTimeoutSeconds`, `10`)
|
||||
CheckSingleConfigurationPresentsAndAddIfMissing(`AdminWebServerWriteTimeoutSeconds`, `10`)
|
||||
CheckSingleConfigurationPresentsAndAddIfMissing(`AdminWebServerMaxHeaderLenBytes`, `1048576`)
|
||||
CheckSingleConfigurationPresentsAndAddIfMissing(`InternalCommPassword`, `please replace this with e.g. a random GUID, etc.`)
|
||||
CheckSingleConfigurationPresentsAndAddIfMissing(`CustomerDBHost`, `localhost:27017`)
|
||||
CheckSingleConfigurationPresentsAndAddIfMissing(`CustomerDBDatabase`, `Ocean`)
|
||||
|
6
ICCC/SystemMessages/ICCCStartup.go
Normal file
6
ICCC/SystemMessages/ICCCStartup.go
Normal file
@ -0,0 +1,6 @@
|
||||
package SystemMessages
|
||||
|
||||
type ICCCStartUpMessage struct {
|
||||
PublicIPAddressAndPort string
|
||||
AdminIPAddressAndPort string
|
||||
}
|
14
Main.go
Normal file
14
Main.go
Normal file
@ -0,0 +1,14 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/SommerEngineering/Ocean/Log"
|
||||
LM "github.com/SommerEngineering/Ocean/Log/Meta"
|
||||
"github.com/SommerEngineering/Ocean/System"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
||||
Log.LogShort(senderName, LM.CategoryAPP, LM.LevelINFO, LM.MessageNameSTARTUP, `VRStudiePT is starting.`)
|
||||
System.InitHandlers()
|
||||
System.StartAndBlockForever()
|
||||
}
|
@ -2,12 +2,13 @@ package System
|
||||
|
||||
import (
|
||||
"github.com/SommerEngineering/Ocean/ICCC"
|
||||
"github.com/SommerEngineering/Ocean/ICCC/SystemMessages"
|
||||
"github.com/SommerEngineering/Ocean/Log"
|
||||
LM "github.com/SommerEngineering/Ocean/Log/Meta"
|
||||
)
|
||||
|
||||
func icccSystemStart(data map[string][]string) {
|
||||
_, _, obj := ICCC.Data2Message(&ICCCStartUpMessage{}, data)
|
||||
messageData := obj.(*ICCCStartUpMessage)
|
||||
Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `ICCC message: The server is now up and ready.`, messageData.IPAddressAndPort)
|
||||
_, _, obj := ICCC.Data2Message(&SystemMessages.ICCCStartUpMessage{}, data)
|
||||
messageData := obj.(*SystemMessages.ICCCStartUpMessage)
|
||||
Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `ICCC message: The server is now up and ready.`, messageData.PublicIPAddressAndPort, messageData.AdminIPAddressAndPort)
|
||||
}
|
||||
|
9
Variables.go
Normal file
9
Variables.go
Normal file
@ -0,0 +1,9 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
LM "github.com/SommerEngineering/Ocean/Log/Meta"
|
||||
)
|
||||
|
||||
var (
|
||||
senderName LM.Sender = `Ocean`
|
||||
)
|
@ -1,5 +0,0 @@
|
||||
package WebServer
|
||||
|
||||
type ICCCStartUpMessage struct {
|
||||
IPAddressAndPort string
|
||||
}
|
@ -1,11 +1,15 @@
|
||||
package WebServer
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/SommerEngineering/Ocean/ConfigurationDB"
|
||||
"github.com/SommerEngineering/Ocean/Handlers"
|
||||
"github.com/SommerEngineering/Ocean/Log"
|
||||
LM "github.com/SommerEngineering/Ocean/Log/Meta"
|
||||
"github.com/SommerEngineering/Ocean/Tools"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
@ -14,21 +18,48 @@ func init() {
|
||||
Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `Init the web server now.`)
|
||||
defer Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `Done init the web server.`)
|
||||
|
||||
serverPublicAddressPort := Tools.LocalIPAddressAndPort()
|
||||
serverPublicAddressPort = Tools.LocalIPAddressAndPort()
|
||||
serverAdminAddressPort = ConfigurationDB.Read(`AdminWebServerBinding`)
|
||||
|
||||
serverPublic = &http.Server{}
|
||||
serverPublic.Addr = serverPublicAddressPort
|
||||
serverPublic.Handler = Handlers.GetPublicMux()
|
||||
serverPublic.SetKeepAlivesEnabled(true)
|
||||
|
||||
serverPublic.ReadTimeout = 10 * time.Second
|
||||
serverPublic.WriteTimeout = 10 * time.Second
|
||||
serverPublic.MaxHeaderBytes = 1024
|
||||
serverPublic.SetKeepAlivesEnabled(true)
|
||||
|
||||
if strings.ToLower(ConfigurationDB.Read(`AdminWebServerEnabled`)) == `true` {
|
||||
serverAdmin = &http.Server{}
|
||||
serverAdmin.Addr = serverAdminAddressPort
|
||||
serverAdmin.Handler = Handlers.GetAdminMux()
|
||||
serverAdmin.ReadTimeout = 10 * time.Second
|
||||
serverAdmin.WriteTimeout = 10 * time.Second
|
||||
serverAdmin.MaxHeaderBytes = 1024
|
||||
serverAdmin.SetKeepAlivesEnabled(true)
|
||||
|
||||
if readTimeoutSeconds, errTimeout := strconv.Atoi(ConfigurationDB.Read(`AdminWebServerReadTimeoutSeconds`)); errTimeout != nil {
|
||||
Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelWARN, LM.SeverityLow, LM.ImpactLow, LM.MessageNameCONFIGURATION, `Was not able to read the admin server's read timeout value. Use the default of 10 seconds instead.`, errTimeout.Error())
|
||||
serverAdmin.ReadTimeout = 10 * time.Second
|
||||
} else {
|
||||
Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameCONFIGURATION, fmt.Sprintf("The admin web server's read timeout was set to %d seconds.", readTimeoutSeconds))
|
||||
serverAdmin.ReadTimeout = time.Duration(readTimeoutSeconds) * time.Second
|
||||
}
|
||||
|
||||
if writeTimeoutSeconds, errTimeout := strconv.Atoi(ConfigurationDB.Read(`AdminWebServerWriteTimeoutSeconds`)); errTimeout != nil {
|
||||
Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelWARN, LM.SeverityLow, LM.ImpactLow, LM.MessageNameCONFIGURATION, `Was not able to read the admin server's write timeout value. Use the default of 10 seconds instead.`, errTimeout.Error())
|
||||
serverAdmin.WriteTimeout = 10 * time.Second
|
||||
} else {
|
||||
Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameCONFIGURATION, fmt.Sprintf("The admin web server's write timeout was set to %d seconds.", writeTimeoutSeconds))
|
||||
serverAdmin.WriteTimeout = time.Duration(writeTimeoutSeconds) * time.Second
|
||||
}
|
||||
|
||||
if maxHeaderBytes, errHeaderBytes := strconv.Atoi(ConfigurationDB.Read(`AdminWebServerMaxHeaderLenBytes`)); errHeaderBytes != nil {
|
||||
Log.LogFull(senderName, LM.CategorySYSTEM, LM.LevelWARN, LM.SeverityLow, LM.ImpactLow, LM.MessageNameCONFIGURATION, `Was not able to read the admin server's maximum count of bytes for the headers. Use the default of 1048576 bytes instead.`, errHeaderBytes.Error())
|
||||
serverAdmin.MaxHeaderBytes = 1048576
|
||||
} else {
|
||||
Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameCONFIGURATION, fmt.Sprintf("The admin web server's count of maximal bytes for the headers was set to %d bytes.", maxHeaderBytes))
|
||||
serverAdmin.MaxHeaderBytes = maxHeaderBytes
|
||||
}
|
||||
} else {
|
||||
Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `The admin web server is disabled.`)
|
||||
}
|
||||
}
|
||||
|
@ -2,22 +2,26 @@ package WebServer
|
||||
|
||||
import (
|
||||
"github.com/SommerEngineering/Ocean/ICCC"
|
||||
"github.com/SommerEngineering/Ocean/ICCC/SystemMessages"
|
||||
"github.com/SommerEngineering/Ocean/Log"
|
||||
LM "github.com/SommerEngineering/Ocean/Log/Meta"
|
||||
)
|
||||
|
||||
func Start() {
|
||||
if serverPublic != nil {
|
||||
// Tell the whole cluster, that we are up and ready:
|
||||
data := ICCCStartUpMessage{}
|
||||
data.IPAddressAndPort = serverPublicAddressPort
|
||||
ICCC.WriteMessage2All(ICCC.ChannelSYSTEM, `System::Start`, data)
|
||||
|
||||
Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `Web server is now listening.`, `Configuration for hostname and port.`, serverPublicAddressPort)
|
||||
// Tell the whole cluster, that we are up and ready:
|
||||
data := SystemMessages.ICCCStartUpMessage{}
|
||||
defer ICCC.WriteMessage2All(ICCC.ChannelSYSTEM, `System::Start`, data)
|
||||
|
||||
if serverPublic != nil {
|
||||
data.PublicIPAddressAndPort = serverPublicAddressPort
|
||||
Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `Public web server is now listening.`, `Configuration for hostname and port.`, serverPublicAddressPort)
|
||||
go serverPublic.ListenAndServe()
|
||||
}
|
||||
|
||||
if serverAdmin != nil {
|
||||
data.AdminIPAddressAndPort = serverAdminAddressPort
|
||||
Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `Admin web server is now listening.`, `Configuration for hostname and port.`, serverAdminAddressPort)
|
||||
go serverAdmin.ListenAndServe()
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user