package main import ( "bytes" "fmt" "log" "net/http" "time" "io/ioutil" "bufio" "strings" ) // metrics handler func metricsHandler(response http.ResponseWriter, request *http.Request) { name := getUserName(request) if name != "" { url := "http://localhost:9999/api/v2/query?org=beieliorg" data := []byte(`from(bucket:"beielibucket") |> range(start:-24h) |> filter(fn: (r) => r._field == "v") |> filter(fn: (r) => r.devaddr == "084B3824")`) req, err := http.NewRequest("POST", url, bytes.NewBuffer(data)) if err != nil { log.Fatal("Error reading request. ", err) } // Set headers req.Header.Set("Authorization", "Token xXnq8ADcDygAyM_L0B_10c9yuoOv-cYcUfIXkJunRrIDMhB5ZNmza-Whr1ELcbKNzW8GzUMMYD85QohUHQdAmg==") req.Header.Set("accept", "application/csv") req.Header.Set("content-type", "application/vnd.flux") // Set client timeout client := &http.Client{Timeout: time.Second * 10} // Send request resp, err := client.Do(req) if err != nil { log.Fatal("Error reading response. ", err) } defer resp.Body.Close() fmt.Println("response Status:", resp.Status) fmt.Println("response Headers:", resp.Header) body, err := ioutil.ReadAll(resp.Body) if err != nil { log.Fatal("Error reading body. ", err) } fmt.Fprintf(response,"[\n") scanner := bufio.NewScanner(strings.NewReader(string(body))) first := true for scanner.Scan() { s := strings.Split(scanner.Text(),",") if ((len(s) >= 7) && !(strings.HasPrefix(s[5],"_"))) { t,err := time.Parse(time.RFC3339,s[5]) if err != nil { continue } a := t.Unix() b := s[6] if !(first) { fmt.Fprintf(response,",") } else { first = false } fmt.Fprintf(response,"[%d000,%s]\n",a,b) } } fmt.Fprintf(response,"]\n") } else { fmt.Fprintf(response, "{ \"msg\": \"Only available for logged in users\" }") } }