mirror of
https://github.com/TeaOSLab/EdgeCommon.git
synced 2025-11-03 12:20:27 +08:00
套餐可以设置带宽限制
This commit is contained in:
@@ -2,11 +2,22 @@
|
||||
|
||||
package serverconfigs
|
||||
|
||||
import "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
|
||||
|
||||
type PlanConfig struct {
|
||||
Id int64 `yaml:"id" json:"id"`
|
||||
Name string `yaml:"name" json:"name"`
|
||||
|
||||
TrafficLimit *TrafficLimitConfig `yaml:"trafficLimit" json:"trafficLimit"`
|
||||
BandwidthLimitPerNode *shared.BitSizeCapacity `yaml:"bandwidthLimitPerNode" json:"bandwidthLimitPerNode"`
|
||||
}
|
||||
|
||||
func (this *PlanConfig) Init() error {
|
||||
if this.TrafficLimit != nil {
|
||||
err := this.TrafficLimit.Init()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -256,9 +256,7 @@ func (this *ServerConfig) Init(ctx context.Context) (results []error) {
|
||||
results = append(results, err)
|
||||
}
|
||||
|
||||
if this.UserPlan.Plan != nil {
|
||||
this.planId = this.UserPlan.Plan.Id
|
||||
}
|
||||
this.planId = this.UserPlan.PlanId
|
||||
}
|
||||
|
||||
// UAM
|
||||
|
||||
77
pkg/serverconfigs/shared/bit_size_capacity.go
Normal file
77
pkg/serverconfigs/shared/bit_size_capacity.go
Normal file
@@ -0,0 +1,77 @@
|
||||
package shared
|
||||
|
||||
import "encoding/json"
|
||||
|
||||
type BitSizeCapacityUnit = string
|
||||
|
||||
const (
|
||||
BitSizeCapacityUnitB BitSizeCapacityUnit = "b"
|
||||
BitSizeCapacityUnitKB BitSizeCapacityUnit = "kb"
|
||||
BitSizeCapacityUnitMB BitSizeCapacityUnit = "mb"
|
||||
BitSizeCapacityUnitGB BitSizeCapacityUnit = "gb"
|
||||
BitSizeCapacityUnitTB BitSizeCapacityUnit = "tb"
|
||||
BitSizeCapacityUnitPB BitSizeCapacityUnit = "pb"
|
||||
BitSizeCapacityUnitEB BitSizeCapacityUnit = "eb"
|
||||
//BitSizeCapacityUnitZB BitSizeCapacityUnit = "zb" // zb和yb超出int64范围,暂不支持
|
||||
//BitSizeCapacityUnitYB BitSizeCapacityUnit = "yb"
|
||||
)
|
||||
|
||||
type BitSizeCapacity struct {
|
||||
Count int64 `json:"count" yaml:"count"`
|
||||
Unit BitSizeCapacityUnit `json:"unit" yaml:"unit"`
|
||||
}
|
||||
|
||||
func NewBitSizeCapacity(count int64, unit BitSizeCapacityUnit) *BitSizeCapacity {
|
||||
return &BitSizeCapacity{
|
||||
Count: count,
|
||||
Unit: unit,
|
||||
}
|
||||
}
|
||||
|
||||
func DecodeBitSizeCapacityJSON(sizeCapacityJSON []byte) (*BitSizeCapacity, error) {
|
||||
var capacity = &BitSizeCapacity{}
|
||||
err := json.Unmarshal(sizeCapacityJSON, capacity)
|
||||
return capacity, err
|
||||
}
|
||||
|
||||
func (this *BitSizeCapacity) Bits() int64 {
|
||||
if this.Count < 0 {
|
||||
return -1
|
||||
}
|
||||
switch this.Unit {
|
||||
case BitSizeCapacityUnitB:
|
||||
return this.Count
|
||||
case BitSizeCapacityUnitKB:
|
||||
return this.Count * this.pow(1)
|
||||
case BitSizeCapacityUnitMB:
|
||||
return this.Count * this.pow(2)
|
||||
case BitSizeCapacityUnitGB:
|
||||
return this.Count * this.pow(3)
|
||||
case BitSizeCapacityUnitTB:
|
||||
return this.Count * this.pow(4)
|
||||
case BitSizeCapacityUnitPB:
|
||||
return this.Count * this.pow(5)
|
||||
case BitSizeCapacityUnitEB:
|
||||
return this.Count * this.pow(6)
|
||||
default:
|
||||
return this.Count
|
||||
}
|
||||
}
|
||||
|
||||
func (this *BitSizeCapacity) IsNotEmpty() bool {
|
||||
return this.Count > 0
|
||||
}
|
||||
|
||||
func (this *BitSizeCapacity) AsJSON() ([]byte, error) {
|
||||
return json.Marshal(this)
|
||||
}
|
||||
|
||||
func (this *BitSizeCapacity) pow(n int) int64 {
|
||||
if n <= 0 {
|
||||
return 1
|
||||
}
|
||||
if n == 1 {
|
||||
return 1024 // TODO 考虑是否使用1000进制
|
||||
}
|
||||
return this.pow(n-1) * 1024
|
||||
}
|
||||
27
pkg/serverconfigs/shared/bit_size_capacity_test.go
Normal file
27
pkg/serverconfigs/shared/bit_size_capacity_test.go
Normal file
@@ -0,0 +1,27 @@
|
||||
// Copyright 2024 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn .
|
||||
|
||||
package shared_test
|
||||
|
||||
import (
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestBitSizeCapacity_Bits(t *testing.T) {
|
||||
{
|
||||
var capacity = shared.NewBitSizeCapacity(1, shared.BitSizeCapacityUnitB)
|
||||
t.Log(capacity.Bits())
|
||||
}
|
||||
{
|
||||
var capacity = shared.NewBitSizeCapacity(2, shared.BitSizeCapacityUnitKB)
|
||||
t.Log(capacity.Bits())
|
||||
}
|
||||
{
|
||||
var capacity = shared.NewBitSizeCapacity(3, shared.BitSizeCapacityUnitMB)
|
||||
t.Log(capacity.Bits())
|
||||
}
|
||||
{
|
||||
var capacity = shared.NewBitSizeCapacity(4, shared.BitSizeCapacityUnitGB)
|
||||
t.Log(capacity.Bits())
|
||||
}
|
||||
}
|
||||
@@ -29,6 +29,10 @@ type TrafficLimitConfig struct {
|
||||
NoticePageBody string `yaml:"noticePageBody" json:"noticePageBody"` // 超出限制时的提醒,支持请求变量
|
||||
}
|
||||
|
||||
func (this *TrafficLimitConfig) Init() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// DailyBytes 每天限制
|
||||
// 不使用Init()来初始化数据,是为了让其他地方不经过Init()也能得到计算值
|
||||
func (this *TrafficLimitConfig) DailyBytes() int64 {
|
||||
|
||||
@@ -20,20 +20,13 @@ const DefaultPlanExpireNoticePageBody = `<!DOCTYPE html>
|
||||
|
||||
// UserPlanConfig 用户套餐配置
|
||||
type UserPlanConfig struct {
|
||||
Id int64 `yaml:"id" json:"id"` // 用户套餐ID
|
||||
DayTo string `yaml:"dayTo" json:"dayTo"` // 有效期
|
||||
|
||||
Plan *PlanConfig `yaml:"plan" json:"plan"`
|
||||
Id int64 `yaml:"id" json:"id"` // 用户套餐ID
|
||||
DayTo string `yaml:"dayTo" json:"dayTo"` // 有效期
|
||||
PlanId int64 `yaml:"planId" json:"planId"` // 套餐定义ID
|
||||
}
|
||||
|
||||
// Init 初始化
|
||||
func (this *UserPlanConfig) Init() error {
|
||||
if this.Plan != nil {
|
||||
err := this.Plan.Init()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user