mirror of
https://github.com/ClusterCockpit/cc-metric-store.git
synced 2024-12-29 10:09:04 +01:00
106 lines
2.2 KiB
Go
106 lines
2.2 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"fmt"
|
||
|
"io"
|
||
|
"log"
|
||
|
"math"
|
||
|
"math/rand"
|
||
|
"net/http"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
const token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJFZERTQSJ9.eyJ1c2VyIjoiYWRtaW4iLCJyb2xlcyI6WyJST0xFX0FETUlOIiwiUk9MRV9BTkFMWVNUIiwiUk9MRV9VU0VSIl19.d-3_3FZTsadPjDEdsWrrQ7nS0edMAR4zjl-eK7rJU3HziNBfI9PDHDIpJVHTNN5E5SlLGLFXctWyKAkwhXL-Dw"
|
||
|
const ccmsurl = "http://localhost:8081/api/write"
|
||
|
const cluster = "fakedev"
|
||
|
const sockets = 2
|
||
|
const cpus = 8
|
||
|
const freq = 15 * time.Second
|
||
|
|
||
|
var hosts = []string{"fake001", "fake002", "fake003", "fake004", "fake005"}
|
||
|
var metrics = []struct {
|
||
|
Name string
|
||
|
Type string
|
||
|
AvgValue float64
|
||
|
}{
|
||
|
{"flops_any", "cpu", 10.0},
|
||
|
{"mem_bw", "socket", 50.0},
|
||
|
{"ipc", "cpu", 1.25},
|
||
|
{"cpu_load", "node", 4},
|
||
|
{"mem_used", "node", 20},
|
||
|
}
|
||
|
|
||
|
var states = make([]float64, 0)
|
||
|
|
||
|
func send(client *http.Client, t int64) {
|
||
|
msg := &bytes.Buffer{}
|
||
|
|
||
|
i := 0
|
||
|
for _, host := range hosts {
|
||
|
for _, metric := range metrics {
|
||
|
n := 1
|
||
|
if metric.Type == "socket" {
|
||
|
n = sockets
|
||
|
} else if metric.Type == "cpu" {
|
||
|
n = cpus
|
||
|
}
|
||
|
|
||
|
for j := 0; j < n; j++ {
|
||
|
fmt.Fprintf(msg, "%s,cluster=%s,host=%s,type=%s", metric.Name, cluster, host, metric.Type)
|
||
|
if metric.Type == "socket" {
|
||
|
fmt.Fprintf(msg, ",type-id=%d", j)
|
||
|
} else if metric.Type == "cpu" {
|
||
|
fmt.Fprintf(msg, ",type-id=%d", j)
|
||
|
}
|
||
|
|
||
|
x := metric.AvgValue + math.Sin(states[i])*(metric.AvgValue/10.)
|
||
|
states[i] += 0.1
|
||
|
fmt.Fprintf(msg, " value=%f ", x)
|
||
|
|
||
|
fmt.Fprintf(msg, "%d\n", t)
|
||
|
i++
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
req, _ := http.NewRequest(http.MethodPost, ccmsurl, msg)
|
||
|
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token))
|
||
|
res, err := client.Do(req)
|
||
|
if err != nil {
|
||
|
log.Print(err)
|
||
|
return
|
||
|
}
|
||
|
if res.StatusCode != http.StatusOK {
|
||
|
body, _ := io.ReadAll(res.Body)
|
||
|
log.Printf("%s: %s", res.Status, string(body))
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func main() {
|
||
|
for range hosts {
|
||
|
for _, m := range metrics {
|
||
|
n := 1
|
||
|
if m.Type == "socket" {
|
||
|
n = sockets
|
||
|
} else if m.Type == "cpu" {
|
||
|
n = cpus
|
||
|
}
|
||
|
|
||
|
for i := 0; i < n; i++ {
|
||
|
states = append(states, rand.Float64()*100)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
client := &http.Client{}
|
||
|
|
||
|
i := 0
|
||
|
for t := range time.Tick(freq) {
|
||
|
log.Printf("tick... (#%d)", i)
|
||
|
i++
|
||
|
|
||
|
send(client, t.Unix())
|
||
|
}
|
||
|
}
|