From 810992c3688d4e6122db26db71c2ae66c2d1b2d2 Mon Sep 17 00:00:00 2001 From: NiseVoid Date: Mon, 28 May 2018 13:45:26 +0200 Subject: [PATCH] Improve panic handling --- main.go | 83 +++++++++++++++++++++++++++++++++------------------------ 1 file changed, 48 insertions(+), 35 deletions(-) diff --git a/main.go b/main.go index 4a8a2a9..bfdf48f 100644 --- a/main.go +++ b/main.go @@ -18,12 +18,7 @@ import ( var db *qbdb.DB func main() { - defer func() { - v := recover() - if v != nil { - flog.Critical(`panic: `, v) - } - }() + defer recoverFunc() setLogger() flog.Info(`Starting`) @@ -31,41 +26,59 @@ func main() { initDB() - start := GetStartDate() for { - end := start.Add(time.Hour) + fetchData() + } +} - data := GetFortopData(start, end) - ranges := map[string][]Range{} - for _, v := range data { - ranges[v.Naam] = v.Range - } +func recoverFunc() { + v := recover() + if v != nil { + flog.Critical(`panic: `, v) + } +} - sets := Sets{} - for k, v := range ranges { - for _, r := range v { - date := time.Time(r.Date) - set, ok := sets[date] - if !ok { - sets[date] = Set{} - set = sets[date] - } +var start time.Time - set[k] = r.Value - } - } - - insertSets(sets) - - if end.Before(time.Now()) { - start = end.Add(time.Second) - continue - } - - time.Sleep(time.Minute) +func fetchData() { + defer recoverFunc() + if start.IsZero() { start = GetStartDate() } + + end := start.Add(time.Hour) + + data := GetFortopData(start, end) + ranges := map[string][]Range{} + for _, v := range data { + ranges[v.Naam] = v.Range + } + + sets := Sets{} + for k, v := range ranges { + for _, r := range v { + date := time.Time(r.Date) + set, ok := sets[date] + if !ok { + sets[date] = Set{} + set = sets[date] + } + + set[k] = r.Value + } + } + + insertSets(sets) + + if end.Before(time.Now()) { + start = end.Add(time.Second) + return + } + + time.Sleep(time.Minute) + + start = GetStartDate() } // GetStartDate gets the last measurement date @@ -75,7 +88,7 @@ func GetStartDate() time.Time { q := m.Select(qf.Max(m.Time)) err := db.QueryRow(q).Scan(&t) - if t == nil || err == sql.ErrNoRows { + if (err == nil && t == nil) || err == sql.ErrNoRows { return time.Date(2018, 4, 1, 0, 0, 0, 0, time.Local) } if err != nil {