Files
EdgeCommon/pkg/nodeconfigs/node_value_item.go

356 lines
8.4 KiB
Go
Raw Normal View History

2024-05-17 18:28:59 +08:00
// Copyright 2021 GoEdge CDN goedge.cdn@gmail.com. All rights reserved.
2021-04-29 16:48:27 +08:00
package nodeconfigs
2021-09-12 20:21:27 +08:00
import (
"encoding/json"
)
2021-05-04 21:02:21 +08:00
// NodeValueItem 监控项
2021-04-29 16:48:27 +08:00
type NodeValueItem = string
const (
2023-05-17 18:42:35 +08:00
NodeValueItemCPU NodeValueItem = "cpu" // CPU
NodeValueItemMemory NodeValueItem = "memory" // 内存
NodeValueItemLoad NodeValueItem = "load" // 负载
NodeValueItemTrafficIn NodeValueItem = "trafficIn" // 业务上行流量
NodeValueItemTrafficOut NodeValueItem = "trafficOut" // 业务下行流量
NodeValueItemAllTraffic NodeValueItem = "allTraffic" // 所有流量
2021-07-07 19:55:52 +08:00
NodeValueItemConnections NodeValueItem = "connections" // 连接数
NodeValueItemRequests NodeValueItem = "requests" // 请求访问量
NodeValueItemAttackRequests NodeValueItem = "attackRequests" // 攻击请求访问量
NodeValueItemDisk NodeValueItem = "disk" // 磁盘
2021-07-08 19:43:20 +08:00
NodeValueItemCacheDir NodeValueItem = "cacheDir" // 缓存目录
NodeValueItemNetworkPackets NodeValueItem = "networkPackets" // 网络数据包统计
2021-04-29 16:48:27 +08:00
)
2021-05-04 21:02:21 +08:00
type nodeValueItemDefinition struct {
Code string `json:"code"`
Name string `json:"name"`
Description string `json:"description"`
Params []*nodeValueItemParamDefinition `json:"params"`
}
type nodeValueItemParamDefinition struct {
Code string `json:"code"`
Name string `json:"name"`
Description string `json:"description"`
2023-11-03 11:57:56 +08:00
IsPercent bool `json:"isPercent"` // 是否支持百分比
2021-05-04 21:02:21 +08:00
}
var nodeValueItemDefinitions = []*nodeValueItemDefinition{
{
Code: NodeValueItemCPU,
Name: "CPU",
Params: []*nodeValueItemParamDefinition{
{
Code: "usage",
Name: "使用比例",
2023-11-03 11:57:56 +08:00
Description: "0到100之间的数字",
IsPercent: true,
2021-05-04 21:02:21 +08:00
},
},
},
{
Code: NodeValueItemMemory,
Name: "内存",
Params: []*nodeValueItemParamDefinition{
{
Code: "usage",
Name: "使用比例",
2023-11-03 11:57:56 +08:00
Description: "0到100之间的数字",
IsPercent: true,
2021-05-04 21:02:21 +08:00
},
},
},
{
Code: NodeValueItemLoad,
Name: "负载",
Params: []*nodeValueItemParamDefinition{
{
Code: "load1m",
Name: "1分钟负载",
2023-11-03 11:57:56 +08:00
Description: "1分钟内的平均负载",
2021-05-04 21:02:21 +08:00
},
{
Code: "load5m",
Name: "5分钟负载",
2023-11-03 11:57:56 +08:00
Description: "5分钟内的平均负载",
2021-05-04 21:02:21 +08:00
},
{
Code: "load15m",
Name: "15分钟负载",
2023-11-03 11:57:56 +08:00
Description: "15分钟内的平均负载",
2021-05-04 21:02:21 +08:00
},
},
},
{
Code: NodeValueItemTrafficIn,
Name: "上行流量",
2023-11-03 11:57:56 +08:00
Description: "平均每分钟客户端发送到服务器端的流量。",
2021-05-04 21:02:21 +08:00
Params: []*nodeValueItemParamDefinition{
{
Code: "total",
Name: "流量",
Description: "单位为字节",
},
},
},
{
Code: NodeValueItemTrafficOut,
Name: "下行流量",
2023-11-03 11:57:56 +08:00
Description: "平均每分钟服务器端发送到客户端的流量。",
2021-05-04 21:02:21 +08:00
Params: []*nodeValueItemParamDefinition{
{
Code: "total",
Name: "流量",
Description: "单位为字节",
},
},
},
{
2023-11-03 11:57:56 +08:00
Code: NodeValueItemConnections,
Name: "连接数",
Description: "平均每分钟连接数",
2021-05-04 21:02:21 +08:00
Params: []*nodeValueItemParamDefinition{
{
Code: "total",
Name: "总数",
Description: "连接总数",
},
},
},
2021-07-07 19:55:52 +08:00
{
2023-11-03 11:57:56 +08:00
Code: NodeValueItemRequests,
Name: "请求数",
Description: "平均每分钟请求数",
2021-07-07 19:55:52 +08:00
Params: []*nodeValueItemParamDefinition{
{
Code: "total",
Name: "总数",
Description: "请求总数",
},
},
},
{
2023-11-03 11:57:56 +08:00
Code: NodeValueItemAttackRequests,
Name: "攻击请求数",
Description: "平均每分钟攻击请求数",
2021-07-07 19:55:52 +08:00
Params: []*nodeValueItemParamDefinition{
{
Code: "total",
Name: "总数",
Description: "攻击请求总数",
},
},
},
2021-05-04 21:02:21 +08:00
{
Code: NodeValueItemDisk,
Name: "硬盘空间",
Params: []*nodeValueItemParamDefinition{
{
Code: "usage",
Name: "使用比例",
2023-11-03 11:57:56 +08:00
Description: "0到100之间的数字",
IsPercent: true,
2021-05-04 21:02:21 +08:00
},
},
},
{
Code: NodeValueItemNetworkPackets,
Name: "网络数据包",
Params: []*nodeValueItemParamDefinition{
{
Code: "tcpInPPS",
Name: "TCP入口包速率pps",
},
{
Code: "udpInPPS",
Name: "UDP入口包速率pps",
},
{
Code: "icmpInPPS",
Name: "ICMP入口包速率pps",
},
},
},
2021-05-04 21:02:21 +08:00
}
// FindAllNodeValueItemDefinitions 获取所有监控项信息
func FindAllNodeValueItemDefinitions() []*nodeValueItemDefinition {
return nodeValueItemDefinitions
}
// FindNodeValueItemName 获取监控项名称
func FindNodeValueItemName(code NodeValueItem) string {
for _, def := range nodeValueItemDefinitions {
if def.Code == code {
return def.Name
}
}
return ""
}
// FindNodeValueItemParamName 获取监控项某个参数的名称
func FindNodeValueItemParamName(nodeCode NodeValueItem, paramCode string) string {
for _, def := range nodeValueItemDefinitions {
if def.Code == nodeCode {
for _, p := range def.Params {
if p.Code == paramCode {
return p.Name
}
}
return ""
}
}
return ""
}
2023-11-03 11:57:56 +08:00
// CheckNodeValueItemParamIsPercent 判断监控项某个参数是否支持百分比
func CheckNodeValueItemParamIsPercent(nodeCode NodeValueItem, paramCode string) bool {
for _, def := range nodeValueItemDefinitions {
if def.Code == nodeCode {
for _, p := range def.Params {
if p.Code == paramCode {
return p.IsPercent
}
}
return false
}
}
return false
}
2021-05-04 21:02:21 +08:00
// NodeValueRange 值范围
2021-04-29 16:48:27 +08:00
type NodeValueRange = string
const (
NodeValueRangeMinute NodeValueRange = "minute"
)
2021-05-04 21:02:21 +08:00
// NodeValueOperator 操作符
type NodeValueOperator = string
const (
NodeValueOperatorGt NodeValueOperator = "gt" // 大于
NodeValueOperatorGte NodeValueOperator = "gte" // 大于等于
NodeValueOperatorLt NodeValueOperator = "lt" // 小于
NodeValueOperatorLte NodeValueOperator = "lte" // 小于等于
NodeValueOperatorEq NodeValueOperator = "eq" // 等于
NodeValueOperatorNeq NodeValueOperator = "neq" // 不等于
)
type nodeValueOperatorDefinition struct {
Code string `json:"code"`
Name string `json:"name"`
}
var nodeValueOperatorDefinitions = []*nodeValueOperatorDefinition{
{
Code: NodeValueOperatorGt,
Name: "大于",
},
{
Code: NodeValueOperatorGte,
Name: "大于等于",
},
{
Code: NodeValueOperatorLt,
Name: "小于",
},
{
Code: NodeValueOperatorLte,
Name: "小于等于",
},
{
Code: NodeValueOperatorEq,
Name: "等于",
},
{
Code: NodeValueOperatorNeq,
Name: "不等于",
},
}
// FindNodeValueOperatorName 操作符名称
func FindNodeValueOperatorName(operator NodeValueOperator) string {
for _, def := range nodeValueOperatorDefinitions {
if def.Code == operator {
return def.Name
}
}
return ""
}
// FindAllNodeValueOperatorDefinitions 获取所有操作符定义
func FindAllNodeValueOperatorDefinitions() []*nodeValueOperatorDefinition {
return nodeValueOperatorDefinitions
}
2021-05-05 19:51:46 +08:00
// CompareNodeValue 对比值
func CompareNodeValue(operator NodeValueOperator, value1 float64, value2 float64) bool {
switch operator {
case NodeValueOperatorGt:
return value1 > value2
case NodeValueOperatorGte:
return value1 >= value2
case NodeValueOperatorLt:
return value1 < value2
case NodeValueOperatorLte:
return value1 <= value2
case NodeValueOperatorEq:
return value1 == value2
case NodeValueOperatorNeq:
return value1 != value2
}
return false
}
2021-05-04 21:02:21 +08:00
// NodeValueSumMethod 聚合方法
type NodeValueSumMethod = string
const (
NodeValueSumMethodSum NodeValueSumMethod = "sum" // 相加
NodeValueSumMethodAvg NodeValueSumMethod = "avg" // 平均
)
// FindNodeValueSumMethodName 聚合方法名称
func FindNodeValueSumMethodName(method NodeValueSumMethod) string {
switch method {
case NodeValueSumMethodSum:
return "和"
case NodeValueSumMethodAvg:
return "平均"
}
return ""
}
// NodeValueDurationUnit 时间单位
type NodeValueDurationUnit = string
const (
NodeValueDurationUnitMinute NodeValueDurationUnit = "minute"
)
// FindNodeValueDurationUnitName 时间单位名称
func FindNodeValueDurationUnitName(unit NodeValueDurationUnit) string {
switch unit {
case NodeValueDurationUnitMinute:
return "分钟"
}
return ""
}
// UnmarshalNodeValue 对值进行解码
func UnmarshalNodeValue(valueJSON []byte) string {
var result = ""
err := json.Unmarshal(valueJSON, &result)
if err != nil {
// 暂时不提示错误
}
return result
}