pcm-openstack/internal/pkg/tracker/metrics.go

42 lines
1.3 KiB
Go

package tracker
import (
"context"
"github.com/prometheus/client_golang/api"
v1 "github.com/prometheus/client_golang/api/prometheus/v1"
proModel "github.com/prometheus/common/model"
"k8s.io/apimachinery/pkg/util/json"
"time"
)
const ADDRESS = "http://10.101.15.3:32585"
const (
NODE_DISK_AVAIL = "node_filesystem_avail_bytes{fstype=~\"ext4|xfs\"}"
NODE_DISK_TOTAL = "node_filesystem_size_bytes{fstype=~\"ext4|xfs\"}"
NODE_MEMORY_AVAIL = "node_memory_MemAvailable_bytes"
NODE_MEMORY_TOTAL = "node_memory_MemTotal_bytes"
NODE_CPU_TOTAL_COUNT = "node:node_num_cpu:sum"
NODE_CPU_USAGE = "sum by (instance)(increase(node_cpu_seconds_total{mode=\"idle\"}[5m])) / sum by (instance)(increase(node_cpu_seconds_total[5m]))"
)
func MetricsQuery(statement string) (*proModel.Vector, error) {
client, err := api.NewClient(api.Config{
Address: ADDRESS,
})
if err != nil {
return nil, err
}
v1api := v1.NewAPI(client)
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
metrics, _, err := v1api.Query(ctx, statement, time.Now(), v1.WithTimeout(5*time.Second))
marshal, err := json.Marshal(metrics)
if err != nil {
return nil, err
}
vector := proModel.Vector{}
json.Unmarshal(marshal, &vector)
return &vector, nil
}