]> ruderich.org/simon Gitweb - nsscash/nsscash.git/commitdiff
nsscash: write state on each successful run
authorSimon Ruderich <simon@ruderich.org>
Thu, 13 Jun 2019 05:58:04 +0000 (07:58 +0200)
committerSimon Ruderich <simon@ruderich.org>
Thu, 13 Jun 2019 05:58:04 +0000 (07:58 +0200)
README
main.go
state.go

diff --git a/README b/README
index 059fe51d2cd376fc965180dfadec1277dec93dda..510ba33b02e7c51d43e19b8493e576e8a1ab2c24 100644 (file)
--- a/README
+++ b/README
@@ -95,6 +95,10 @@ running processes!
 Now configure `nsscash` to run regularly, for example via cron or a systemd
 timer.
 
+To monitor `nsscash` for errors one can use the last modification time of the
+state file (see below). It's written on each successful run and not modified
+if an error occurs.
+
 === CONFIGURATION
 
 Nsscash is configured through a simple configuration file written in TOML. A
diff --git a/main.go b/main.go
index b10f57e55b92776a18ff5dfa76fb7ed25cc5b39c..52727408962b0030baef955f4c679131e32ad734 100644 (file)
--- a/main.go
+++ b/main.go
@@ -61,7 +61,9 @@ func main() {
                if err != nil {
                        log.Fatal(err)
                }
-               err = WriteStateIfChanged(cfg.StatePath, state)
+               // NOTE: Make sure to call WriteState() only if there were no
+               // errors (see WriteState() and README)
+               err = WriteState(cfg.StatePath, state)
                if err != nil {
                        log.Fatal(err)
                }
index b0dec1c2d47673fffa5eb81ee8e3d3113fce689f..fa8dccd60cfb56974f6a03d58eedae5c06f76b0f 100644 (file)
--- a/state.go
+++ b/state.go
@@ -22,15 +22,11 @@ import (
        "io/ioutil"
        "os"
        "path/filepath"
-       "reflect"
        "time"
 )
 
 type State struct {
        LastModified map[string]time.Time
-
-       // Copy of LastModified to write the state file only on changes
-       origLastModified map[string]time.Time
 }
 
 func LoadState(path string) (*State, error) {
@@ -54,19 +50,13 @@ func LoadState(path string) (*State, error) {
                state.LastModified = make(map[string]time.Time)
        }
 
-       state.origLastModified = make(map[string]time.Time)
-       for k, v := range state.LastModified {
-               state.origLastModified[k] = v
-       }
-
        return &state, nil
 }
 
-func WriteStateIfChanged(path string, state *State) error {
-       // State hasn't changed, nothing to do
-       if reflect.DeepEqual(state.LastModified, state.origLastModified) {
-               return nil
-       }
+func WriteState(path string, state *State) error {
+       // Update the state file even if nothing has changed to provide a
+       // simple way to check if nsscash ran successfully (the state is only
+       // updated if there were no errors)
 
        x, err := json.Marshal(state)
        if err != nil {