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.`)
|
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.`)
|
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(`InternalCommPassword`, `please replace this with e.g. a random GUID, etc.`)
|
||||||
CheckSingleConfigurationPresentsAndAddIfMissing(`CustomerDBHost`, `localhost:27017`)
|
CheckSingleConfigurationPresentsAndAddIfMissing(`CustomerDBHost`, `localhost:27017`)
|
||||||
CheckSingleConfigurationPresentsAndAddIfMissing(`CustomerDBDatabase`, `Ocean`)
|
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 (
|
import (
|
||||||
"github.com/SommerEngineering/Ocean/ICCC"
|
"github.com/SommerEngineering/Ocean/ICCC"
|
||||||
|
"github.com/SommerEngineering/Ocean/ICCC/SystemMessages"
|
||||||
"github.com/SommerEngineering/Ocean/Log"
|
"github.com/SommerEngineering/Ocean/Log"
|
||||||
LM "github.com/SommerEngineering/Ocean/Log/Meta"
|
LM "github.com/SommerEngineering/Ocean/Log/Meta"
|
||||||
)
|
)
|
||||||
|
|
||||||
func icccSystemStart(data map[string][]string) {
|
func icccSystemStart(data map[string][]string) {
|
||||||
_, _, obj := ICCC.Data2Message(&ICCCStartUpMessage{}, data)
|
_, _, obj := ICCC.Data2Message(&SystemMessages.ICCCStartUpMessage{}, data)
|
||||||
messageData := obj.(*ICCCStartUpMessage)
|
messageData := obj.(*SystemMessages.ICCCStartUpMessage)
|
||||||
Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `ICCC message: The server is now up and ready.`, messageData.IPAddressAndPort)
|
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
|
package WebServer
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/SommerEngineering/Ocean/ConfigurationDB"
|
||||||
"github.com/SommerEngineering/Ocean/Handlers"
|
"github.com/SommerEngineering/Ocean/Handlers"
|
||||||
"github.com/SommerEngineering/Ocean/Log"
|
"github.com/SommerEngineering/Ocean/Log"
|
||||||
LM "github.com/SommerEngineering/Ocean/Log/Meta"
|
LM "github.com/SommerEngineering/Ocean/Log/Meta"
|
||||||
"github.com/SommerEngineering/Ocean/Tools"
|
"github.com/SommerEngineering/Ocean/Tools"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -14,21 +18,48 @@ func init() {
|
|||||||
Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameSTARTUP, `Init the web server now.`)
|
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.`)
|
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 = &http.Server{}
|
||||||
serverPublic.Addr = serverPublicAddressPort
|
serverPublic.Addr = serverPublicAddressPort
|
||||||
serverPublic.Handler = Handlers.GetPublicMux()
|
serverPublic.Handler = Handlers.GetPublicMux()
|
||||||
|
serverPublic.SetKeepAlivesEnabled(true)
|
||||||
|
|
||||||
serverPublic.ReadTimeout = 10 * time.Second
|
serverPublic.ReadTimeout = 10 * time.Second
|
||||||
serverPublic.WriteTimeout = 10 * time.Second
|
serverPublic.WriteTimeout = 10 * time.Second
|
||||||
serverPublic.MaxHeaderBytes = 1024
|
serverPublic.MaxHeaderBytes = 1024
|
||||||
serverPublic.SetKeepAlivesEnabled(true)
|
|
||||||
|
|
||||||
|
if strings.ToLower(ConfigurationDB.Read(`AdminWebServerEnabled`)) == `true` {
|
||||||
serverAdmin = &http.Server{}
|
serverAdmin = &http.Server{}
|
||||||
serverAdmin.Addr = serverAdminAddressPort
|
serverAdmin.Addr = serverAdminAddressPort
|
||||||
serverAdmin.Handler = Handlers.GetAdminMux()
|
serverAdmin.Handler = Handlers.GetAdminMux()
|
||||||
serverAdmin.ReadTimeout = 10 * time.Second
|
|
||||||
serverAdmin.WriteTimeout = 10 * time.Second
|
|
||||||
serverAdmin.MaxHeaderBytes = 1024
|
|
||||||
serverAdmin.SetKeepAlivesEnabled(true)
|
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 (
|
import (
|
||||||
"github.com/SommerEngineering/Ocean/ICCC"
|
"github.com/SommerEngineering/Ocean/ICCC"
|
||||||
|
"github.com/SommerEngineering/Ocean/ICCC/SystemMessages"
|
||||||
"github.com/SommerEngineering/Ocean/Log"
|
"github.com/SommerEngineering/Ocean/Log"
|
||||||
LM "github.com/SommerEngineering/Ocean/Log/Meta"
|
LM "github.com/SommerEngineering/Ocean/Log/Meta"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Start() {
|
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()
|
go serverPublic.ListenAndServe()
|
||||||
}
|
}
|
||||||
|
|
||||||
if serverAdmin != nil {
|
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()
|
go serverAdmin.ListenAndServe()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user