74 lines
1.8 KiB
Go
74 lines
1.8 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"os"
|
||
|
"os/signal"
|
||
|
"syscall"
|
||
|
|
||
|
configViper "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/internal/common/config"
|
||
|
"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
|
||
|
"github.com/spf13/viper"
|
||
|
"go.uber.org/zap"
|
||
|
)
|
||
|
|
||
|
func newConfig() (*viper.Viper, error) {
|
||
|
var err error
|
||
|
var dv = viper.New()
|
||
|
|
||
|
defaultConfiguration(dv)
|
||
|
|
||
|
_, err = configViper.CreateViper(configViper.WithConfigFile(*configFile),
|
||
|
configViper.WithConfigDir(*configDir), configViper.WithEnvPrefix(EnvPrefix),
|
||
|
configViper.WithViper(dv))
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return dv, err
|
||
|
}
|
||
|
|
||
|
func reloadConfig() error {
|
||
|
err := configViper.ReloadViper(configViper.WithConfigFile(*configFile),
|
||
|
configViper.WithConfigDir(*configDir), configViper.WithEnvPrefix(EnvPrefix),
|
||
|
configViper.WithViper(cfg))
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
err = logPrm.SetLevelString(cfg.GetString("logger.level"))
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
return logPrm.Reload()
|
||
|
}
|
||
|
|
||
|
func watchForSignal(cancel func()) {
|
||
|
ch := make(chan os.Signal, 1)
|
||
|
signal.Notify(ch, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM)
|
||
|
|
||
|
for {
|
||
|
select {
|
||
|
case err := <-intErr:
|
||
|
log.Info(logs.FrostFSIRInternalError, zap.String("msg", err.Error()))
|
||
|
cancel()
|
||
|
shutdown()
|
||
|
return
|
||
|
case sig := <-ch:
|
||
|
switch sig {
|
||
|
case syscall.SIGHUP:
|
||
|
log.Info(logs.FrostFSNodeSIGHUPHasBeenReceivedRereadingConfiguration)
|
||
|
err := reloadConfig()
|
||
|
if err != nil {
|
||
|
log.Error(logs.FrostFSNodeConfigurationReading, zap.Error(err))
|
||
|
}
|
||
|
log.Info(logs.FrostFSNodeConfigurationHasBeenReloadedSuccessfully)
|
||
|
case syscall.SIGTERM, syscall.SIGINT:
|
||
|
log.Info(logs.FrostFSNodeTerminationSignalHasBeenReceivedStopping)
|
||
|
cancel()
|
||
|
shutdown()
|
||
|
log.Info(logs.FrostFSNodeTerminationSignalProcessingIsComplete)
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|