Commit 1d199fdc authored by jingbo.wang's avatar jingbo.wang

node health info ok

parent d4d8e8ed
package report_form package report_form
import (
"fmt"
"git.quantgroup.cn/DevOps/enoch/pkg/glog"
"time"
)
type Node struct {
serviceName string
address string
startTime time.Time
endTime time.Time
//cpu
averageCpu int
maxCpu int
medianCpu int
//mem
averageMem int
maxMem int
medianMem int
//disk
averageDisk int
maxDisk int
medianDisk int
//thread
averageThread int
maxThread int
medianThread int
}
func NewNode(serviceName string, address string, startTime time.Time, endTime time.Time) *Node {
rtn := &Node{
serviceName: serviceName,
address: address,
startTime: startTime,
endTime: endTime,
}
rtn.initCpu()
rtn.initMem()
rtn.initDisk()
rtn.initThread()
return rtn
}
//依次返回:中位、平均、最大
//如果获取失败返回0,0,0
func (n *Node) queryKey(key string) (int, int, int) {
//注:这里使用了子查询,InfluxDB目前不支持函数参数为表达式,如:sum("key"*10)
sqlFormat := `SELECT median("x"), mean("x"), max("x") ` +
`FROM (` +
`SELECT %s AS "x" FROM machine_info ` +
`WHERE sys_name = '%s' AND host = '%s'AND time >= %d AND time < %d` +
`);`
sql := fmt.Sprintf(sqlFormat, key, n.serviceName, n.address, n.startTime.UnixNano(), n.endTime.UnixNano())
glog.Debug(sql)
resp, err := query(sql)
if err != nil {
glog.Error("node query key:", err)
}
if len(resp.Results) != 1 {
return 0, 0, 0
}
res := resp.Results[0]
if len(res.Series) != 1 {
return 0, 0, 0
}
row := res.Series[0]
if len(row.Values) != 1 {
return 0, 0, 0
}
value := row.Values[0]
medianIdx, ok1 := getModRowKeyIdx("median", row)
meanIdx, ok2 := getModRowKeyIdx("mean", row)
maxIdx, ok3 := getModRowKeyIdx("max", row)
if !ok1 || !ok2 || !ok3 {
return 0, 0, 0
}
median, ok1 := jsonNumberToInt(value[medianIdx])
mean, ok2 := jsonNumberToInt(value[meanIdx])
max, ok3 := jsonNumberToInt(value[maxIdx])
if !ok1 || !ok2 || !ok3 {
return 0, 0, 0
}
return median, mean, max
}
func (n *Node) initCpu() {
n.medianCpu, n.averageCpu, n.maxCpu = n.queryKey(`"processors"`)
}
func (n *Node) initMem() {
n.medianMem, n.averageMem, n.maxMem = n.queryKey(`(mem_tol-mem_free)/mem_tol*100`)
}
func (n *Node) initDisk() {
n.medianDisk, n.averageDisk, n.maxDisk = n.queryKey(`(disk_tol-disk_free)/disk_tol*100`)
}
func (n *Node) initThread() {
n.medianThread, n.averageThread, n.maxThread = n.queryKey(`"thread_peak"`)
}
func (n *Node) GetServiceName() string {
return n.serviceName
}
func (n *Node) GetAddress() string {
return n.address
}
func (n *Node) GetStartTime() time.Time {
return n.startTime
}
func (n *Node) GetEndTime() time.Time {
return n.endTime
}
func (n *Node) GetAverageCpu() int {
return n.averageCpu
}
func (n *Node) GetMedianCpu() int {
return n.medianCpu
}
func (n *Node) GetMaxCpu() int {
return n.maxCpu
}
func (n *Node) GetAverageMem() int {
return n.averageMem
}
func (n *Node) GetMedianMem() int {
return n.medianMem
}
func (n *Node) GetMaxMem() int {
return n.maxMem
}
func (n *Node) GetAverageDisk() int {
return n.averageDisk
}
func (n *Node) GetMedianDisk() int {
return n.medianDisk
}
func (n *Node) GetMaxDisk() int {
return n.maxDisk
}
func (n *Node) GetAverageThread() int {
return n.averageThread
}
func (n *Node) GetMedianThread() int {
return n.medianThread
}
func (n *Node) GetMaxThread() int {
return n.maxThread
}
package report_form
import (
"testing"
"time"
)
func TestNewNode(t *testing.T) {
n := 7
now := time.Now()
startTime := now.Add(-1 * time.Duration(now.Hour()) * time.Hour)
startTime = startTime.Add(-1 * time.Duration(now.Minute()) * time.Minute)
startTime = startTime.Add(-1 * time.Duration(now.Second()) * time.Second)
startTime = startTime.Add(-1 * time.Duration(now.Nanosecond()))
startTime = startTime.AddDate(0, 0, -n)
endTime := startTime.AddDate(0, 0, n)
node := NewNode("cuishou", "172.16.6.92", startTime, endTime)
t.Log(node.GetServiceName())
t.Log(node.GetAddress())
t.Log("cpu", node.GetAverageCpu(), node.GetMedianCpu(), node.GetMaxCpu())
t.Log("mem", node.GetAverageMem(), node.GetMedianMem(), node.GetMaxMem())
t.Log("disk", node.GetAverageDisk(), node.GetMedianDisk(), node.GetMaxDisk())
t.Log("thread", node.GetAverageThread(), node.GetMedianThread(), node.GetMaxThread())
}
...@@ -7,12 +7,12 @@ import ( ...@@ -7,12 +7,12 @@ import (
) )
func TestRun(t *testing.T) { func TestRun(t *testing.T) {
fmt.Println(Run(10)) fmt.Println(Run(7))
} }
func TestUtf8StringLen(t *testing.T) { func TestUtf8StringLen(t *testing.T) {
s := "你好,world" s := "你好,world"
for i:=0; i<len(s); { for i := 0; i < len(s); {
r, size := utf8.DecodeRuneInString(s[i:]) r, size := utf8.DecodeRuneInString(s[i:])
fmt.Println(string(r), size) fmt.Println(string(r), size)
i += size i += size
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment