package sfive import ( "bytes" "encoding/json" "net/http" "time" ) func findMaxId(values []dataUpdateDb) int { maxId := -1 for i := range values { if values[i].Id > maxId { maxId = values[i].Id } } return maxId } func (self StatsSinkServer) handleForwarding(url string, client *http.Client) { latestId := 0 // TODO retrieve latest known from server next: // TODO forwarding for { time.Sleep(500) updates, err := self.store.GetUpdatesAfter(latestId) if err != nil { s5l.Printf("fwd: failed reading updates: %v\n", err) continue next } for i := range updates { data, err := json.Marshal(updates[i]) if err == nil { s5l.Printf("fwd: encode failed: %v\n", err) // TODO retry etc. continue } _, err = client.Post(url, "application/json", bytes.NewBuffer(data)) if err == nil { latestId = findMaxId(updates) } else { s5l.Printf("fwd: post failed: %v\n", err) // TODO retry etc. } } } } func (self StatsSinkServer) RunForwarding(forwardBaseUrl string) { forwardUrl := forwardBaseUrl + "/updates" self.handleForwarding(forwardUrl, http.DefaultClient) }