parent
dd5ae29f82
commit
2bea8b7c84
@ -1,4 +1,4 @@
|
|||||||
package engine
|
package conv
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"math"
|
"math"
|
@ -0,0 +1,101 @@
|
|||||||
|
package usage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/didi/nightingale/v5/src/server/common/conv"
|
||||||
|
"github.com/didi/nightingale/v5/src/server/reader"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
url = "http://n9e.io/report"
|
||||||
|
request = "sum(rate(n9e_server_samples_received_total[5m]))"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Usage struct {
|
||||||
|
Samples float64 `json:"samples"` // per second
|
||||||
|
Maintainer string `json:"maintainer"`
|
||||||
|
Hostname string `json:"hostname"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func getSamples() (float64, error) {
|
||||||
|
value, warns, err := reader.Reader.Client.Query(context.Background(), request, time.Now())
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(warns) > 0 {
|
||||||
|
return 0, fmt.Errorf("occur some warnings: %v", warns)
|
||||||
|
}
|
||||||
|
|
||||||
|
lst := conv.ConvertVectors(value)
|
||||||
|
if len(lst) == 0 {
|
||||||
|
return 0, fmt.Errorf("convert result is empty")
|
||||||
|
}
|
||||||
|
|
||||||
|
return lst[0].Value, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func Report() {
|
||||||
|
for {
|
||||||
|
time.Sleep(time.Minute * 10)
|
||||||
|
report()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func report() {
|
||||||
|
sps, err := getSamples()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
hostname, err := os.Hostname()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
maintainer := "blank"
|
||||||
|
|
||||||
|
u := Usage{
|
||||||
|
Samples: sps,
|
||||||
|
Hostname: hostname,
|
||||||
|
Maintainer: maintainer,
|
||||||
|
}
|
||||||
|
|
||||||
|
post(u)
|
||||||
|
}
|
||||||
|
|
||||||
|
func post(u Usage) error {
|
||||||
|
body, err := json.Marshal(u)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
req, err := http.NewRequest("POST", url, bytes.NewReader(body))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
cli := http.Client{
|
||||||
|
Timeout: time.Second * 10,
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := cli.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if resp.StatusCode != 200 {
|
||||||
|
return fmt.Errorf("got %s", resp.Status)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = ioutil.ReadAll(resp.Body)
|
||||||
|
return err
|
||||||
|
}
|
Loading…
Reference in new issue