func recieveLogs(w http.ResponseWriter, r *http.Request, ch chan<- *store.Bucket) { defer utils.MeasureT(time.Now(), "http-receiver") if r.Method != "POST" { http.Error(w, "Invalid Request", 400) return } defer r.Body.Close() token, err := utils.ParseToken(r) if err != nil { utils.MeasureE("http-auth", err) http.Error(w, "Invalid Request", 400) return } defer utils.MeasureT(time.Now(), token+"-http-receive") buckets, err := store.NewBucket(token, bufio.NewReader(r.Body)) if err != nil { http.Error(w, "Invalid Request", 400) return } for i := range buckets { ch <- buckets[i] } }
func getBuckets(w http.ResponseWriter, r *http.Request) { defer utils.MeasureT(time.Now(), "get-buckets") if r.Method != "GET" { http.Error(w, "Invalid Request", 400) return } token, err := utils.ParseToken(r) if err != nil { errmsg := map[string]string{"error": "Missing authorization."} utils.WriteJson(w, 401, errmsg) return } q := r.URL.Query() limit, err := strconv.ParseInt(q.Get("limit"), 10, 32) if err != nil { errmsg := map[string]string{"error": "Missing limit parameter."} utils.WriteJson(w, 400, errmsg) return } max := utils.RoundTime(time.Now(), time.Minute) min := max.Add(-1 * time.Minute * time.Duration(limit)) buckets, err := store.GetBuckets(token, min, max) if err != nil { errmsg := map[string]string{"error": "Unable to find buckets"} utils.WriteJson(w, 500, errmsg) return } utils.WriteJson(w, 200, buckets) }
func getMetrics(w http.ResponseWriter, r *http.Request) { defer utils.MeasureT("http-metrics", time.Now()) // Support CORS. w.Header().Set("Access-Control-Allow-Origin", "*") w.Header().Set("Access-Control-Allow-Headers", "Authorization") w.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS") if r.Method == "OPTIONS" { return } names := metricsPat.FindStringSubmatch(r.URL.Path) if len(names) < 2 { fmt.Printf("at=error error=%q\n", "Name parameter not provided.") errmsg := map[string]string{"error": "Name parameter not provided."} utils.WriteJson(w, 401, errmsg) return } name := names[1] token, err := utils.ParseToken(r) if err != nil { fmt.Printf("at=error error=%q\n", err) errmsg := map[string]string{"error": "Missing authorization."} utils.WriteJson(w, 401, errmsg) return } q := r.URL.Query() limit, err := strconv.ParseInt(q.Get("limit"), 10, 32) if err != nil { errmsg := map[string]string{"error": "Missing limit parameter."} utils.WriteJson(w, 400, errmsg) return } resolution, err := strconv.ParseInt(q.Get("resolution"), 10, 32) if err != nil { errmsg := map[string]string{"error": "Missing resolution parameter."} utils.WriteJson(w, 400, errmsg) return } max := utils.RoundTime(time.Now(), (time.Minute * time.Duration(resolution))) min := max.Add(-1 * time.Minute * time.Duration(limit*resolution)) metrics, err := store.GetMetrics(token, name, resolution, min, max) if err != nil { errmsg := map[string]string{"error": "Unable to find metrics."} utils.WriteJson(w, 500, errmsg) return } utils.WriteJson(w, 200, metrics) }
// Pull data from the http request, stick it in a channel and close the request. // We don't do any validation on the data. Always respond with 200. func recvLogs(w http.ResponseWriter, r *http.Request, recv *receiver.Receiver) { defer utils.MeasureT("http-receiver", time.Now()) if r.Method != "POST" { http.Error(w, "Invalid Request", 400) return } token, err := utils.ParseToken(r) if err != nil { http.Error(w, "Invalid Request", 400) return } b, err := ioutil.ReadAll(r.Body) r.Body.Close() if err != nil { http.Error(w, "Invalid Request", 400) return } recv.Receive(token, b) }
func receiveLogs(w http.ResponseWriter, r *http.Request, inbox chan<- *LogRequest) { defer utils.MeasureT("http-receiver", time.Now()) if r.Method != "POST" { http.Error(w, "Invalid Request", 400) return } token, err := utils.ParseToken(r) if err != nil { http.Error(w, "Invalid Request", 400) return } b, err := ioutil.ReadAll(r.Body) if err != nil { http.Error(w, "Invalid Request", 400) r.Body.Close() return } r.Body.Close() inbox <- &LogRequest{token, b} }