From c75a3c6561e581407229102c5a747058be498b3e Mon Sep 17 00:00:00 2001 From: shengxiang Date: Thu, 3 Sep 2015 19:37:30 +0800 Subject: [PATCH] support save config --- gosuv.go | 7 ++++--- program.go | 22 +++++++++++++++++++++- server.go | 1 + 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/gosuv.go b/gosuv.go index 29b72b6..4a34b15 100644 --- a/gosuv.go +++ b/gosuv.go @@ -227,9 +227,10 @@ func init() { } var ( - GOSUV_HOME = os.ExpandEnv("$HOME/.gosuv") - GOSUV_CONFIG = filepath.Join(GOSUV_HOME, "gosuv.json") - GOSUV_VERSION = "0.0.1" + GOSUV_HOME = os.ExpandEnv("$HOME/.gosuv") + GOSUV_CONFIG = filepath.Join(GOSUV_HOME, "gosuv.json") + GOSUV_PROGRAM_CONFIG = filepath.Join(GOSUV_HOME, "programs.json") + GOSUV_VERSION = "0.0.1" ) func main() { diff --git a/program.go b/program.go index ac51ce5..080e2ce 100644 --- a/program.go +++ b/program.go @@ -1,8 +1,10 @@ package main import ( + "encoding/json" "errors" "io" + "io/ioutil" "os" "os/exec" "path/filepath" @@ -103,7 +105,7 @@ type ProgramInfo struct { var programTable *ProgramTable -func init() { +func InitServer() { programTable = &ProgramTable{ table: make(map[string]*Program, 10), ch: make(chan string), @@ -120,6 +122,23 @@ var ( ErrProgramDuplicate = errors.New("program duplicate") ) +func (pt *ProgramTable) saveConfig() error { + if _, err := os.Stat(GOSUV_PROGRAM_CONFIG); err == nil { + // load config + } + table := make(map[string]*ProgramInfo) + for name, p := range pt.table { + table[name] = p.Info + } + cfgFd, err := os.Create(GOSUV_PROGRAM_CONFIG) + if err != nil { + return err + } + defer cfgFd.Close() + data, _ := json.MarshalIndent(table, "", " ") + return ioutil.WriteFile(GOSUV_PROGRAM_CONFIG, data, 0644) +} + func (pt *ProgramTable) AddProgram(p *Program) error { pt.mu.Lock() defer pt.mu.Unlock() @@ -128,6 +147,7 @@ func (pt *ProgramTable) AddProgram(p *Program) error { return ErrProgramDuplicate } pt.table[name] = p + pt.saveConfig() return nil } diff --git a/server.go b/server.go index 0ffc385..e59b4df 100644 --- a/server.go +++ b/server.go @@ -91,6 +91,7 @@ func shutdownHandler(w http.ResponseWriter, r *http.Request) { } func ServeAddr(host string, port int) error { + InitServer() r := mux.NewRouter() r.HandleFunc("/api/version", versionHandler) r.Methods("POST").Path("/api/shutdown").HandlerFunc(shutdownHandler)