84 lines
1.8 KiB
Go
84 lines
1.8 KiB
Go
package core
|
|
|
|
import (
|
|
"sync/atomic"
|
|
"time"
|
|
)
|
|
|
|
// Metrics Core 监控指标
|
|
type Metrics struct {
|
|
// 连接统计
|
|
activeConnections atomic.Int64
|
|
totalConnections atomic.Int64
|
|
|
|
// 流量统计
|
|
bytesSent atomic.Uint64
|
|
bytesReceived atomic.Uint64
|
|
|
|
// 策略统计
|
|
strategyFallbacks atomic.Int64
|
|
lastSwitchTime atomic.Int64 // Unix timestamp
|
|
}
|
|
|
|
// NewMetrics 创建监控指标
|
|
func NewMetrics() *Metrics {
|
|
return &Metrics{}
|
|
}
|
|
|
|
// GetActiveConnections 获取活跃连接数
|
|
func (m *Metrics) GetActiveConnections() int64 {
|
|
return m.activeConnections.Load()
|
|
}
|
|
|
|
// IncrActiveConnections 增加活跃连接数
|
|
func (m *Metrics) IncrActiveConnections() {
|
|
m.activeConnections.Add(1)
|
|
m.totalConnections.Add(1)
|
|
}
|
|
|
|
// DecrActiveConnections 减少活跃连接数
|
|
func (m *Metrics) DecrActiveConnections() {
|
|
m.activeConnections.Add(-1)
|
|
}
|
|
|
|
// AddBytesSent 增加发送字节数
|
|
func (m *Metrics) AddBytesSent(n uint64) {
|
|
m.bytesSent.Add(n)
|
|
}
|
|
|
|
// AddBytesReceived 增加接收字节数
|
|
func (m *Metrics) AddBytesReceived(n uint64) {
|
|
m.bytesReceived.Add(n)
|
|
}
|
|
|
|
// IncrStrategyFallbacks 增加策略降级次数
|
|
func (m *Metrics) IncrStrategyFallbacks() {
|
|
m.strategyFallbacks.Add(1)
|
|
m.lastSwitchTime.Store(time.Now().Unix())
|
|
}
|
|
|
|
// GetTotalConnections 获取总连接数
|
|
func (m *Metrics) GetTotalConnections() int64 {
|
|
return m.totalConnections.Load()
|
|
}
|
|
|
|
// GetBytesSent 获取发送字节数
|
|
func (m *Metrics) GetBytesSent() uint64 {
|
|
return m.bytesSent.Load()
|
|
}
|
|
|
|
// GetBytesReceived 获取接收字节数
|
|
func (m *Metrics) GetBytesReceived() uint64 {
|
|
return m.bytesReceived.Load()
|
|
}
|
|
|
|
// GetStrategyFallbacks 获取策略降级次数
|
|
func (m *Metrics) GetStrategyFallbacks() int64 {
|
|
return m.strategyFallbacks.Load()
|
|
}
|
|
|
|
// GetLastSwitchTime 获取最后切换时间
|
|
func (m *Metrics) GetLastSwitchTime() time.Time {
|
|
return time.Unix(m.lastSwitchTime.Load(), 0)
|
|
}
|