commit
c2f972220e
@ -0,0 +1,7 @@
|
||||
.idea
|
||||
go.sum
|
||||
*.exe
|
||||
host.csv
|
||||
monitor.csv
|
||||
logs
|
||||
*.log
|
||||
@ -0,0 +1,41 @@
|
||||
/*
|
||||
*
|
||||
@author: sre
|
||||
@date: 2023/11/19 0019
|
||||
@desc: todo
|
||||
*
|
||||
*/
|
||||
package main
|
||||
|
||||
import "strings"
|
||||
|
||||
// getCPUInfo 获取cpu核心 使用率
|
||||
func getCPUInfo(ip, port string) (int, float64, error) {
|
||||
var cpuTotal, cpuIdle float64
|
||||
var cpuCount int
|
||||
data, err := getMetrics(ip, port)
|
||||
if err != nil {
|
||||
return 0, 0, err
|
||||
|
||||
}
|
||||
// 解析metrics数据
|
||||
lines := strings.Split(data, "\n")
|
||||
for _, line := range lines {
|
||||
if strings.HasPrefix(line, "node_cpu_seconds_total") {
|
||||
fields := strings.Fields(line)
|
||||
if len(fields) == 2 {
|
||||
cpuData, err := extractMetricValue(fields[1])
|
||||
if err != nil {
|
||||
//fmt.Println("无法提取指标值: ", err)
|
||||
return 0, 0, err
|
||||
}
|
||||
cpuTotal += cpuData
|
||||
if strings.Contains(line, "mode=\"idle\"") {
|
||||
cpuIdle += cpuData
|
||||
cpuCount += 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return cpuCount, 100 * (1 - cpuIdle/cpuTotal), nil
|
||||
}
|
||||
@ -0,0 +1,50 @@
|
||||
/*
|
||||
*
|
||||
@author: sre
|
||||
@date: 2023/11/19 0019
|
||||
@desc: todo
|
||||
*
|
||||
*/
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/gocarina/gocsv"
|
||||
"os"
|
||||
)
|
||||
|
||||
// Monitor for output
|
||||
type Monitor struct {
|
||||
IP string `csv:"ip"`
|
||||
Port string `csv:"port"`
|
||||
CPUCore int `csv:"cpu_core"`
|
||||
CPUUsage float64 `csv:"cpu_usage"`
|
||||
MemTotal float64 `csv:"mem_total"`
|
||||
MemAvailable float64 `csv:"mem_available"`
|
||||
NodeLoad1 float64 `csv:"node_load1"`
|
||||
NodeLoad5 float64 `csv:"node_load5"`
|
||||
NodeLoad15 float64 `csv:"node_load15"`
|
||||
ERROR string `csv:"error"`
|
||||
}
|
||||
|
||||
// Host for input
|
||||
type Host struct {
|
||||
IP string `csv:"ip"`
|
||||
Port string `csv:"port"`
|
||||
}
|
||||
|
||||
func GetHostListFromCSV() ([]*Host, error) {
|
||||
hostssFile, err := os.OpenFile(INPUTFILE, os.O_RDWR|os.O_CREATE, os.ModePerm)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer hostssFile.Close()
|
||||
|
||||
hosts := []*Host{}
|
||||
|
||||
if err := gocsv.UnmarshalFile(hostssFile, &hosts); err != nil { // Load hosts from file
|
||||
//if err := gocsv.UnmarshalBytes(CSVDATA, &hosts); err != nil { // Load hosts from file
|
||||
return nil, err
|
||||
}
|
||||
return hosts, nil
|
||||
|
||||
}
|
||||
@ -0,0 +1,30 @@
|
||||
/*
|
||||
*
|
||||
@author: sre
|
||||
@date: 2023/11/19 0019
|
||||
@desc: todo
|
||||
*
|
||||
*/
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestGetHostListFromCSV(t *testing.T) {
|
||||
hosts, err := GetHostListFromCSV()
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
for _, host := range hosts {
|
||||
fmt.Println(host)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestStrclean(t *testing.T) {
|
||||
s1 := "\"30.1 30.251.46,\","
|
||||
fmt.Println(strClean(s1))
|
||||
|
||||
}
|
||||
@ -0,0 +1,5 @@
|
||||
module exporterData
|
||||
|
||||
go 1.21
|
||||
|
||||
require github.com/gocarina/gocsv v0.0.0-20231116093920-b87c2d0e983a
|
||||
|
@ -0,0 +1,58 @@
|
||||
/*
|
||||
*
|
||||
@author: sre
|
||||
@date: 2023/11/19 0019
|
||||
@desc: todo
|
||||
*
|
||||
*/
|
||||
package main
|
||||
|
||||
import "strings"
|
||||
|
||||
func getLoadInfo(ip, port string) (float64, float64, float64, error) {
|
||||
var node_load1, node_load5, node_load15 float64
|
||||
data, err := getMetrics(ip, port)
|
||||
if err != nil {
|
||||
return 0, 0, 0, err
|
||||
|
||||
}
|
||||
// 解析metrics数据
|
||||
lines := strings.Split(data, "\n")
|
||||
for _, line := range lines {
|
||||
//node_load1
|
||||
if strings.HasPrefix(line, "node_load1 ") {
|
||||
fields := strings.Fields(line)
|
||||
if len(fields) == 2 {
|
||||
node_load1, err = extractMetricValue(fields[1])
|
||||
if err != nil {
|
||||
return 0, 0, 0, err
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
//node_load5
|
||||
if strings.HasPrefix(line, "node_load5 ") {
|
||||
fields := strings.Fields(line)
|
||||
if len(fields) == 2 {
|
||||
node_load1, err = extractMetricValue(fields[1])
|
||||
if err != nil {
|
||||
return 0, 0, 0, err
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
//node_load15
|
||||
if strings.HasPrefix(line, "node_load15 ") {
|
||||
fields := strings.Fields(line)
|
||||
if len(fields) == 2 {
|
||||
node_load1, err = extractMetricValue(fields[1])
|
||||
if err != nil {
|
||||
return 0, 0, 0, err
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return node_load1, node_load5, node_load15, nil
|
||||
|
||||
}
|
||||
@ -0,0 +1,16 @@
|
||||
|
||||
|
||||
交叉编译
|
||||
```cmd
|
||||
SET CGO_ENABLED=0
|
||||
SET GOOS=linux
|
||||
SET GOARCH=amd64
|
||||
go build
|
||||
```
|
||||
|
||||
```cmd
|
||||
SET CGO_ENABLED=0
|
||||
SET GOOS=linux
|
||||
SET GOARCH=arm64
|
||||
go build
|
||||
```
|
||||
Loading…
Reference in new issue