增加服务带宽统计

This commit is contained in:
GoEdgeLab
2022-07-05 20:08:58 +08:00
parent efd60b7080
commit 65a2aedc67
12 changed files with 577 additions and 147 deletions

View File

@@ -691,7 +691,6 @@ func (this *MetricStatDAO) Clean(tx *dbs.Tx) error {
Table(table). Table(table).
Attr("itemId", item.Id). Attr("itemId", item.Id).
Lte("createdDay", expiresDay). Lte("createdDay", expiresDay).
UseIndex("createdDay").
Limit(10_000). // 一次性不要删除太多,防止阻塞其他操作 Limit(10_000). // 一次性不要删除太多,防止阻塞其他操作
Delete() Delete()
return err return err

View File

@@ -237,7 +237,6 @@ func (this *MetricSumStatDAO) Clean(tx *dbs.Tx) error {
Attr("itemId", item.Id). Attr("itemId", item.Id).
Where("(createdDay IS NULL OR createdDay<:day)"). Where("(createdDay IS NULL OR createdDay<:day)").
Param("day", expiresDay). Param("day", expiresDay).
UseIndex("createdDay").
Limit(10_000). // 一次性不要删除太多,防止阻塞其他操作 Limit(10_000). // 一次性不要删除太多,防止阻塞其他操作
Delete() Delete()
return err return err

View File

@@ -0,0 +1,128 @@
package stats
import (
"github.com/TeaOSLab/EdgeAPI/internal/errors"
"github.com/TeaOSLab/EdgeAPI/internal/goman"
"github.com/TeaOSLab/EdgeAPI/internal/remotelogs"
_ "github.com/go-sql-driver/mysql"
"github.com/iwind/TeaGo/Tea"
"github.com/iwind/TeaGo/dbs"
"github.com/iwind/TeaGo/maps"
"github.com/iwind/TeaGo/rands"
"github.com/iwind/TeaGo/types"
timeutil "github.com/iwind/TeaGo/utils/time"
"sync"
"time"
)
type ServerBandwidthStatDAO dbs.DAO
const (
ServerBandwidthStatTablePartials = 20 // 分表数量
)
func init() {
dbs.OnReadyDone(func() {
// 清理数据任务
var ticker = time.NewTicker(time.Duration(rands.Int(24, 48)) * time.Hour)
goman.New(func() {
for range ticker.C {
err := SharedServerBandwidthStatDAO.Clean(nil)
if err != nil {
remotelogs.Error("SharedServerBandwidthStatDAO", "clean expired data failed: "+err.Error())
}
}
})
})
}
func NewServerBandwidthStatDAO() *ServerBandwidthStatDAO {
return dbs.NewDAO(&ServerBandwidthStatDAO{
DAOObject: dbs.DAOObject{
DB: Tea.Env,
Table: "edgeServerBandwidthStats",
Model: new(ServerBandwidthStat),
PkName: "id",
},
}).(*ServerBandwidthStatDAO)
}
var SharedServerBandwidthStatDAO *ServerBandwidthStatDAO
func init() {
dbs.OnReady(func() {
SharedServerBandwidthStatDAO = NewServerBandwidthStatDAO()
})
}
// UpdateServerBandwidth 写入数据
func (this *ServerBandwidthStatDAO) UpdateServerBandwidth(tx *dbs.Tx, serverId int64, day string, timeAt string, bytes int64) error {
if serverId <= 0 {
return errors.New("invalid server id '" + types.String(serverId) + "'")
}
return this.Query(tx).
Table(this.partialTable(serverId)).
Param("bytes", bytes).
InsertOrUpdateQuickly(maps.Map{
"serverId": serverId,
"day": day,
"timeAt": timeAt,
"bytes": bytes,
}, maps.Map{
"bytes": dbs.SQL("bytes+:bytes"),
})
}
// FindServerStats 查找某个时间段的带宽统计
// 参数:
// - day YYYYMMDD
// - timeAt HHII
func (this *ServerBandwidthStatDAO) FindServerStats(tx *dbs.Tx, serverId int64, day string, timeFrom string, timeTo string) (result []*ServerBandwidthStat, err error) {
_, err = this.Query(tx).
Table(this.partialTable(serverId)).
Attr("serverId", serverId).
Attr("day", day).
Between("timeAt", timeFrom, timeTo).
Slice(&result).
FindAll()
return
}
// Clean 清理过期数据
func (this *ServerBandwidthStatDAO) Clean(tx *dbs.Tx) error {
var day = timeutil.Format("Ymd", time.Now().AddDate(0, 0, -62)) // 保留大约2个月的数据
return this.runBatch(func(table string, locker *sync.Mutex) error {
_, err := this.Query(tx).
Table(table).
Lt("day", day).
Delete()
return err
})
}
// 批量执行
func (this *ServerBandwidthStatDAO) runBatch(f func(table string, locker *sync.Mutex) error) error {
var locker = &sync.Mutex{}
var wg = sync.WaitGroup{}
wg.Add(ServerBandwidthStatTablePartials)
var resultErr error
for i := 0; i < ServerBandwidthStatTablePartials; i++ {
var table = this.partialTable(int64(i))
go func(table string) {
defer wg.Done()
err := f(table, locker)
if err != nil {
resultErr = err
}
}(table)
}
wg.Wait()
return resultErr
}
// 获取分区表
func (this *ServerBandwidthStatDAO) partialTable(serverId int64) string {
return this.Table + "_" + types.String(serverId%int64(ServerBandwidthStatTablePartials))
}

View File

@@ -0,0 +1,48 @@
package stats_test
import (
"fmt"
"github.com/TeaOSLab/EdgeAPI/internal/db/models/stats"
_ "github.com/go-sql-driver/mysql"
_ "github.com/iwind/TeaGo/bootstrap"
"github.com/iwind/TeaGo/dbs"
"github.com/iwind/TeaGo/rands"
timeutil "github.com/iwind/TeaGo/utils/time"
"testing"
"time"
)
func TestServerBandwidthStatDAO_UpdateServerBandwidth(t *testing.T) {
var dao = stats.NewServerBandwidthStatDAO()
var tx *dbs.Tx
err := dao.UpdateServerBandwidth(tx, 1, timeutil.Format("Ymd"), timeutil.Format("Hi"), 1024)
if err != nil {
t.Fatal(err)
}
t.Log("ok")
}
func TestSeverBandwidthStatDAO_InsertManyStats(t *testing.T) {
var dao = stats.NewServerBandwidthStatDAO()
var tx *dbs.Tx
for i := 0; i < 1_000_000; i++ {
var day = timeutil.Format("Ymd", time.Now().AddDate(0, 0, -rands.Int(0, 200)))
var minute = fmt.Sprintf("%02d%02d", rands.Int(0, 23), rands.Int(0, 59))
err := dao.UpdateServerBandwidth(tx, 1, day, minute, 1024)
if err != nil {
t.Fatal(err)
}
}
t.Log("ok")
}
func TestServerBandwidthStatDAO_Clean(t *testing.T) {
var dao = stats.NewServerBandwidthStatDAO()
var tx *dbs.Tx
var before = time.Now()
err := dao.Clean(tx)
if err != nil {
t.Fatal(err)
}
t.Log("ok", time.Since(before).Seconds()*1000, "ms")
}

View File

@@ -0,0 +1,22 @@
package stats
// ServerBandwidthStat 服务峰值带宽统计
type ServerBandwidthStat struct {
Id uint64 `field:"id"` // ID
ServerId uint64 `field:"serverId"` // 服务ID
Day string `field:"day"` // 日期YYYYMMDD
TimeAt string `field:"timeAt"` // 时间点HHMM
Bytes uint64 `field:"bytes"` // 带宽字节
}
type ServerBandwidthStatOperator struct {
Id interface{} // ID
ServerId interface{} // 服务ID
Day interface{} // 日期YYYYMMDD
TimeAt interface{} // 时间点HHMM
Bytes interface{} // 带宽字节
}
func NewServerBandwidthStatOperator() *ServerBandwidthStatOperator {
return &ServerBandwidthStatOperator{}
}

View File

@@ -0,0 +1 @@
package stats

View File

@@ -14,579 +14,585 @@ import (
// 注册服务 // 注册服务
func (this *APINode) registerServices(server *grpc.Server) { func (this *APINode) registerServices(server *grpc.Server) {
{ {
instance := this.serviceInstance(&services.APITokenService{}).(*services.APITokenService) var instance = this.serviceInstance(&services.APITokenService{}).(*services.APITokenService)
pb.RegisterAPITokenServiceServer(server, instance) pb.RegisterAPITokenServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.AdminService{}).(*services.AdminService) var instance = this.serviceInstance(&services.AdminService{}).(*services.AdminService)
pb.RegisterAdminServiceServer(server, instance) pb.RegisterAdminServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.NodeGrantService{}).(*services.NodeGrantService) var instance = this.serviceInstance(&services.NodeGrantService{}).(*services.NodeGrantService)
pb.RegisterNodeGrantServiceServer(server, instance) pb.RegisterNodeGrantServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.ServerService{}).(*services.ServerService) var instance = this.serviceInstance(&services.ServerService{}).(*services.ServerService)
pb.RegisterServerServiceServer(server, instance) pb.RegisterServerServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.NodeService{}).(*services.NodeService) var instance = this.serviceInstance(&services.NodeService{}).(*services.NodeService)
pb.RegisterNodeServiceServer(server, instance) pb.RegisterNodeServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.NodeClusterService{}).(*services.NodeClusterService) var instance = this.serviceInstance(&services.NodeClusterService{}).(*services.NodeClusterService)
pb.RegisterNodeClusterServiceServer(server, instance) pb.RegisterNodeClusterServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.NodeIPAddressService{}).(*services.NodeIPAddressService) var instance = this.serviceInstance(&services.NodeIPAddressService{}).(*services.NodeIPAddressService)
pb.RegisterNodeIPAddressServiceServer(server, instance) pb.RegisterNodeIPAddressServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.NodeIPAddressLogService{}).(*services.NodeIPAddressLogService) var instance = this.serviceInstance(&services.NodeIPAddressLogService{}).(*services.NodeIPAddressLogService)
pb.RegisterNodeIPAddressLogServiceServer(server, instance) pb.RegisterNodeIPAddressLogServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.NodeIPAddressThresholdService{}).(*services.NodeIPAddressThresholdService) var instance = this.serviceInstance(&services.NodeIPAddressThresholdService{}).(*services.NodeIPAddressThresholdService)
pb.RegisterNodeIPAddressThresholdServiceServer(server, instance) pb.RegisterNodeIPAddressThresholdServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.APINodeService{}).(*services.APINodeService) var instance = this.serviceInstance(&services.APINodeService{}).(*services.APINodeService)
pb.RegisterAPINodeServiceServer(server, instance) pb.RegisterAPINodeServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.APIMethodStatService{}).(*services.APIMethodStatService) var instance = this.serviceInstance(&services.APIMethodStatService{}).(*services.APIMethodStatService)
pb.RegisterAPIMethodStatServiceServer(server, instance) pb.RegisterAPIMethodStatServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.OriginService{}).(*services.OriginService) var instance = this.serviceInstance(&services.OriginService{}).(*services.OriginService)
pb.RegisterOriginServiceServer(server, instance) pb.RegisterOriginServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.HTTPWebService{}).(*services.HTTPWebService) var instance = this.serviceInstance(&services.HTTPWebService{}).(*services.HTTPWebService)
pb.RegisterHTTPWebServiceServer(server, instance) pb.RegisterHTTPWebServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.ReverseProxyService{}).(*services.ReverseProxyService) var instance = this.serviceInstance(&services.ReverseProxyService{}).(*services.ReverseProxyService)
pb.RegisterReverseProxyServiceServer(server, instance) pb.RegisterReverseProxyServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.HTTPGzipService{}).(*services.HTTPGzipService) var instance = this.serviceInstance(&services.HTTPGzipService{}).(*services.HTTPGzipService)
pb.RegisterHTTPGzipServiceServer(server, instance) pb.RegisterHTTPGzipServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.HTTPHeaderPolicyService{}).(*services.HTTPHeaderPolicyService) var instance = this.serviceInstance(&services.HTTPHeaderPolicyService{}).(*services.HTTPHeaderPolicyService)
pb.RegisterHTTPHeaderPolicyServiceServer(server, instance) pb.RegisterHTTPHeaderPolicyServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.HTTPHeaderService{}).(*services.HTTPHeaderService) var instance = this.serviceInstance(&services.HTTPHeaderService{}).(*services.HTTPHeaderService)
pb.RegisterHTTPHeaderServiceServer(server, instance) pb.RegisterHTTPHeaderServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.HTTPPageService{}).(*services.HTTPPageService) var instance = this.serviceInstance(&services.HTTPPageService{}).(*services.HTTPPageService)
pb.RegisterHTTPPageServiceServer(server, instance) pb.RegisterHTTPPageServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.HTTPAccessLogPolicyService{}).(*services.HTTPAccessLogPolicyService) var instance = this.serviceInstance(&services.HTTPAccessLogPolicyService{}).(*services.HTTPAccessLogPolicyService)
pb.RegisterHTTPAccessLogPolicyServiceServer(server, instance) pb.RegisterHTTPAccessLogPolicyServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.HTTPCachePolicyService{}).(*services.HTTPCachePolicyService) var instance = this.serviceInstance(&services.HTTPCachePolicyService{}).(*services.HTTPCachePolicyService)
pb.RegisterHTTPCachePolicyServiceServer(server, instance) pb.RegisterHTTPCachePolicyServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.HTTPFirewallPolicyService{}).(*services.HTTPFirewallPolicyService) var instance = this.serviceInstance(&services.HTTPFirewallPolicyService{}).(*services.HTTPFirewallPolicyService)
pb.RegisterHTTPFirewallPolicyServiceServer(server, instance) pb.RegisterHTTPFirewallPolicyServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.FirewallService{}).(*services.FirewallService) var instance = this.serviceInstance(&services.FirewallService{}).(*services.FirewallService)
pb.RegisterFirewallServiceServer(server, instance) pb.RegisterFirewallServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.HTTPLocationService{}).(*services.HTTPLocationService) var instance = this.serviceInstance(&services.HTTPLocationService{}).(*services.HTTPLocationService)
pb.RegisterHTTPLocationServiceServer(server, instance) pb.RegisterHTTPLocationServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.HTTPWebsocketService{}).(*services.HTTPWebsocketService) var instance = this.serviceInstance(&services.HTTPWebsocketService{}).(*services.HTTPWebsocketService)
pb.RegisterHTTPWebsocketServiceServer(server, instance) pb.RegisterHTTPWebsocketServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.HTTPRewriteRuleService{}).(*services.HTTPRewriteRuleService) var instance = this.serviceInstance(&services.HTTPRewriteRuleService{}).(*services.HTTPRewriteRuleService)
pb.RegisterHTTPRewriteRuleServiceServer(server, instance) pb.RegisterHTTPRewriteRuleServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.SSLCertService{}).(*services.SSLCertService) var instance = this.serviceInstance(&services.SSLCertService{}).(*services.SSLCertService)
pb.RegisterSSLCertServiceServer(server, instance) pb.RegisterSSLCertServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.SSLPolicyService{}).(*services.SSLPolicyService) var instance = this.serviceInstance(&services.SSLPolicyService{}).(*services.SSLPolicyService)
pb.RegisterSSLPolicyServiceServer(server, instance) pb.RegisterSSLPolicyServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.SysSettingService{}).(*services.SysSettingService) var instance = this.serviceInstance(&services.SysSettingService{}).(*services.SysSettingService)
pb.RegisterSysSettingServiceServer(server, instance) pb.RegisterSysSettingServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.HTTPFirewallRuleGroupService{}).(*services.HTTPFirewallRuleGroupService) var instance = this.serviceInstance(&services.HTTPFirewallRuleGroupService{}).(*services.HTTPFirewallRuleGroupService)
pb.RegisterHTTPFirewallRuleGroupServiceServer(server, instance) pb.RegisterHTTPFirewallRuleGroupServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.HTTPFirewallRuleSetService{}).(*services.HTTPFirewallRuleSetService) var instance = this.serviceInstance(&services.HTTPFirewallRuleSetService{}).(*services.HTTPFirewallRuleSetService)
pb.RegisterHTTPFirewallRuleSetServiceServer(server, instance) pb.RegisterHTTPFirewallRuleSetServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.DBNodeService{}).(*services.DBNodeService) var instance = this.serviceInstance(&services.DBNodeService{}).(*services.DBNodeService)
pb.RegisterDBNodeServiceServer(server, instance) pb.RegisterDBNodeServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.NodeLogService{}).(*services.NodeLogService) var instance = this.serviceInstance(&services.NodeLogService{}).(*services.NodeLogService)
pb.RegisterNodeLogServiceServer(server, instance) pb.RegisterNodeLogServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.NodeLoginService{}).(*services.NodeLoginService) var instance = this.serviceInstance(&services.NodeLoginService{}).(*services.NodeLoginService)
pb.RegisterNodeLoginServiceServer(server, instance) pb.RegisterNodeLoginServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.HTTPAccessLogService{}).(*services.HTTPAccessLogService) var instance = this.serviceInstance(&services.HTTPAccessLogService{}).(*services.HTTPAccessLogService)
pb.RegisterHTTPAccessLogServiceServer(server, instance) pb.RegisterHTTPAccessLogServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.MessageService{}).(*services.MessageService) var instance = this.serviceInstance(&services.MessageService{}).(*services.MessageService)
pb.RegisterMessageServiceServer(server, instance) pb.RegisterMessageServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.MessageRecipientService{}).(*services.MessageRecipientService) var instance = this.serviceInstance(&services.MessageRecipientService{}).(*services.MessageRecipientService)
pb.RegisterMessageRecipientServiceServer(server, instance) pb.RegisterMessageRecipientServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.MessageReceiverService{}).(*services.MessageReceiverService) var instance = this.serviceInstance(&services.MessageReceiverService{}).(*services.MessageReceiverService)
pb.RegisterMessageReceiverServiceServer(server, instance) pb.RegisterMessageReceiverServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.MessageMediaService{}).(*services.MessageMediaService) var instance = this.serviceInstance(&services.MessageMediaService{}).(*services.MessageMediaService)
pb.RegisterMessageMediaServiceServer(server, instance) pb.RegisterMessageMediaServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.MessageRecipientGroupService{}).(*services.MessageRecipientGroupService) var instance = this.serviceInstance(&services.MessageRecipientGroupService{}).(*services.MessageRecipientGroupService)
pb.RegisterMessageRecipientGroupServiceServer(server, instance) pb.RegisterMessageRecipientGroupServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.MessageMediaInstanceService{}).(*services.MessageMediaInstanceService) var instance = this.serviceInstance(&services.MessageMediaInstanceService{}).(*services.MessageMediaInstanceService)
pb.RegisterMessageMediaInstanceServiceServer(server, instance) pb.RegisterMessageMediaInstanceServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.MessageTaskService{}).(*services.MessageTaskService) var instance = this.serviceInstance(&services.MessageTaskService{}).(*services.MessageTaskService)
pb.RegisterMessageTaskServiceServer(server, instance) pb.RegisterMessageTaskServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.MessageTaskLogService{}).(*services.MessageTaskLogService) var instance = this.serviceInstance(&services.MessageTaskLogService{}).(*services.MessageTaskLogService)
pb.RegisterMessageTaskLogServiceServer(server, instance) pb.RegisterMessageTaskLogServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.NodeGroupService{}).(*services.NodeGroupService) var instance = this.serviceInstance(&services.NodeGroupService{}).(*services.NodeGroupService)
pb.RegisterNodeGroupServiceServer(server, instance) pb.RegisterNodeGroupServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.NodeRegionService{}).(*services.NodeRegionService) var instance = this.serviceInstance(&services.NodeRegionService{}).(*services.NodeRegionService)
pb.RegisterNodeRegionServiceServer(server, instance) pb.RegisterNodeRegionServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.NodePriceItemService{}).(*services.NodePriceItemService) var instance = this.serviceInstance(&services.NodePriceItemService{}).(*services.NodePriceItemService)
pb.RegisterNodePriceItemServiceServer(server, instance) pb.RegisterNodePriceItemServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.ServerGroupService{}).(*services.ServerGroupService) var instance = this.serviceInstance(&services.ServerGroupService{}).(*services.ServerGroupService)
pb.RegisterServerGroupServiceServer(server, instance) pb.RegisterServerGroupServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.IPLibraryService{}).(*services.IPLibraryService) var instance = this.serviceInstance(&services.IPLibraryService{}).(*services.IPLibraryService)
pb.RegisterIPLibraryServiceServer(server, instance) pb.RegisterIPLibraryServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.FileChunkService{}).(*services.FileChunkService) var instance = this.serviceInstance(&services.FileChunkService{}).(*services.FileChunkService)
pb.RegisterFileChunkServiceServer(server, instance) pb.RegisterFileChunkServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.FileService{}).(*services.FileService) var instance = this.serviceInstance(&services.FileService{}).(*services.FileService)
pb.RegisterFileServiceServer(server, instance) pb.RegisterFileServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.RegionCountryService{}).(*services.RegionCountryService) var instance = this.serviceInstance(&services.RegionCountryService{}).(*services.RegionCountryService)
pb.RegisterRegionCountryServiceServer(server, instance) pb.RegisterRegionCountryServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.RegionProvinceService{}).(*services.RegionProvinceService) var instance = this.serviceInstance(&services.RegionProvinceService{}).(*services.RegionProvinceService)
pb.RegisterRegionProvinceServiceServer(server, instance) pb.RegisterRegionProvinceServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.RegionCityService{}).(*services.RegionCityService) var instance = this.serviceInstance(&services.RegionCityService{}).(*services.RegionCityService)
pb.RegisterRegionCityServiceServer(server, instance) pb.RegisterRegionCityServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.RegionProviderService{}).(*services.RegionProviderService) var instance = this.serviceInstance(&services.RegionProviderService{}).(*services.RegionProviderService)
pb.RegisterRegionProviderServiceServer(server, instance) pb.RegisterRegionProviderServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.IPListService{}).(*services.IPListService) var instance = this.serviceInstance(&services.IPListService{}).(*services.IPListService)
pb.RegisterIPListServiceServer(server, instance) pb.RegisterIPListServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.IPItemService{}).(*services.IPItemService) var instance = this.serviceInstance(&services.IPItemService{}).(*services.IPItemService)
pb.RegisterIPItemServiceServer(server, instance) pb.RegisterIPItemServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.LogService{}).(*services.LogService) var instance = this.serviceInstance(&services.LogService{}).(*services.LogService)
pb.RegisterLogServiceServer(server, instance) pb.RegisterLogServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.DNSProviderService{}).(*services.DNSProviderService) var instance = this.serviceInstance(&services.DNSProviderService{}).(*services.DNSProviderService)
pb.RegisterDNSProviderServiceServer(server, instance) pb.RegisterDNSProviderServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.DNSDomainService{}).(*services.DNSDomainService) var instance = this.serviceInstance(&services.DNSDomainService{}).(*services.DNSDomainService)
pb.RegisterDNSDomainServiceServer(server, instance) pb.RegisterDNSDomainServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.DNSService{}).(*services.DNSService) var instance = this.serviceInstance(&services.DNSService{}).(*services.DNSService)
pb.RegisterDNSServiceServer(server, instance) pb.RegisterDNSServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.ACMEUserService{}).(*services.ACMEUserService) var instance = this.serviceInstance(&services.ACMEUserService{}).(*services.ACMEUserService)
pb.RegisterACMEUserServiceServer(server, instance) pb.RegisterACMEUserServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.ACMETaskService{}).(*services.ACMETaskService) var instance = this.serviceInstance(&services.ACMETaskService{}).(*services.ACMETaskService)
pb.RegisterACMETaskServiceServer(server, instance) pb.RegisterACMETaskServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.ACMEAuthenticationService{}).(*services.ACMEAuthenticationService) var instance = this.serviceInstance(&services.ACMEAuthenticationService{}).(*services.ACMEAuthenticationService)
pb.RegisterACMEAuthenticationServiceServer(server, instance) pb.RegisterACMEAuthenticationServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.ACMEProviderService{}).(*services.ACMEProviderService) var instance = this.serviceInstance(&services.ACMEProviderService{}).(*services.ACMEProviderService)
pb.RegisterACMEProviderServiceServer(server, instance) pb.RegisterACMEProviderServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.ACMEProviderAccountService{}).(*services.ACMEProviderAccountService) var instance = this.serviceInstance(&services.ACMEProviderAccountService{}).(*services.ACMEProviderAccountService)
pb.RegisterACMEProviderAccountServiceServer(server, instance) pb.RegisterACMEProviderAccountServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.UserService{}).(*services.UserService) var instance = this.serviceInstance(&services.UserService{}).(*services.UserService)
pb.RegisterUserServiceServer(server, instance) pb.RegisterUserServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.ServerDailyStatService{}).(*services.ServerDailyStatService) var instance = this.serviceInstance(&services.ServerDailyStatService{}).(*services.ServerDailyStatService)
pb.RegisterServerDailyStatServiceServer(server, instance) pb.RegisterServerDailyStatServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.UserBillService{}).(*services.UserBillService) var instance = this.serviceInstance(&services.UserBillService{}).(*services.UserBillService)
pb.RegisterUserBillServiceServer(server, instance) pb.RegisterUserBillServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.ServerBillService{}).(*services.ServerBillService) var instance = this.serviceInstance(&services.ServerBillService{}).(*services.ServerBillService)
pb.RegisterServerBillServiceServer(server, instance) pb.RegisterServerBillServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.UserNodeService{}).(*services.UserNodeService) var instance = this.serviceInstance(&services.UserNodeService{}).(*services.UserNodeService)
pb.RegisterUserNodeServiceServer(server, instance) pb.RegisterUserNodeServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.LoginService{}).(*services.LoginService) var instance = this.serviceInstance(&services.LoginService{}).(*services.LoginService)
pb.RegisterLoginServiceServer(server, instance) pb.RegisterLoginServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.UserAccessKeyService{}).(*services.UserAccessKeyService) var instance = this.serviceInstance(&services.UserAccessKeyService{}).(*services.UserAccessKeyService)
pb.RegisterUserAccessKeyServiceServer(server, instance) pb.RegisterUserAccessKeyServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.SysLockerService{}).(*services.SysLockerService) var instance = this.serviceInstance(&services.SysLockerService{}).(*services.SysLockerService)
pb.RegisterSysLockerServiceServer(server, instance) pb.RegisterSysLockerServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.NodeTaskService{}).(*services.NodeTaskService) var instance = this.serviceInstance(&services.NodeTaskService{}).(*services.NodeTaskService)
pb.RegisterNodeTaskServiceServer(server, instance) pb.RegisterNodeTaskServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.NodeValueService{}).(*services.NodeValueService) var instance = this.serviceInstance(&services.NodeValueService{}).(*services.NodeValueService)
pb.RegisterNodeValueServiceServer(server, instance) pb.RegisterNodeValueServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.DBService{}).(*services.DBService) var instance = this.serviceInstance(&services.DBService{}).(*services.DBService)
pb.RegisterDBServiceServer(server, instance) pb.RegisterDBServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.ServerRegionCityMonthlyStatService{}).(*services.ServerRegionCityMonthlyStatService) var instance = this.serviceInstance(&services.ServerRegionCityMonthlyStatService{}).(*services.ServerRegionCityMonthlyStatService)
pb.RegisterServerRegionCityMonthlyStatServiceServer(server, instance) pb.RegisterServerRegionCityMonthlyStatServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.ServerRegionCountryMonthlyStatService{}).(*services.ServerRegionCountryMonthlyStatService) var instance = this.serviceInstance(&services.ServerRegionCountryMonthlyStatService{}).(*services.ServerRegionCountryMonthlyStatService)
pb.RegisterServerRegionCountryMonthlyStatServiceServer(server, instance) pb.RegisterServerRegionCountryMonthlyStatServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.ServerRegionProvinceMonthlyStatService{}).(*services.ServerRegionProvinceMonthlyStatService) var instance = this.serviceInstance(&services.ServerRegionProvinceMonthlyStatService{}).(*services.ServerRegionProvinceMonthlyStatService)
pb.RegisterServerRegionProvinceMonthlyStatServiceServer(server, instance) pb.RegisterServerRegionProvinceMonthlyStatServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.ServerRegionProviderMonthlyStatService{}).(*services.ServerRegionProviderMonthlyStatService) var instance = this.serviceInstance(&services.ServerRegionProviderMonthlyStatService{}).(*services.ServerRegionProviderMonthlyStatService)
pb.RegisterServerRegionProviderMonthlyStatServiceServer(server, instance) pb.RegisterServerRegionProviderMonthlyStatServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.ServerClientSystemMonthlyStatService{}).(*services.ServerClientSystemMonthlyStatService) var instance = this.serviceInstance(&services.ServerClientSystemMonthlyStatService{}).(*services.ServerClientSystemMonthlyStatService)
pb.RegisterServerClientSystemMonthlyStatServiceServer(server, instance) pb.RegisterServerClientSystemMonthlyStatServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.ServerClientBrowserMonthlyStatService{}).(*services.ServerClientBrowserMonthlyStatService) var instance = this.serviceInstance(&services.ServerClientBrowserMonthlyStatService{}).(*services.ServerClientBrowserMonthlyStatService)
pb.RegisterServerClientBrowserMonthlyStatServiceServer(server, instance) pb.RegisterServerClientBrowserMonthlyStatServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.ServerHTTPFirewallDailyStatService{}).(*services.ServerHTTPFirewallDailyStatService) var instance = this.serviceInstance(&services.ServerHTTPFirewallDailyStatService{}).(*services.ServerHTTPFirewallDailyStatService)
pb.RegisterServerHTTPFirewallDailyStatServiceServer(server, instance) pb.RegisterServerHTTPFirewallDailyStatServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.DNSTaskService{}).(*services.DNSTaskService) var instance = this.serviceInstance(&services.DNSTaskService{}).(*services.DNSTaskService)
pb.RegisterDNSTaskServiceServer(server, instance) pb.RegisterDNSTaskServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.NodeClusterFirewallActionService{}).(*services.NodeClusterFirewallActionService) var instance = this.serviceInstance(&services.NodeClusterFirewallActionService{}).(*services.NodeClusterFirewallActionService)
pb.RegisterNodeClusterFirewallActionServiceServer(server, instance) pb.RegisterNodeClusterFirewallActionServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.MonitorNodeService{}).(*services.MonitorNodeService) var instance = this.serviceInstance(&services.MonitorNodeService{}).(*services.MonitorNodeService)
pb.RegisterMonitorNodeServiceServer(server, instance) pb.RegisterMonitorNodeServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.AuthorityNodeService{}).(*services.AuthorityNodeService) var instance = this.serviceInstance(&services.AuthorityNodeService{}).(*services.AuthorityNodeService)
pb.RegisterAuthorityNodeServiceServer(server, instance) pb.RegisterAuthorityNodeServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.LatestItemService{}).(*services.LatestItemService) var instance = this.serviceInstance(&services.LatestItemService{}).(*services.LatestItemService)
pb.RegisterLatestItemServiceServer(server, instance) pb.RegisterLatestItemServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.NodeThresholdService{}).(*services.NodeThresholdService) var instance = this.serviceInstance(&services.NodeThresholdService{}).(*services.NodeThresholdService)
pb.RegisterNodeThresholdServiceServer(server, instance) pb.RegisterNodeThresholdServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.HTTPFastcgiService{}).(*services.HTTPFastcgiService) var instance = this.serviceInstance(&services.HTTPFastcgiService{}).(*services.HTTPFastcgiService)
pb.RegisterHTTPFastcgiServiceServer(server, instance) pb.RegisterHTTPFastcgiServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&nameservers.NSClusterService{}).(*nameservers.NSClusterService) var instance = this.serviceInstance(&nameservers.NSClusterService{}).(*nameservers.NSClusterService)
pb.RegisterNSClusterServiceServer(server, instance) pb.RegisterNSClusterServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&nameservers.NSNodeService{}).(*nameservers.NSNodeService) var instance = this.serviceInstance(&nameservers.NSNodeService{}).(*nameservers.NSNodeService)
pb.RegisterNSNodeServiceServer(server, instance) pb.RegisterNSNodeServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&nameservers.NSDomainService{}).(*nameservers.NSDomainService) var instance = this.serviceInstance(&nameservers.NSDomainService{}).(*nameservers.NSDomainService)
pb.RegisterNSDomainServiceServer(server, instance) pb.RegisterNSDomainServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&nameservers.NSRecordService{}).(*nameservers.NSRecordService) var instance = this.serviceInstance(&nameservers.NSRecordService{}).(*nameservers.NSRecordService)
pb.RegisterNSRecordServiceServer(server, instance) pb.RegisterNSRecordServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&nameservers.NSRouteService{}).(*nameservers.NSRouteService) var instance = this.serviceInstance(&nameservers.NSRouteService{}).(*nameservers.NSRouteService)
pb.RegisterNSRouteServiceServer(server, instance) pb.RegisterNSRouteServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&nameservers.NSKeyService{}).(*nameservers.NSKeyService) var instance = this.serviceInstance(&nameservers.NSKeyService{}).(*nameservers.NSKeyService)
pb.RegisterNSKeyServiceServer(server, instance) pb.RegisterNSKeyServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&nameservers.NSAccessLogService{}).(*nameservers.NSAccessLogService) var instance = this.serviceInstance(&nameservers.NSAccessLogService{}).(*nameservers.NSAccessLogService)
pb.RegisterNSAccessLogServiceServer(server, instance) pb.RegisterNSAccessLogServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&nameservers.NSRecordHourlyStatService{}).(*nameservers.NSRecordHourlyStatService) var instance = this.serviceInstance(&nameservers.NSRecordHourlyStatService{}).(*nameservers.NSRecordHourlyStatService)
pb.RegisterNSRecordHourlyStatServiceServer(server, instance) pb.RegisterNSRecordHourlyStatServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&nameservers.NSQuestionOptionService{}).(*nameservers.NSQuestionOptionService) var instance = this.serviceInstance(&nameservers.NSQuestionOptionService{}).(*nameservers.NSQuestionOptionService)
pb.RegisterNSQuestionOptionServiceServer(server, instance) pb.RegisterNSQuestionOptionServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&nameservers.NSService{}).(*nameservers.NSService) var instance = this.serviceInstance(&nameservers.NSService{}).(*nameservers.NSService)
pb.RegisterNSServiceServer(server, instance) pb.RegisterNSServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.HTTPAuthPolicyService{}).(*services.HTTPAuthPolicyService) var instance = this.serviceInstance(&services.HTTPAuthPolicyService{}).(*services.HTTPAuthPolicyService)
pb.RegisterHTTPAuthPolicyServiceServer(server, instance) pb.RegisterHTTPAuthPolicyServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.MetricItemService{}).(*services.MetricItemService) var instance = this.serviceInstance(&services.MetricItemService{}).(*services.MetricItemService)
pb.RegisterMetricItemServiceServer(server, instance) pb.RegisterMetricItemServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.NodeClusterMetricItemService{}).(*services.NodeClusterMetricItemService) var instance = this.serviceInstance(&services.NodeClusterMetricItemService{}).(*services.NodeClusterMetricItemService)
pb.RegisterNodeClusterMetricItemServiceServer(server, instance) pb.RegisterNodeClusterMetricItemServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.MetricStatService{}).(*services.MetricStatService) var instance = this.serviceInstance(&services.MetricStatService{}).(*services.MetricStatService)
pb.RegisterMetricStatServiceServer(server, instance) pb.RegisterMetricStatServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.MetricChartService{}).(*services.MetricChartService) var instance = this.serviceInstance(&services.MetricChartService{}).(*services.MetricChartService)
pb.RegisterMetricChartServiceServer(server, instance) pb.RegisterMetricChartServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.ServerStatBoardService{}).(*services.ServerStatBoardService) var instance = this.serviceInstance(&services.ServerStatBoardService{}).(*services.ServerStatBoardService)
pb.RegisterServerStatBoardServiceServer(server, instance) pb.RegisterServerStatBoardServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.ServerStatBoardChartService{}).(*services.ServerStatBoardChartService) var instance = this.serviceInstance(&services.ServerStatBoardChartService{}).(*services.ServerStatBoardChartService)
pb.RegisterServerStatBoardChartServiceServer(server, instance) pb.RegisterServerStatBoardChartServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.PlanService{}).(*services.PlanService) var instance = this.serviceInstance(&services.PlanService{}).(*services.PlanService)
pb.RegisterPlanServiceServer(server, instance) pb.RegisterPlanServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.UserPlanService{}).(*services.UserPlanService) var instance = this.serviceInstance(&services.UserPlanService{}).(*services.UserPlanService)
pb.RegisterUserPlanServiceServer(server, instance) pb.RegisterUserPlanServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.ServerDomainHourlyStatService{}).(*services.ServerDomainHourlyStatService) var instance = this.serviceInstance(&services.ServerDomainHourlyStatService{}).(*services.ServerDomainHourlyStatService)
pb.RegisterServerDomainHourlyStatServiceServer(server, instance) pb.RegisterServerDomainHourlyStatServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.TrafficDailyStatService{}).(*services.TrafficDailyStatService) var instance = this.serviceInstance(&services.TrafficDailyStatService{}).(*services.TrafficDailyStatService)
pb.RegisterTrafficDailyStatServiceServer(server, instance) pb.RegisterTrafficDailyStatServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.HTTPCacheTaskKeyService{}).(*services.HTTPCacheTaskKeyService) var instance = this.serviceInstance(&services.HTTPCacheTaskKeyService{}).(*services.HTTPCacheTaskKeyService)
pb.RegisterHTTPCacheTaskKeyServiceServer(server, instance) pb.RegisterHTTPCacheTaskKeyServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{ {
instance := this.serviceInstance(&services.HTTPCacheTaskService{}).(*services.HTTPCacheTaskService) var instance = this.serviceInstance(&services.HTTPCacheTaskService{}).(*services.HTTPCacheTaskService)
pb.RegisterHTTPCacheTaskServiceServer(server, instance) pb.RegisterHTTPCacheTaskServiceServer(server, instance)
this.rest(instance) this.rest(instance)
} }
{
var instance = this.serviceInstance(&services.ServerBandwidthStatService{}).(*services.ServerBandwidthStatService)
pb.RegisterServerBandwidthStatServiceServer(server, instance)
this.rest(instance)
}
APINodeServicesRegister(this, server) APINodeServicesRegister(this, server)
// TODO check service names // TODO check service names
for serviceName := range server.GetServiceInfo() { for serviceName := range server.GetServiceInfo() {
index := strings.LastIndex(serviceName, ".") var index = strings.LastIndex(serviceName, ".")
if index >= 0 { if index >= 0 {
serviceName = serviceName[index+1:] serviceName = serviceName[index+1:]
} }
@@ -602,7 +608,7 @@ func (this *APINode) rest(instance interface{}) {
defer this.serviceInstanceLocker.Unlock() defer this.serviceInstanceLocker.Unlock()
var name = reflect.TypeOf(instance).String() var name = reflect.TypeOf(instance).String()
index := strings.LastIndex(name, ".") var index = strings.LastIndex(name, ".")
if index >= 0 { if index >= 0 {
name = name[index+1:] name = name[index+1:]
} }
@@ -618,7 +624,7 @@ func (this *APINode) serviceInstance(instance interface{}) interface{} {
this.serviceInstanceLocker.Lock() this.serviceInstanceLocker.Lock()
defer this.serviceInstanceLocker.Unlock() defer this.serviceInstanceLocker.Unlock()
typeName := reflect.TypeOf(instance).String() var typeName = reflect.TypeOf(instance).String()
result, ok := this.serviceInstanceMap[typeName] result, ok := this.serviceInstanceMap[typeName]
if ok { if ok {
return result return result

View File

@@ -0,0 +1,80 @@
// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn .
package services
import (
"context"
"github.com/TeaOSLab/EdgeAPI/internal/db/models/stats"
"github.com/TeaOSLab/EdgeAPI/internal/goman"
"github.com/TeaOSLab/EdgeAPI/internal/remotelogs"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/iwind/TeaGo/Tea"
"github.com/iwind/TeaGo/dbs"
"github.com/iwind/TeaGo/types"
"sync"
"time"
)
var serverBandwidthStatsMap = map[string]*pb.ServerBandwidthStat{} // key => bandwidth
var serverBandwidthStatsLocker = &sync.Mutex{}
func init() {
var ticker = time.NewTicker(5 * time.Minute)
if Tea.IsTesting() {
ticker = time.NewTicker(1 * time.Minute)
}
dbs.OnReadyDone(func() {
goman.New(func() {
for range ticker.C {
func() {
var tx *dbs.Tx
serverBandwidthStatsLocker.Lock()
var m = serverBandwidthStatsMap
serverBandwidthStatsMap = map[string]*pb.ServerBandwidthStat{}
serverBandwidthStatsLocker.Unlock()
for _, stat := range m {
err := stats.SharedServerBandwidthStatDAO.UpdateServerBandwidth(tx, stat.ServerId, stat.Day, stat.TimeAt, stat.Bytes)
if err != nil {
remotelogs.Error("ServerBandwidthStatService", "dump bandwidth stats failed: "+err.Error())
}
}
}()
}
})
})
}
type ServerBandwidthStatService struct {
BaseService
}
// UploadServerBandwidthStats 上传带宽统计
func (this *ServerBandwidthStatService) UploadServerBandwidthStats(ctx context.Context, req *pb.UploadServerBandwidthStatsRequest) (*pb.RPCSuccess, error) {
_, err := this.ValidateNode(ctx)
if err != nil {
return nil, err
}
for _, stat := range req.ServerBandwidthStats {
var key = types.String(stat.ServerId) + "@" + stat.Day + "@" + stat.TimeAt
serverBandwidthStatsLocker.Lock()
oldStat, ok := serverBandwidthStatsMap[key]
if ok {
oldStat.Bytes += stat.Bytes
} else {
serverBandwidthStatsMap[key] = &pb.ServerBandwidthStat{
Id: 0,
ServerId: stat.ServerId,
Day: stat.Day,
TimeAt: stat.TimeAt,
Bytes: stat.Bytes,
}
}
serverBandwidthStatsLocker.Unlock()
}
return this.Success()
}

View File

@@ -9,6 +9,7 @@ import (
"github.com/TeaOSLab/EdgeAPI/internal/db/models/stats" "github.com/TeaOSLab/EdgeAPI/internal/db/models/stats"
"github.com/TeaOSLab/EdgeAPI/internal/errors" "github.com/TeaOSLab/EdgeAPI/internal/errors"
"github.com/TeaOSLab/EdgeAPI/internal/rpc/tasks" "github.com/TeaOSLab/EdgeAPI/internal/rpc/tasks"
"github.com/TeaOSLab/EdgeAPI/internal/utils"
"github.com/TeaOSLab/EdgeCommon/pkg/configutils" "github.com/TeaOSLab/EdgeCommon/pkg/configutils"
"github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs" "github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
@@ -84,7 +85,7 @@ func (this *ServerStatBoardService) ComposeServerStatNodeClusterBoard(ctx contex
result.CountServers = countServers result.CountServers = countServers
// 按日流量统计 // 按日流量统计
dayFrom := timeutil.Format("Ymd", time.Now().AddDate(0, 0, -14)) var dayFrom = timeutil.Format("Ymd", time.Now().AddDate(0, 0, -14))
dailyTrafficStats, err := stats.SharedNodeClusterTrafficDailyStatDAO.FindDailyStats(tx, req.NodeClusterId, dayFrom, timeutil.Format("Ymd")) dailyTrafficStats, err := stats.SharedNodeClusterTrafficDailyStatDAO.FindDailyStats(tx, req.NodeClusterId, dayFrom, timeutil.Format("Ymd"))
if err != nil { if err != nil {
return nil, err return nil, err
@@ -102,8 +103,8 @@ func (this *ServerStatBoardService) ComposeServerStatNodeClusterBoard(ctx contex
} }
// 小时流量统计 // 小时流量统计
hourFrom := timeutil.Format("YmdH", time.Now().Add(-23*time.Hour)) var hourFrom = timeutil.Format("YmdH", time.Now().Add(-23*time.Hour))
hourTo := timeutil.Format("YmdH") var hourTo = timeutil.Format("YmdH")
hourlyTrafficStats, err := stats.SharedNodeTrafficHourlyStatDAO.FindHourlyStatsWithClusterId(tx, req.NodeClusterId, hourFrom, hourTo) hourlyTrafficStats, err := stats.SharedNodeTrafficHourlyStatDAO.FindHourlyStatsWithClusterId(tx, req.NodeClusterId, hourFrom, hourTo)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -304,7 +305,7 @@ func (this *ServerStatBoardService) ComposeServerStatNodeBoard(ctx context.Conte
} }
// 按日流量统计 // 按日流量统计
dayFrom := timeutil.Format("Ymd", time.Now().AddDate(0, 0, -14)) var dayFrom = timeutil.Format("Ymd", time.Now().AddDate(0, 0, -14))
dailyTrafficStats, err := stats.SharedNodeTrafficDailyStatDAO.FindDailyStats(tx, "node", req.NodeId, dayFrom, timeutil.Format("Ymd")) dailyTrafficStats, err := stats.SharedNodeTrafficDailyStatDAO.FindDailyStats(tx, "node", req.NodeId, dayFrom, timeutil.Format("Ymd"))
if err != nil { if err != nil {
return nil, err return nil, err
@@ -322,8 +323,8 @@ func (this *ServerStatBoardService) ComposeServerStatNodeBoard(ctx context.Conte
} }
// 小时流量统计 // 小时流量统计
hourFrom := timeutil.Format("YmdH", time.Now().Add(-23*time.Hour)) var hourFrom = timeutil.Format("YmdH", time.Now().Add(-23*time.Hour))
hourTo := timeutil.Format("YmdH") var hourTo = timeutil.Format("YmdH")
hourlyTrafficStats, err := stats.SharedNodeTrafficHourlyStatDAO.FindHourlyStatsWithNodeId(tx, "node", req.NodeId, hourFrom, hourTo) hourlyTrafficStats, err := stats.SharedNodeTrafficHourlyStatDAO.FindHourlyStatsWithNodeId(tx, "node", req.NodeId, hourFrom, hourTo)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -407,8 +408,45 @@ func (this *ServerStatBoardService) ComposeServerStatBoard(ctx context.Context,
var result = &pb.ComposeServerStatBoardResponse{} var result = &pb.ComposeServerStatBoardResponse{}
var tx = this.NullTx() var tx = this.NullTx()
// 带宽统计
{
var bandwidthMinutes = utils.RangeMinutes(time.Now(), 12, 5)
var bandwidthStatMap = map[string]*pb.ServerBandwidthStat{}
for _, r := range utils.GroupMinuteRanges(bandwidthMinutes) {
bandwidthStats, err := stats.SharedServerBandwidthStatDAO.FindServerStats(tx, req.ServerId, r.Day, r.MinuteFrom, r.MinuteTo)
if err != nil {
return nil, err
}
for _, stat := range bandwidthStats {
bandwidthStatMap[stat.Day+"@"+stat.TimeAt] = &pb.ServerBandwidthStat{
Id: int64(stat.Id),
ServerId: int64(stat.ServerId),
Day: stat.Day,
TimeAt: stat.TimeAt,
Bytes: int64(stat.Bytes),
}
}
}
var pbBandwidthStats = []*pb.ServerBandwidthStat{}
for _, minute := range bandwidthMinutes {
stat, ok := bandwidthStatMap[minute.Day+"@"+minute.Minute]
if ok {
pbBandwidthStats = append(pbBandwidthStats, stat)
} else {
pbBandwidthStats = append(pbBandwidthStats, &pb.ServerBandwidthStat{
Id: 0,
ServerId: req.ServerId,
Day: minute.Day,
TimeAt: minute.Minute,
Bytes: 0,
})
}
}
result.ServerBandwidthStats = pbBandwidthStats
}
// 按日流量统计 // 按日流量统计
dayFrom := timeutil.Format("Ymd", time.Now().AddDate(0, 0, -14)) var dayFrom = timeutil.Format("Ymd", time.Now().AddDate(0, 0, -14))
dailyTrafficStats, err := models.SharedServerDailyStatDAO.FindDailyStats(tx, req.ServerId, dayFrom, timeutil.Format("Ymd")) dailyTrafficStats, err := models.SharedServerDailyStatDAO.FindDailyStats(tx, req.ServerId, dayFrom, timeutil.Format("Ymd"))
if err != nil { if err != nil {
return nil, err return nil, err
@@ -426,8 +464,8 @@ func (this *ServerStatBoardService) ComposeServerStatBoard(ctx context.Context,
} }
// 小时流量统计 // 小时流量统计
hourFrom := timeutil.Format("YmdH", time.Now().Add(-23*time.Hour)) var hourFrom = timeutil.Format("YmdH", time.Now().Add(-23*time.Hour))
hourTo := timeutil.Format("YmdH") var hourTo = timeutil.Format("YmdH")
hourlyTrafficStats, err := models.SharedServerDailyStatDAO.FindHourlyStats(tx, req.ServerId, hourFrom, hourTo) hourlyTrafficStats, err := models.SharedServerDailyStatDAO.FindHourlyStats(tx, req.ServerId, hourFrom, hourTo)
if err != nil { if err != nil {
return nil, err return nil, err

File diff suppressed because one or more lines are too long

View File

@@ -9,6 +9,19 @@ import (
"time" "time"
) )
// 分钟时间点
type timeMinute struct {
Day string
Minute string
}
// 分钟时间范围
type timeMinuteRange struct {
Day string
MinuteFrom string
MinuteTo string
}
// RangeDays 计算日期之间的所有日期格式为YYYYMMDD // RangeDays 计算日期之间的所有日期格式为YYYYMMDD
func RangeDays(dayFrom string, dayTo string) ([]string, error) { func RangeDays(dayFrom string, dayTo string) ([]string, error) {
ok, err := regexp.MatchString(`^\d{8}$`, dayFrom) ok, err := regexp.MatchString(`^\d{8}$`, dayFrom)
@@ -79,15 +92,15 @@ func RangeMonths(dayFrom string, dayTo string) ([]string, error) {
dayFrom, dayTo = dayTo, dayFrom dayFrom, dayTo = dayTo, dayFrom
} }
result := []string{dayFrom[:6]} var result = []string{dayFrom[:6]}
year := types.Int(dayFrom[:4]) var year = types.Int(dayFrom[:4])
month := types.Int(dayFrom[4:6]) var month = types.Int(dayFrom[4:6])
day := types.Int(dayFrom[6:]) var day = types.Int(dayFrom[6:])
t := time.Date(year, time.Month(month), day, 0, 0, 0, 0, time.Local) var t = time.Date(year, time.Month(month), day, 0, 0, 0, 0, time.Local)
for { for {
t = t.AddDate(0, 0, 20) t = t.AddDate(0, 0, 20)
newDay := timeutil.Format("Ymd", t) var newDay = timeutil.Format("Ymd", t)
if newDay <= dayTo { if newDay <= dayTo {
var monthString = newDay[:6] var monthString = newDay[:6]
if !lists.ContainsString(result, monthString) { if !lists.ContainsString(result, monthString) {
@@ -129,17 +142,17 @@ func RangeHours(hourFrom string, hourTo string) ([]string, error) {
} }
// 不能超过N天 // 不能超过N天
maxHours := 100 - 1 // -1 是去掉默认加入的dayFrom var maxHours = 100 - 1 // -1 是去掉默认加入的dayFrom
result := []string{hourFrom} var result = []string{hourFrom}
year := types.Int(hourFrom[:4]) var year = types.Int(hourFrom[:4])
month := types.Int(hourFrom[4:6]) var month = types.Int(hourFrom[4:6])
day := types.Int(hourFrom[6:8]) var day = types.Int(hourFrom[6:8])
hour := types.Int(hourFrom[8:]) var hour = types.Int(hourFrom[8:])
t := time.Date(year, time.Month(month), day, hour, 0, 0, 0, time.Local) var t = time.Date(year, time.Month(month), day, hour, 0, 0, 0, time.Local)
for { for {
t = t.Add(1 * time.Hour) t = t.Add(1 * time.Hour)
newHour := timeutil.Format("YmdH", t) var newHour = timeutil.Format("YmdH", t)
if newHour <= hourTo { if newHour <= hourTo {
result = append(result, newHour) result = append(result, newHour)
} else { } else {
@@ -154,3 +167,56 @@ func RangeHours(hourFrom string, hourTo string) ([]string, error) {
return result, nil return result, nil
} }
// RangeMinutes 计算若干个时间点,返回结果为 [ [day1, minute1], [day2, minute2] ... ]
func RangeMinutes(toTime time.Time, count int, everyMinutes int64) []timeMinute {
var everySeconds = everyMinutes * 60
if everySeconds <= 0 {
everySeconds = 300
}
var result = []timeMinute{}
var fromTime = time.Unix(toTime.Unix()-everySeconds*int64(count-1), 0)
for {
var timestamp = fromTime.Unix() / everySeconds * everySeconds
result = append(result, timeMinute{
Day: timeutil.FormatTime("Ymd", timestamp),
Minute: timeutil.FormatTime("Hi", timestamp),
})
fromTime = time.Unix(fromTime.Unix()+everySeconds, 0)
count--
if count <= 0 {
break
}
}
return result
}
// GroupMinuteRanges 将时间点分组
func GroupMinuteRanges(minutes []timeMinute) []timeMinuteRange {
var result = []*timeMinuteRange{}
var lastDay = ""
var lastRange *timeMinuteRange
for _, minute := range minutes {
if minute.Day != lastDay {
lastDay = minute.Day
lastRange = &timeMinuteRange{
Day: minute.Day,
MinuteFrom: minute.Minute,
MinuteTo: minute.Minute,
}
result = append(result, lastRange)
} else {
if lastRange != nil {
lastRange.MinuteTo = minute.Minute
}
}
}
var finalResult = []timeMinuteRange{}
for _, minutePtr := range result {
finalResult = append(finalResult, *minutePtr)
}
return finalResult
}

View File

@@ -1,9 +1,13 @@
package utils package utils_test
import "testing" import (
"github.com/TeaOSLab/EdgeAPI/internal/utils"
"testing"
"time"
)
func TestRangeDays(t *testing.T) { func TestRangeDays(t *testing.T) {
days, err := RangeDays("20210101", "20210115") days, err := utils.RangeDays("20210101", "20210115")
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
@@ -11,7 +15,7 @@ func TestRangeDays(t *testing.T) {
} }
func TestRangeMonth(t *testing.T) { func TestRangeMonth(t *testing.T) {
days, err := RangeMonths("20200101", "20210115") days, err := utils.RangeMonths("20200101", "20210115")
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
@@ -20,7 +24,7 @@ func TestRangeMonth(t *testing.T) {
func TestRangeHours(t *testing.T) { func TestRangeHours(t *testing.T) {
{ {
hours, err := RangeHours("2021010100", "2021010123") hours, err := utils.RangeHours("2021010100", "2021010123")
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
@@ -28,10 +32,49 @@ func TestRangeHours(t *testing.T) {
} }
{ {
hours, err := RangeHours("2021010105", "2021010112") hours, err := utils.RangeHours("2021010105", "2021010112")
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
t.Log(hours) t.Log(hours)
} }
} }
func TestRangeMinutes(t *testing.T) {
{
var minutes = utils.RangeMinutes(time.Now(), 5, 5)
t.Log(minutes)
}
{
var minutes = utils.RangeMinutes(time.Now(), 5, 3)
t.Log(minutes)
}
{
var now = time.Now()
var hour = now.Hour()
var minute = now.Minute()
now = now.Add(-time.Duration(hour) * time.Hour)
now = now.Add(-time.Duration(minute-7) * time.Minute) // 后一天的 00:07 开始往前计算
var minutes = utils.RangeMinutes(now, 5, 5)
t.Log(minutes)
}
}
func TestGroupMinuteRanges(t *testing.T) {
{
var minutes = utils.GroupMinuteRanges(utils.RangeMinutes(time.Now(), 5, 5))
t.Log(minutes)
}
{
var now = time.Now()
var hour = now.Hour()
var minute = now.Minute()
now = now.Add(-time.Duration(hour) * time.Hour)
now = now.Add(-time.Duration(minute-7) * time.Minute) // 后一天的 00:07 开始往前计算
var minutes = utils.GroupMinuteRanges(utils.RangeMinutes(now, 5, 5))
t.Log(minutes)
}
}