mirror of
https://gitee.com/IrisVega/frp.git
synced 2024-11-01 22:31:29 +08:00
metric: clear useless proxy statistics data
This commit is contained in:
parent
08b0885564
commit
f0dc3ed47b
@ -268,7 +268,7 @@ func (ctl *Control) stoper() {
|
|||||||
for _, pxy := range ctl.proxies {
|
for _, pxy := range ctl.proxies {
|
||||||
pxy.Close()
|
pxy.Close()
|
||||||
ctl.svr.DelProxy(pxy.GetName())
|
ctl.svr.DelProxy(pxy.GetName())
|
||||||
StatsCloseProxy(pxy.GetConf().GetBaseInfo().ProxyType)
|
StatsCloseProxy(pxy.GetName(), pxy.GetConf().GetBaseInfo().ProxyType)
|
||||||
}
|
}
|
||||||
|
|
||||||
ctl.allShutdown.Done()
|
ctl.allShutdown.Done()
|
||||||
|
@ -16,8 +16,10 @@ package server
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"sync"
|
"sync"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/fatedier/frp/models/config"
|
"github.com/fatedier/frp/models/config"
|
||||||
|
"github.com/fatedier/frp/utils/log"
|
||||||
"github.com/fatedier/frp/utils/metric"
|
"github.com/fatedier/frp/utils/metric"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -46,10 +48,13 @@ type ServerStatistics struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type ProxyStatistics struct {
|
type ProxyStatistics struct {
|
||||||
|
Name string
|
||||||
ProxyType string
|
ProxyType string
|
||||||
TrafficIn metric.DateCounter
|
TrafficIn metric.DateCounter
|
||||||
TrafficOut metric.DateCounter
|
TrafficOut metric.DateCounter
|
||||||
CurConns metric.Counter
|
CurConns metric.Counter
|
||||||
|
LastStartTime time.Time
|
||||||
|
LastCloseTime time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@ -63,6 +68,27 @@ func init() {
|
|||||||
|
|
||||||
ProxyStatistics: make(map[string]*ProxyStatistics),
|
ProxyStatistics: make(map[string]*ProxyStatistics),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
for {
|
||||||
|
time.Sleep(12 * time.Hour)
|
||||||
|
log.Debug("start to clear useless proxy statistics data...")
|
||||||
|
StatsClearUselessInfo()
|
||||||
|
log.Debug("finish to clear useless proxy statistics data")
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
|
func StatsClearUselessInfo() {
|
||||||
|
// To check if there are proxies that closed than 7 days and drop them.
|
||||||
|
globalStats.mu.Lock()
|
||||||
|
defer globalStats.mu.Unlock()
|
||||||
|
for name, data := range globalStats.ProxyStatistics {
|
||||||
|
if !data.LastCloseTime.IsZero() && time.Since(data.LastCloseTime) > time.Duration(7*24)*time.Hour {
|
||||||
|
delete(globalStats.ProxyStatistics, name)
|
||||||
|
log.Trace("clear proxy [%s]'s statistics data, lastCloseTime: [%s]", name, data.LastCloseTime.String())
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func StatsNewClient() {
|
func StatsNewClient() {
|
||||||
@ -91,23 +117,28 @@ func StatsNewProxy(name string, proxyType string) {
|
|||||||
proxyStats, ok := globalStats.ProxyStatistics[name]
|
proxyStats, ok := globalStats.ProxyStatistics[name]
|
||||||
if !(ok && proxyStats.ProxyType == proxyType) {
|
if !(ok && proxyStats.ProxyType == proxyType) {
|
||||||
proxyStats = &ProxyStatistics{
|
proxyStats = &ProxyStatistics{
|
||||||
|
Name: name,
|
||||||
ProxyType: proxyType,
|
ProxyType: proxyType,
|
||||||
CurConns: metric.NewCounter(),
|
CurConns: metric.NewCounter(),
|
||||||
TrafficIn: metric.NewDateCounter(ReserveDays),
|
TrafficIn: metric.NewDateCounter(ReserveDays),
|
||||||
TrafficOut: metric.NewDateCounter(ReserveDays),
|
TrafficOut: metric.NewDateCounter(ReserveDays),
|
||||||
|
LastStartTime: time.Now(),
|
||||||
}
|
}
|
||||||
globalStats.ProxyStatistics[name] = proxyStats
|
globalStats.ProxyStatistics[name] = proxyStats
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func StatsCloseProxy(proxyType string) {
|
func StatsCloseProxy(proxyName string, proxyType string) {
|
||||||
if config.ServerCommonCfg.DashboardPort != 0 {
|
if config.ServerCommonCfg.DashboardPort != 0 {
|
||||||
globalStats.mu.Lock()
|
globalStats.mu.Lock()
|
||||||
defer globalStats.mu.Unlock()
|
defer globalStats.mu.Unlock()
|
||||||
if counter, ok := globalStats.ProxyTypeCounts[proxyType]; ok {
|
if counter, ok := globalStats.ProxyTypeCounts[proxyType]; ok {
|
||||||
counter.Dec(1)
|
counter.Dec(1)
|
||||||
}
|
}
|
||||||
|
if proxyStats, ok := globalStats.ProxyStatistics[proxyName]; ok {
|
||||||
|
proxyStats.LastCloseTime = time.Now()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user