From 18e91937cd94ea199acff95c2e25015482d82005 Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Wed, 8 Jan 2020 10:51:59 +0100 Subject: Initial import --- spool.go | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 spool.go (limited to 'spool.go') diff --git a/spool.go b/spool.go new file mode 100644 index 0000000..e3d00d9 --- /dev/null +++ b/spool.go @@ -0,0 +1,72 @@ +package main + +import ( + "encoding/csv" + "fmt" + "log" + "os" + "path" + "strconv" +) + +// jobs is a map that matches a job name string to its last successfull run timestamp +type jobs map[string]uint64 + +func loadSpool() (entries jobs, err error) { + var ( + file *os.File + lines [][]string + ) + // We read the spool + file, err = os.Open(path.Join(workDir, spoolFile)) + if err != nil { + return nil, fmt.Errorf("INFO Couldn't open spool file: %s", err) + } + defer file.Close() + lines, err = csv.NewReader(file).ReadAll() + if err != nil { + return nil, fmt.Errorf("INFO Corrupted spool file : %s", err) + } + if verbose { + log.Printf("Spool file content : %v\n", lines) + } + + entries = make(map[string]uint64) + for _, line := range lines { + var ( + i int + ) + i, err = strconv.Atoi(line[1]) + if err != nil { + return nil, fmt.Errorf("INFO Corrupted spool file : couldn't parse timestamp entry") + } + entries[line[0]] = uint64(i) + } + return +} + +func saveSpool(entries jobs) (err error) { + var ( + file *os.File + lines [][]string + jobName string + ts uint64 + i int + ) + file, err = os.Create(path.Join(workDir, spoolFile)) + if err != nil { + return fmt.Errorf("INFO Couldn't open spool file for writing : %s", err) + } + defer file.Close() + + lines = make([][]string, len(entries)) + i = 0 + for jobName, ts = range entries { + lines[i] = make([]string, 2) + lines[i][0] = jobName + lines[i][1] = fmt.Sprintf("%d", ts) + i++ + } + err = csv.NewWriter(file).WriteAll(lines) + return +} -- cgit v1.2.3