package main import ( "encoding/json" "fmt" // "strconv" // "time" "log" ) func run() { c := c c.AddFunc("@every 10s", healthCheck) c.Start() jobs := c.Entries() for _, i := range jobs { fmt.Printf("Job: %v, Schedule: %v; Next %v; Prev %v \n", i.Job, i.Schedule, i.Next, i.Prev) } } const ( cache_prefix = "status_" ) func healthCheck() { h := []Host{} db := Db //db.Where("monitored = ?", true).Find(&h) db.Find(&h) c := pool.Get() defer c.Close() for k, v := range h { if !h[k].Monitored { continue } if resp, _, err := HttpGet(v.Url); err != nil { //fmt.Println(err) h[k].Status = "Error" h[k].StatusCode = 0 h[k].Success = false h[k].Monitored = false h[k].Reason = fmt.Sprintf("%v", err) Db.Debug().Save(&h[k]) } else { // fmt.Println("Health check: Okay! ", resp.Status) h[k].Status = resp.Status h[k].StatusCode = int64(resp.StatusCode) h[k].Success = true h[k].Reason = "" Db.Debug().Save(&h[k]) } // save struct in redis as serialized json // TODO /* j, err := json.Marshal(h[k]) if err != nil { log.Println("Error: ", err) continue } c.Do("SET", cache_prefix+strconv.Itoa(k), j) */ //c.Do("SET", cache_prefix+strconv.Itoa(k), j) //c.Do("SET", k, j) // fmt.Printf("Id: %v, Url: %v \n", v.Id, v.Url) } js, err := json.Marshal(h) if err != nil { log.Fatal(err) } else { c.Do("SET", cache_prefix+"database", js) } }