summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorValery Piashchynski <[email protected]>2023-08-14 17:05:11 +0200
committerValery Piashchynski <[email protected]>2023-08-14 17:05:11 +0200
commit00d24df903004641c739f83e755cf1800c3c81a4 (patch)
tree9643c1f9ceda50363b86e40b2aa2282e2f7de5a2
parent0a48c5557e6bfeada5fc143b138cd1b8ee6374d1 (diff)
chore: watchgod, configuration update
Signed-off-by: Valery Piashchynski <[email protected]>
-rw-r--r--container/config.go15
-rw-r--r--internal/cli/serve/command.go8
-rw-r--r--internal/sdnotify/sdnotify.go17
3 files changed, 31 insertions, 9 deletions
diff --git a/container/config.go b/container/config.go
index 9364ecf8..fbb34194 100644
--- a/container/config.go
+++ b/container/config.go
@@ -10,10 +10,10 @@ import (
// Config defines endure container configuration.
type Config struct {
- GracePeriod time.Duration `mapstructure:"grace_period"`
- LogLevel string `mapstructure:"log_level"`
- EnableWatchdog bool `mapstructure:"enable_watchdog"`
- PrintGraph bool `mapstructure:"print_graph"`
+ GracePeriod time.Duration `mapstructure:"grace_period"`
+ LogLevel string `mapstructure:"log_level"`
+ WatchdogSec int `mapstructure:"watchdog_sec"`
+ PrintGraph bool `mapstructure:"print_graph"`
}
const (
@@ -34,10 +34,9 @@ func NewConfig(cfgFile string) (*Config, error) {
}
cfg := &Config{
- GracePeriod: defaultGracePeriod,
- LogLevel: "error",
- PrintGraph: false,
- EnableWatchdog: false,
+ GracePeriod: defaultGracePeriod,
+ LogLevel: "error",
+ PrintGraph: false,
}
if !v.IsSet(endureKey) {
diff --git a/internal/cli/serve/command.go b/internal/cli/serve/command.go
index 21454933..a4caa265 100644
--- a/internal/cli/serve/command.go
+++ b/internal/cli/serve/command.go
@@ -114,9 +114,15 @@ func NewCommand(override *[]string, cfgFile *string, silent *bool) *cobra.Comman
if !*silent {
if notified {
fmt.Println("[INFO] sdnotify: notified")
+ stopCh := make(chan struct{}, 1)
+ if containerCfg.WatchdogSec > 0 {
+ fmt.Printf("[INFO] sdnotify: watchdog enabled, timeout: %d seconds\n", containerCfg.WatchdogSec)
+ sdnotify.StartWatchdog(containerCfg.WatchdogSec, stopCh)
+ }
+
// if notified -> notify about stop
defer func() {
- _, _ = sdnotify.SdNotify(sdnotify.Stopping)
+ stopCh <- struct{}{}
}()
} else {
fmt.Println("[INFO] sdnotify: not notified")
diff --git a/internal/sdnotify/sdnotify.go b/internal/sdnotify/sdnotify.go
index aed38c92..d88c0e88 100644
--- a/internal/sdnotify/sdnotify.go
+++ b/internal/sdnotify/sdnotify.go
@@ -25,6 +25,7 @@ package sdnotify
import (
"net"
"os"
+ "time"
)
type State string
@@ -84,3 +85,19 @@ func SdNotify(state State) (bool, error) {
return true, nil
}
+
+func StartWatchdog(interval int, stopCh chan struct{}) {
+ go func() {
+ ticker := time.NewTicker(time.Duration(interval) * time.Second)
+ defer ticker.Stop()
+
+ for {
+ select {
+ case <-stopCh:
+ return
+ case <-ticker.C:
+ _, _ = SdNotify(Watchdog)
+ }
+ }
+ }()
+}