From 4ed67ab7c2efd3547b04c3ac8c4453112e157947 Mon Sep 17 00:00:00 2001 From: codeskyblue Date: Wed, 7 Sep 2016 22:43:44 +0800 Subject: [PATCH] add auto start program support --- gosuv.go | 5 +++-- web.go | 15 ++++++++++++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/gosuv.go b/gosuv.go index 0f49c15..eb2b272 100644 --- a/gosuv.go +++ b/gosuv.go @@ -75,7 +75,7 @@ func equinoxUpdate(channel string, skipConfirm bool) error { } func actionStartServer(c *cli.Context) error { - hdlr, err := newSupervisorHandler() + suv, hdlr, err := newSupervisorHandler() if err != nil { log.Fatal(err) } @@ -87,6 +87,7 @@ func actionStartServer(c *cli.Context) error { addr := cfg.Server.Addr if c.Bool("foreground") { + suv.AutoStartPrograms() log.Printf("server listen on %v", addr) log.Fatal(http.ListenAndServe(addr, nil)) } else { @@ -191,7 +192,7 @@ func actionReload(c *cli.Context) error { } func actionConfigTest(c *cli.Context) error { - if _, err := newSupervisorHandler(); err != nil { + if _, _, err := newSupervisorHandler(); err != nil { log.Fatal(err) } log.Println("test is successful") diff --git a/web.go b/web.go index aed9f23..a2df4d0 100644 --- a/web.go +++ b/web.go @@ -581,8 +581,17 @@ func (s *Supervisor) catchExitSignal() { }() } -func newSupervisorHandler() (hdlr http.Handler, err error) { - suv := &Supervisor{ +func (s *Supervisor) AutoStartPrograms() { + for _, proc := range s.procMap { + if proc.Program.StartAuto { + log.Printf("auto start %s", strconv.Quote(proc.Name)) + proc.Operate(StartEvent) + } + } +} + +func newSupervisorHandler() (suv *Supervisor, hdlr http.Handler, err error) { + suv = &Supervisor{ ConfigDir: defaultConfigDir, pgMap: make(map[string]Program, 0), procMap: make(map[string]*Process, 0), @@ -611,5 +620,5 @@ func newSupervisorHandler() (hdlr http.Handler, err error) { r.HandleFunc("/ws/logs/{name}", suv.wsLog) r.HandleFunc("/ws/perfs/{name}", suv.wsPerf) - return r, nil + return suv, r, nil }