mirror of
https://github.com/TeaOSLab/EdgeCommon.git
synced 2025-12-05 05:30:25 +08:00
65 lines
1.8 KiB
Go
65 lines
1.8 KiB
Go
|
|
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
|||
|
|
|
|||
|
|
package serverconfigs
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"github.com/cespare/xxhash/v2"
|
|||
|
|
"github.com/iwind/TeaGo/types"
|
|||
|
|
"strconv"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// MetricItemCategory 指标分类
|
|||
|
|
type MetricItemCategory = string
|
|||
|
|
|
|||
|
|
const (
|
|||
|
|
MetricItemCategoryHTTP MetricItemCategory = "http"
|
|||
|
|
MetricItemCategoryTCP MetricItemCategory = "tcp"
|
|||
|
|
MetricItemCategoryUDP MetricItemCategory = "udp"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// MetricItemPeriodUnit 指标周期单位
|
|||
|
|
type MetricItemPeriodUnit = string
|
|||
|
|
|
|||
|
|
const (
|
|||
|
|
MetricItemPeriodUnitMinute MetricItemPeriodUnit = "minute"
|
|||
|
|
MetricItemPeriodUnitHour MetricItemPeriodUnit = "hour"
|
|||
|
|
MetricItemPeriodUnitDay MetricItemPeriodUnit = "day"
|
|||
|
|
MetricItemPeriodUnitWeek MetricItemPeriodUnit = "week"
|
|||
|
|
MetricItemPeriodUnitMonth MetricItemPeriodUnit = "month"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// MetricItemConfig 指标配置
|
|||
|
|
type MetricItemConfig struct {
|
|||
|
|
Id int64 `yaml:"id" json:"id"`
|
|||
|
|
IsOn bool `yaml:"isOn" json:"isOn"`
|
|||
|
|
Category MetricItemCategory `yaml:"category" json:"category"`
|
|||
|
|
Period int `yaml:"period" json:"period"`
|
|||
|
|
PeriodUnit MetricItemPeriodUnit `yaml:"periodUnit" json:"periodUnit"`
|
|||
|
|
Keys []string `yaml:"keys" json:"keys"`
|
|||
|
|
Value string `yaml:"value" json:"value"`
|
|||
|
|
|
|||
|
|
sumType string // 统计类型
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Init 初始化
|
|||
|
|
func (this *MetricItemConfig) Init() error {
|
|||
|
|
return nil
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// ParseRequest 处理请求
|
|||
|
|
func (this *MetricItemConfig) ParseRequest(format func(string) string) (key string, hash string, value float64) {
|
|||
|
|
for _, k := range this.Keys {
|
|||
|
|
key += "@" + format(k)
|
|||
|
|
}
|
|||
|
|
hash = strconv.FormatUint(xxhash.Sum64String(key), 10)
|
|||
|
|
|
|||
|
|
// TODO value将来支持复杂运算,比如 ${request.traffic.bytes} * 8
|
|||
|
|
if len(this.Value) == 0 {
|
|||
|
|
value = 1
|
|||
|
|
} else {
|
|||
|
|
value = types.Float64(format(this.Value))
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return
|
|||
|
|
}
|