From 18fe2d057c7f21fe82b65546af666e9b2025748a Mon Sep 17 00:00:00 2001 From: aler9 <46489434+aler9@users.noreply.github.com> Date: Sun, 6 Dec 2020 22:29:56 +0100 Subject: [PATCH] print a warn message when the configuration file is not found --- internal/conf/conf.go | 20 ++++++++++---------- internal/confwatcher/confwatcher.go | 15 ++++++--------- main.go | 28 +++++++++++++++++++++------- 3 files changed, 37 insertions(+), 26 deletions(-) diff --git a/internal/conf/conf.go b/internal/conf/conf.go index 3d4d6c65..392caafa 100644 --- a/internal/conf/conf.go +++ b/internal/conf/conf.go @@ -145,45 +145,45 @@ func (conf *Conf) fillAndCheck() error { } // Load loads a Conf. -func Load(fpath string) (*Conf, error) { +func Load(fpath string) (*Conf, bool, error) { conf := &Conf{} // read from file - err := func() error { + found, err := func() (bool, error) { // rtsp-simple-server.yml is optional if fpath == "rtsp-simple-server.yml" { if _, err := os.Stat(fpath); err != nil { - return nil + return false, nil } } f, err := os.Open(fpath) if err != nil { - return err + return false, err } defer f.Close() err = yaml.NewDecoder(f).Decode(conf) if err != nil { - return err + return false, err } - return nil + return true, nil }() if err != nil { - return nil, err + return nil, false, err } // read from environment err = confenv.Load("RTSP", conf) if err != nil { - return nil, err + return nil, false, err } err = conf.fillAndCheck() if err != nil { - return nil, err + return nil, false, err } - return conf, nil + return conf, found, nil } diff --git a/internal/confwatcher/confwatcher.go b/internal/confwatcher/confwatcher.go index 5e5cc98f..23a7d884 100644 --- a/internal/confwatcher/confwatcher.go +++ b/internal/confwatcher/confwatcher.go @@ -1,7 +1,6 @@ package confwatcher import ( - "os" "path/filepath" "time" @@ -29,15 +28,13 @@ func New(confPath string) (*ConfWatcher, error) { return nil, err } - if _, err := os.Stat(confPath); err == nil { - // use absolute path to support Darwin - absolutePath, _ := filepath.Abs(confPath) + // use absolute path to support Darwin + absolutePath, _ := filepath.Abs(confPath) - err := inner.Add(absolutePath) - if err != nil { - inner.Close() - return nil, err - } + err = inner.Add(absolutePath) + if err != nil { + inner.Close() + return nil, err } w := &ConfWatcher{ diff --git a/main.go b/main.go index 7ddc4fad..70c70aa2 100644 --- a/main.go +++ b/main.go @@ -27,6 +27,7 @@ var version = "v0.0.0" type program struct { confPath string conf *conf.Conf + confFound bool stats *stats.Stats logHandler *loghandler.LogHandler metrics *metrics.Metrics @@ -63,7 +64,7 @@ func newProgram(args []string) (*program, error) { } var err error - p.conf, err = conf.Load(p.confPath) + p.conf, p.confFound, err = conf.Load(p.confPath) if err != nil { return nil, err } @@ -74,10 +75,12 @@ func newProgram(args []string) (*program, error) { return nil, err } - p.confWatcher, err = confwatcher.New(p.confPath) - if err != nil { - p.closeAllResources() - return nil, err + if p.confFound { + p.confWatcher, err = confwatcher.New(p.confPath) + if err != nil { + p.closeAllResources() + return nil, err + } } go p.run() @@ -102,10 +105,17 @@ func (p *program) Log(format string, args ...interface{}) { func (p *program) run() { defer close(p.done) + confChanged := func() chan struct{} { + if p.confWatcher != nil { + return p.confWatcher.Watch() + } + return make(chan struct{}) + }() + outer: for { select { - case <-p.confWatcher.Watch(): + case <-confChanged: err := p.reloadConf() if err != nil { p.Log("ERR: %s", err) @@ -136,6 +146,10 @@ func (p *program) createDynamicResources(initial bool) error { if initial { p.Log("rtsp-simple-server %s", version) + + if !p.confFound { + p.Log("configuration file not found, using the default one") + } } if p.conf.Metrics { @@ -239,7 +253,7 @@ func (p *program) closeAllResources() { func (p *program) reloadConf() error { p.Log("reloading configuration") - conf, err := conf.Load(p.confPath) + conf, _, err := conf.Load(p.confPath) if err != nil { return err }