145 lines
4.1 KiB
Go
145 lines
4.1 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"
|
|
"gitlink.org.cn/jcce-pcm/pcm-coordinator/model"
|
|
"gitlink.org.cn/jcce-pcm/utils/tool"
|
|
"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
|
|
}
|
|
|
|
// NodeDiskAvail 查询磁盘可用空间
|
|
func NodeDiskAvail(nodes []*model.ScNodeAvailInfo) ([]*model.ScNodeAvailInfo, error) {
|
|
vectors, err := MetricsQuery(NODE_DISK_AVAIL)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for index := range nodes {
|
|
for i := 0; i < vectors.Len(); i++ {
|
|
if string((*vectors)[i].Metric["instance"]) == nodes[index].NodeName {
|
|
nodes[index].DiskAvail = tool.StringToInt64((*vectors)[index].Value.String())
|
|
}
|
|
}
|
|
}
|
|
return nodes, nil
|
|
}
|
|
|
|
// NodeDiskTotal 查询磁盘总空间
|
|
func NodeDiskTotal(nodes []*model.ScNodeAvailInfo) ([]*model.ScNodeAvailInfo, error) {
|
|
vectors, err := MetricsQuery(NODE_DISK_TOTAL)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for index := range nodes {
|
|
for i := 0; i < vectors.Len(); i++ {
|
|
if string((*vectors)[i].Metric["instance"]) == nodes[index].NodeName {
|
|
nodes[index].DiskTotal = tool.StringToInt64((*vectors)[index].Value.String())
|
|
}
|
|
}
|
|
|
|
}
|
|
return nodes, nil
|
|
}
|
|
|
|
// NodeMemoryTotal 查询内存总大小
|
|
func NodeMemoryTotal(nodes []*model.ScNodeAvailInfo) ([]*model.ScNodeAvailInfo, error) {
|
|
vectors, err := MetricsQuery(NODE_MEMORY_TOTAL)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for index := range nodes {
|
|
for i := 0; i < vectors.Len(); i++ {
|
|
if string((*vectors)[i].Metric["instance"]) == nodes[index].NodeName {
|
|
nodes[index].MemTotal = tool.StringToInt64((*vectors)[index].Value.String())
|
|
}
|
|
}
|
|
|
|
}
|
|
return nodes, nil
|
|
}
|
|
|
|
// NodeMemoryAvail 查询内存可用大小
|
|
func NodeMemoryAvail(nodes []*model.ScNodeAvailInfo) ([]*model.ScNodeAvailInfo, error) {
|
|
vectors, err := MetricsQuery(NODE_MEMORY_AVAIL)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for index := range nodes {
|
|
for i := 0; i < vectors.Len(); i++ {
|
|
if string((*vectors)[i].Metric["instance"]) == nodes[index].NodeName {
|
|
nodes[index].MemAvail = tool.StringToInt64((*vectors)[index].Value.String())
|
|
}
|
|
}
|
|
|
|
}
|
|
return nodes, nil
|
|
}
|
|
|
|
// NodeCpuTotalCount 查询cpu总核数
|
|
func NodeCpuTotalCount(nodes []*model.ScNodeAvailInfo) ([]*model.ScNodeAvailInfo, error) {
|
|
vectors, err := MetricsQuery(NODE_CPU_TOTAL_COUNT)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for index := range nodes {
|
|
for i := 0; i < vectors.Len(); i++ {
|
|
if string((*vectors)[i].Metric["node"]) == nodes[index].NodeName {
|
|
nodes[index].CpuTotal = tool.StringToInt64((*vectors)[index].Value.String())
|
|
}
|
|
}
|
|
|
|
}
|
|
return nodes, nil
|
|
}
|
|
|
|
// NodeCpuUsage 查询cpu使用率
|
|
func NodeCpuUsage(nodes []*model.ScNodeAvailInfo) ([]*model.ScNodeAvailInfo, error) {
|
|
vectors, err := MetricsQuery(NODE_CPU_USAGE)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for index := range nodes {
|
|
for i := 0; i < vectors.Len(); i++ {
|
|
if string((*vectors)[i].Metric["instance"]) == nodes[index].NodeName {
|
|
nodes[index].CpuUsable = tool.StringToFloat64((*vectors)[index].Value.String())
|
|
}
|
|
}
|
|
|
|
}
|
|
return nodes, nil
|
|
}
|