Add flag to customize shutdown gracetime (#84)

This commit is contained in:
Daniel Perez
2016-06-05 20:22:49 -04:00
committed by David Dollar
parent 733e197575
commit 9bebfece50
3 changed files with 20 additions and 6 deletions
+1
View File
@@ -1,3 +1,4 @@
procfile: Procfile.dev
concurrency: foo=2,bar=3
port: 15000
shutdown_grace_time: 30
+13 -5
View File
@@ -13,17 +13,18 @@ import (
"time"
)
const shutdownGraceTime = 3 * time.Second
const defaultPort = 5000
const defaultShutdownGraceTime = 3
var flagPort int
var flagConcurrency string
var flagRestart bool
var flagShutdownGraceTime int
var envs envFiles
var cmdStart = &Command{
Run: runStart,
Usage: "start [process name] [-f procfile] [-e env] [-c concurrency] [-p port] [-r]",
Usage: "start [process name] [-f procfile] [-e env] [-c concurrency] [-p port] [-t timeout] [-r]",
Short: "Start the application",
Long: `
Start the application specified by a Procfile (defaults to ./Procfile)
@@ -33,6 +34,7 @@ Examples:
forego start
forego start web
forego start -f Procfile.test -e .env.test
forego start -t 30
`,
}
@@ -42,11 +44,12 @@ func init() {
cmdStart.Flag.IntVar(&flagPort, "p", defaultPort, "port")
cmdStart.Flag.StringVar(&flagConcurrency, "c", "", "concurrency")
cmdStart.Flag.BoolVar(&flagRestart, "r", false, "restart")
err := readConfigFile(".forego", &flagProcfile, &flagPort, &flagConcurrency)
cmdStart.Flag.IntVar(&flagShutdownGraceTime, "t", defaultShutdownGraceTime, "shutdown grace time")
err := readConfigFile(".forego", &flagProcfile, &flagPort, &flagConcurrency, &flagShutdownGraceTime)
handleError(err)
}
func readConfigFile(config_path string, flagProcfile *string, flagPort *int, flagConcurrency *string) error {
func readConfigFile(config_path string, flagProcfile *string, flagPort *int, flagConcurrency *string, flagShutdownGraceTime *int) error {
config, err := ReadConfig(config_path)
if config["procfile"] != "" {
@@ -59,6 +62,11 @@ func readConfigFile(config_path string, flagProcfile *string, flagPort *int, fla
} else {
*flagPort = defaultPort
}
if config["shutdown_grace_time"] != "" {
*flagShutdownGraceTime, err = strconv.Atoi(config["shutdown_grace_time"])
} else {
*flagShutdownGraceTime = defaultShutdownGraceTime
}
*flagConcurrency = config["concurrency"]
return err
}
@@ -237,7 +245,7 @@ func runStart(cmd *Command, args []string) {
// When teardown fires, start the grace timer
f.teardown.FallHook = func() {
go func() {
time.Sleep(shutdownGraceTime)
time.Sleep(time.Duration(flagShutdownGraceTime) * time.Second)
of.SystemOutput("Grace time expired")
f.teardownNow.Fall()
}()
+6 -1
View File
@@ -150,7 +150,8 @@ func TestConfigBeOverrideByForegoFile(t *testing.T) {
var procfile = "Profile"
var port = 5000
var concurrency string = "web=2"
err := readConfigFile("./fixtures/configs/.forego", &procfile, &port, &concurrency)
var gracetime int = 3
err := readConfigFile("./fixtures/configs/.forego", &procfile, &port, &concurrency, &gracetime)
if err != nil {
t.Fatalf("Cannot set default values from forego config file")
@@ -167,4 +168,8 @@ func TestConfigBeOverrideByForegoFile(t *testing.T) {
if concurrency != "foo=2,bar=3" {
t.Fatal("concurrency should be 'foo=2,bar=3', got %s", concurrency)
}
if gracetime != 30 {
t.Fatal("gracetime should be 3, got %d", gracetime)
}
}