76 lines
2.3 KiB
Go
76 lines
2.3 KiB
Go
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\" }")
|
|
}
|
|
}
|