add metrics - just a start
This commit is contained in:
parent
10993b9209
commit
172212f0a8
1
main.go
1
main.go
|
|
@ -84,6 +84,7 @@ func main() {
|
||||||
http.HandleFunc("/set_password", setPasswordHandler)
|
http.HandleFunc("/set_password", setPasswordHandler)
|
||||||
http.HandleFunc("/logout", logoutHandler)
|
http.HandleFunc("/logout", logoutHandler)
|
||||||
http.HandleFunc("/confirm", confirmHandler)
|
http.HandleFunc("/confirm", confirmHandler)
|
||||||
|
http.HandleFunc("/metrics", metricsHandler)
|
||||||
|
|
||||||
logit("Starting Web Application...")
|
logit("Starting Web Application...")
|
||||||
http.ListenAndServe("127.0.0.1:4000", nil)
|
http.ListenAndServe("127.0.0.1:4000", nil)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,75 @@
|
||||||
|
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\" }")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,95 @@
|
||||||
{{define "body_content"}}
|
{{define "body_content"}}
|
||||||
{{ if ne .UserName "" }}
|
{{ if ne .UserName "" }}
|
||||||
<p>Datenauswertung</p>
|
|
||||||
|
<button id="mybutton" class="button is-primary is-large">Launch example modal</button>
|
||||||
|
|
||||||
|
<div class="modal">
|
||||||
|
<div class="modal-background"></div>
|
||||||
|
<div class="modal-card">
|
||||||
|
<header class="modal-card-head">
|
||||||
|
<p class="modal-card-title">Modal title</p>
|
||||||
|
<button class="delete" aria-label="close"></button>
|
||||||
|
</header>
|
||||||
|
<section id="chart" class="modal-card-body">
|
||||||
|
<!-- Content ... -->
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="column is-full notification is-warning">
|
||||||
|
<p class="is-size-2 has-text-centered has-text-weight-bold">Waage 1</p>
|
||||||
|
<p class="has-text-centered">letzte Messung: 1.1.2000 19:20</p>
|
||||||
|
<div>
|
||||||
|
<div class="colums is-full notification is-warning">
|
||||||
|
<nav class="level">
|
||||||
|
<div class="level-item has-text-centered">
|
||||||
|
<div>
|
||||||
|
<p class="icon"><i class="fa fa-thermometer-half"></i></p>
|
||||||
|
<p class="title">22.0 °C</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="level-item has-text-centered">
|
||||||
|
<div>
|
||||||
|
<p class="icon"><i class="fa fa-tint"></i></p>
|
||||||
|
<p class="title">50 %</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="level-item has-text-centered">
|
||||||
|
<div>
|
||||||
|
<p class="icon"><i class="fa fa-balance-scale"></i></p>
|
||||||
|
<p class="title is-size-1 has-text-weight-bold">456K</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="level-item has-text-centered">
|
||||||
|
<div>
|
||||||
|
<p class="icon"><i class="fa fa-cloud"></i></p>
|
||||||
|
<p class="title">789</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="level-item has-text-centered">
|
||||||
|
<div>
|
||||||
|
<p class="icon"><i class="fa fa-battery-three-quarters"></i></p>
|
||||||
|
<p class="title">90%</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
$("#mybutton,.delete").click(function(){
|
||||||
|
console.log("Hallo Velo");
|
||||||
|
$(".modal").toggleClass("is-active");
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/apexcharts"></script>
|
||||||
|
<script>
|
||||||
|
$.getJSON('https://mini-beieli.ch/metrics', function(mydata) {
|
||||||
|
var options = {
|
||||||
|
chart: {
|
||||||
|
type: 'line',
|
||||||
|
animations: {
|
||||||
|
enabled: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
xaxis: {
|
||||||
|
type: "datetime"
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
x: {
|
||||||
|
format: 'dd.MM.yyyy HH:mm'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: [{
|
||||||
|
name: 'vbat millivolt',
|
||||||
|
data: mydata
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
|
||||||
|
var chart = new ApexCharts(document.querySelector("#chart"), options);
|
||||||
|
|
||||||
|
chart.render();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
{{ else }}
|
{{ else }}
|
||||||
<h4>Bitte zuerst <a href="login.html">einloggen</a></h4>
|
<h4>Bitte zuerst <a href="login.html">einloggen</a></h4>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue