diff --git a/config.example.json b/config.example.json index 025ff7a..7fa2aa1 100644 --- a/config.example.json +++ b/config.example.json @@ -2,5 +2,7 @@ "plugin_directory": "plugins", "config_directory": "config", - "default_store": "Flatfile-JSON" + "default_store": "Flatfile-JSON", + + "graceful_shutdown_timeout": 30 } \ No newline at end of file diff --git a/config/config.go b/config/config.go index 836d108..6934a01 100644 --- a/config/config.go +++ b/config/config.go @@ -3,12 +3,13 @@ package config import ( "encoding/json" "fmt" - "github.com/StratoAPI/Core/registry" + "github.com/StratoAPI/Interface/plugins" "io/ioutil" "os" ) var config Config +var pluginConfigs = make(map[string]*plugins.Config) func InitializeConfig() { configFile, err := os.Open("config.json") @@ -30,10 +31,12 @@ func InitializeConfig() { fmt.Println("Configs initialized") } -func InitializePluginConfigs() { - configs := registry.GetRegistryInternal().GetConfigs() +func PushPluginConfigs(configs map[string]*plugins.Config) { + pluginConfigs = configs +} - for name, conf := range configs { +func InitializePluginConfigs() { + for name, conf := range pluginConfigs { configFile := config.ConfigDirectory + "/" + name + ".json" structure := (*conf).CreateStructure() if _, err := os.Stat(configFile); os.IsNotExist(err) { diff --git a/config/types.go b/config/types.go index ea299f9..c7f796b 100644 --- a/config/types.go +++ b/config/types.go @@ -5,4 +5,6 @@ type Config struct { ConfigDirectory string `json:"config_directory"` DefaultStore string `json:"default_store"` + + GracefulShutdownTimeout int `json:"graceful_shutdown_timeout"` } diff --git a/registry/manager.go b/registry/manager.go index fc8f5a4..26bc5a3 100644 --- a/registry/manager.go +++ b/registry/manager.go @@ -6,6 +6,8 @@ import ( "os/signal" "sync" "time" + + "github.com/StratoAPI/Core/config" ) var storageWaitGroup sync.WaitGroup @@ -94,7 +96,7 @@ func InitializeFilters() { } func StartFilters() { - filtersWaitGroup.Add(len(coreRegistry.facades)) + filtersWaitGroup.Add(len(coreRegistry.filters)) for _, filter := range coreRegistry.filters { go func() { @@ -178,9 +180,10 @@ func WaitForGoroutines() { StopMiddlewares() }() + timeout := config.Get().GracefulShutdownTimeout + select { - // TODO Make time configurable - case <-time.After(30 * time.Second): + case <-time.After(time.Duration(timeout) * time.Second): panic("Graceful shutdown failed!") case <-done: fmt.Println("Server shut down") diff --git a/registry/registry.go b/registry/registry.go index 71e6775..3c33a37 100644 --- a/registry/registry.go +++ b/registry/registry.go @@ -5,6 +5,8 @@ import ( "io/ioutil" "plugin" + "github.com/StratoAPI/Core/config" + "github.com/StratoAPI/Interface/plugins" ) @@ -76,6 +78,7 @@ func InitializePlugins(pluginDirectory string) { for _, v := range loadedPlugins { pluginNames = append(pluginNames, v.Name()) } + config.PushPluginConfigs(coreRegistry.configs) for k := range coreRegistry.facades { facadeNames = append(facadeNames, k)