85 lines
1.7 KiB
Go
85 lines
1.7 KiB
Go
|
package environment
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"strings"
|
||
|
"sync"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
type configurationSettings struct {
|
||
|
Mounts []Mount
|
||
|
Allocations Allocations
|
||
|
Limits Limits
|
||
|
Variables Variables
|
||
|
}
|
||
|
|
||
|
// Defines the actual configuration struct for the environment with all of the settings
|
||
|
// defined within it.
|
||
|
type Configuration struct {
|
||
|
mu sync.RWMutex
|
||
|
|
||
|
settings configurationSettings
|
||
|
}
|
||
|
|
||
|
func NewConfiguration(m []Mount, a Allocations, l Limits, v Variables) *Configuration {
|
||
|
return &Configuration{
|
||
|
settings: configurationSettings{
|
||
|
Mounts: m,
|
||
|
Allocations: a,
|
||
|
Limits: l,
|
||
|
Variables: v,
|
||
|
},
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (c *Configuration) Limits() Limits {
|
||
|
c.mu.RLock()
|
||
|
defer c.mu.RUnlock()
|
||
|
|
||
|
return c.settings.Limits
|
||
|
}
|
||
|
|
||
|
func (c *Configuration) Allocations() Allocations {
|
||
|
c.mu.RLock()
|
||
|
defer c.mu.RUnlock()
|
||
|
|
||
|
return c.settings.Allocations
|
||
|
}
|
||
|
|
||
|
func (c *Configuration) Mounts() []Mount {
|
||
|
c.mu.RLock()
|
||
|
defer c.mu.RUnlock()
|
||
|
|
||
|
return c.settings.Mounts
|
||
|
}
|
||
|
|
||
|
// Returns all of the environment variables that should be assigned to a running
|
||
|
// server instance.
|
||
|
func (c *Configuration) EnvironmentVariables() []string {
|
||
|
c.mu.RLock()
|
||
|
c.mu.RUnlock()
|
||
|
|
||
|
zone, _ := time.Now().In(time.Local).Zone()
|
||
|
|
||
|
var out = []string{
|
||
|
fmt.Sprintf("TZ=%s", zone),
|
||
|
fmt.Sprintf("SERVER_MEMORY=%d", c.settings.Limits.MemoryLimit),
|
||
|
fmt.Sprintf("SERVER_IP=%s", c.settings.Allocations.DefaultMapping.Ip),
|
||
|
fmt.Sprintf("SERVER_PORT=%d", c.settings.Allocations.DefaultMapping.Port),
|
||
|
}
|
||
|
|
||
|
eloop:
|
||
|
for k := range c.settings.Variables {
|
||
|
for _, e := range out {
|
||
|
if strings.HasPrefix(e, strings.ToUpper(k)) {
|
||
|
continue eloop
|
||
|
}
|
||
|
}
|
||
|
|
||
|
out = append(out, fmt.Sprintf("%s=%s", strings.ToUpper(k), c.settings.Variables.Get(k)))
|
||
|
}
|
||
|
|
||
|
return out
|
||
|
}
|