Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions server/api/v1/enter.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"github.com/flipped-aurora/gin-vue-admin/server/api/v1/example"
"github.com/flipped-aurora/gin-vue-admin/server/api/v1/imageregistry"
"github.com/flipped-aurora/gin-vue-admin/server/api/v1/instance"
"github.com/flipped-aurora/gin-vue-admin/server/api/v1/pcdn"
"github.com/flipped-aurora/gin-vue-admin/server/api/v1/product"
"github.com/flipped-aurora/gin-vue-admin/server/api/v1/system"
)
Expand All @@ -18,4 +19,5 @@ type ApiGroup struct {
ComputenodeApiGroup computenode.ApiGroup
ProductApiGroup product.ApiGroup
InstanceApiGroup instance.ApiGroup
PcdnApiGroup pcdn.ApiGroup
}
15 changes: 15 additions & 0 deletions server/api/v1/pcdn/enter.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package pcdn

import "github.com/flipped-aurora/gin-vue-admin/server/service"

type ApiGroup struct {
PcdnNodeApi
PcdnPolicyApi
PcdnDispatchTaskApi
}

var (
pcdnNodeService = service.ServiceGroupApp.PcdnServiceGroup.PcdnNodeService
pcdnPolicyService = service.ServiceGroupApp.PcdnServiceGroup.PcdnPolicyService
pcdnDispatchTaskService = service.ServiceGroupApp.PcdnServiceGroup.PcdnDispatchTaskService
)
26 changes: 26 additions & 0 deletions server/api/v1/pcdn/pcdn_dispatch_task.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package pcdn

import (
"github.com/flipped-aurora/gin-vue-admin/server/global"
"github.com/flipped-aurora/gin-vue-admin/server/model/common/response"
pcdnReq "github.com/flipped-aurora/gin-vue-admin/server/model/pcdn/request"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
)

type PcdnDispatchTaskApi struct{}

func (a *PcdnDispatchTaskApi) GetPcdnDispatchTaskList(c *gin.Context) {
var req pcdnReq.PcdnDispatchTaskSearch
if err := c.ShouldBindQuery(&req); err != nil {
response.FailWithMessage(err.Error(), c)
return
}
list, total, err := pcdnDispatchTaskService.GetPcdnDispatchTaskList(c.Request.Context(), req)
if err != nil {
global.GVA_LOG.Error("获取PCDN调度任务列表失败", zap.Error(err))
response.FailWithMessage("获取PCDN调度任务列表失败:"+err.Error(), c)
return
}
response.OkWithDetailed(response.PageResult{List: list, Total: total, Page: req.Page, PageSize: req.PageSize}, "获取PCDN调度任务列表成功", c)
}
114 changes: 114 additions & 0 deletions server/api/v1/pcdn/pcdn_node.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
package pcdn

import (
"strconv"

"github.com/flipped-aurora/gin-vue-admin/server/global"
"github.com/flipped-aurora/gin-vue-admin/server/model/common/response"
"github.com/flipped-aurora/gin-vue-admin/server/model/pcdn"
pcdnReq "github.com/flipped-aurora/gin-vue-admin/server/model/pcdn/request"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
)

type PcdnNodeApi struct{}

func (a *PcdnNodeApi) CreatePcdnNode(c *gin.Context) {
var req pcdn.PcdnNode
if err := c.ShouldBindJSON(&req); err != nil {
response.FailWithMessage(err.Error(), c)
return
}
if err := pcdnNodeService.CreatePcdnNode(c.Request.Context(), &req); err != nil {
global.GVA_LOG.Error("创建PCDN节点失败", zap.Error(err))
response.FailWithMessage("创建PCDN节点失败:"+err.Error(), c)
return
}
response.OkWithMessage("创建PCDN节点成功", c)
}

func (a *PcdnNodeApi) DeletePcdnNode(c *gin.Context) {
id, err := strconv.ParseUint(c.Query("id"), 10, 64)
if err != nil {
response.FailWithMessage("id参数错误", c)
return
}
if err = pcdnNodeService.DeletePcdnNode(c.Request.Context(), uint(id)); err != nil {
global.GVA_LOG.Error("删除PCDN节点失败", zap.Error(err))
response.FailWithMessage("删除PCDN节点失败:"+err.Error(), c)
return
}
response.OkWithMessage("删除PCDN节点成功", c)
}

func (a *PcdnNodeApi) UpdatePcdnNode(c *gin.Context) {
var req pcdn.PcdnNode
if err := c.ShouldBindJSON(&req); err != nil {
response.FailWithMessage(err.Error(), c)
return
}
if err := pcdnNodeService.UpdatePcdnNode(c.Request.Context(), req); err != nil {
global.GVA_LOG.Error("更新PCDN节点失败", zap.Error(err))
response.FailWithMessage("更新PCDN节点失败:"+err.Error(), c)
return
}
response.OkWithMessage("更新PCDN节点成功", c)
}

func (a *PcdnNodeApi) FindPcdnNode(c *gin.Context) {
id, err := strconv.ParseUint(c.Query("id"), 10, 64)
if err != nil {
response.FailWithMessage("id参数错误", c)
return
}
ret, err := pcdnNodeService.GetPcdnNode(c.Request.Context(), uint(id))
if err != nil {
global.GVA_LOG.Error("查询PCDN节点失败", zap.Error(err))
response.FailWithMessage("查询PCDN节点失败:"+err.Error(), c)
return
}
response.OkWithData(ret, c)
}

func (a *PcdnNodeApi) GetPcdnNodeList(c *gin.Context) {
var req pcdnReq.PcdnNodeSearch
if err := c.ShouldBindQuery(&req); err != nil {
response.FailWithMessage(err.Error(), c)
return
}
list, total, err := pcdnNodeService.GetPcdnNodeList(c.Request.Context(), req)
if err != nil {
global.GVA_LOG.Error("获取PCDN节点列表失败", zap.Error(err))
response.FailWithMessage("获取PCDN节点列表失败:"+err.Error(), c)
return
}
response.OkWithDetailed(response.PageResult{List: list, Total: total, Page: req.Page, PageSize: req.PageSize}, "获取PCDN节点列表成功", c)
}

func (a *PcdnNodeApi) SwitchPcdnNodeOnline(c *gin.Context) {
var req pcdnReq.PcdnNodeOnlineRequest
if err := c.ShouldBindJSON(&req); err != nil {
response.FailWithMessage(err.Error(), c)
return
}
if err := pcdnNodeService.SwitchOnline(c.Request.Context(), req); err != nil {
global.GVA_LOG.Error("切换PCDN节点上下线失败", zap.Error(err))
response.FailWithMessage("切换PCDN节点上下线失败:"+err.Error(), c)
return
}
response.OkWithMessage("切换PCDN节点上下线成功", c)
}

func (a *PcdnNodeApi) UpdatePcdnNodeWeight(c *gin.Context) {
var req pcdnReq.PcdnNodeWeightRequest
if err := c.ShouldBindJSON(&req); err != nil {
response.FailWithMessage(err.Error(), c)
return
}
if err := pcdnNodeService.UpdateWeight(c.Request.Context(), req); err != nil {
global.GVA_LOG.Error("调整PCDN节点权重失败", zap.Error(err))
response.FailWithMessage("调整PCDN节点权重失败:"+err.Error(), c)
return
}
response.OkWithMessage("调整PCDN节点权重成功", c)
}
114 changes: 114 additions & 0 deletions server/api/v1/pcdn/pcdn_policy.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
package pcdn

import (
"strconv"

"github.com/flipped-aurora/gin-vue-admin/server/global"
"github.com/flipped-aurora/gin-vue-admin/server/model/common/response"
"github.com/flipped-aurora/gin-vue-admin/server/model/pcdn"
pcdnReq "github.com/flipped-aurora/gin-vue-admin/server/model/pcdn/request"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
)

type PcdnPolicyApi struct{}

func (a *PcdnPolicyApi) CreatePcdnPolicy(c *gin.Context) {
var req pcdn.PcdnPolicy
if err := c.ShouldBindJSON(&req); err != nil {
response.FailWithMessage(err.Error(), c)
return
}
if err := pcdnPolicyService.CreatePcdnPolicy(c.Request.Context(), &req); err != nil {
global.GVA_LOG.Error("创建PCDN策略失败", zap.Error(err))
response.FailWithMessage("创建PCDN策略失败:"+err.Error(), c)
return
}
response.OkWithMessage("创建PCDN策略成功", c)
}

func (a *PcdnPolicyApi) DeletePcdnPolicy(c *gin.Context) {
id, err := strconv.ParseUint(c.Query("id"), 10, 64)
if err != nil {
response.FailWithMessage("id参数错误", c)
return
}
if err = pcdnPolicyService.DeletePcdnPolicy(c.Request.Context(), uint(id)); err != nil {
global.GVA_LOG.Error("删除PCDN策略失败", zap.Error(err))
response.FailWithMessage("删除PCDN策略失败:"+err.Error(), c)
return
}
response.OkWithMessage("删除PCDN策略成功", c)
}

func (a *PcdnPolicyApi) UpdatePcdnPolicy(c *gin.Context) {
var req pcdn.PcdnPolicy
if err := c.ShouldBindJSON(&req); err != nil {
response.FailWithMessage(err.Error(), c)
return
}
if err := pcdnPolicyService.UpdatePcdnPolicy(c.Request.Context(), req); err != nil {
global.GVA_LOG.Error("更新PCDN策略失败", zap.Error(err))
response.FailWithMessage("更新PCDN策略失败:"+err.Error(), c)
return
}
response.OkWithMessage("更新PCDN策略成功", c)
}

func (a *PcdnPolicyApi) FindPcdnPolicy(c *gin.Context) {
id, err := strconv.ParseUint(c.Query("id"), 10, 64)
if err != nil {
response.FailWithMessage("id参数错误", c)
return
}
ret, err := pcdnPolicyService.GetPcdnPolicy(c.Request.Context(), uint(id))
if err != nil {
global.GVA_LOG.Error("查询PCDN策略失败", zap.Error(err))
response.FailWithMessage("查询PCDN策略失败:"+err.Error(), c)
return
}
response.OkWithData(ret, c)
}

func (a *PcdnPolicyApi) GetPcdnPolicyList(c *gin.Context) {
var req pcdnReq.PcdnPolicySearch
if err := c.ShouldBindQuery(&req); err != nil {
response.FailWithMessage(err.Error(), c)
return
}
list, total, err := pcdnPolicyService.GetPcdnPolicyList(c.Request.Context(), req)
if err != nil {
global.GVA_LOG.Error("获取PCDN策略列表失败", zap.Error(err))
response.FailWithMessage("获取PCDN策略列表失败:"+err.Error(), c)
return
}
response.OkWithDetailed(response.PageResult{List: list, Total: total, Page: req.Page, PageSize: req.PageSize}, "获取PCDN策略列表成功", c)
}

func (a *PcdnPolicyApi) GrayReleasePcdnPolicy(c *gin.Context) {
var req pcdnReq.PcdnPolicyGrayReleaseRequest
if err := c.ShouldBindJSON(&req); err != nil {
response.FailWithMessage(err.Error(), c)
return
}
if err := pcdnPolicyService.GrayRelease(c.Request.Context(), req); err != nil {
global.GVA_LOG.Error("PCDN策略灰度发布失败", zap.Error(err))
response.FailWithMessage("PCDN策略灰度发布失败:"+err.Error(), c)
return
}
response.OkWithMessage("PCDN策略灰度发布成功", c)
}

func (a *PcdnPolicyApi) SwitchPcdnPolicy(c *gin.Context) {
var req pcdnReq.PcdnPolicySwitchRequest
if err := c.ShouldBindJSON(&req); err != nil {
response.FailWithMessage(err.Error(), c)
return
}
if err := pcdnPolicyService.SwitchPolicy(c.Request.Context(), req); err != nil {
global.GVA_LOG.Error("PCDN策略启停失败", zap.Error(err))
response.FailWithMessage("PCDN策略启停失败:"+err.Error(), c)
return
}
response.OkWithMessage("PCDN策略启停成功", c)
}
3 changes: 2 additions & 1 deletion server/initialize/gorm_biz.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,13 @@ import (
"github.com/flipped-aurora/gin-vue-admin/server/model/computenode"
"github.com/flipped-aurora/gin-vue-admin/server/model/imageregistry"
"github.com/flipped-aurora/gin-vue-admin/server/model/instance"
"github.com/flipped-aurora/gin-vue-admin/server/model/pcdn"
"github.com/flipped-aurora/gin-vue-admin/server/model/product"
)

func bizModel() error {
db := global.GVA_DB
err := db.AutoMigrate(imageregistry.ImageRegistry{}, computenode.ComputeNode{}, product.ProductSpec{}, instance.Instance{})
err := db.AutoMigrate(imageregistry.ImageRegistry{}, computenode.ComputeNode{}, product.ProductSpec{}, instance.Instance{}, pcdn.PcdnNode{}, pcdn.PcdnPolicy{}, pcdn.PcdnDispatchTask{})
if err != nil {
return err
}
Expand Down
4 changes: 4 additions & 0 deletions server/initialize/router_biz.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,8 @@ func initBizRouter(routers ...*gin.RouterGroup) {
instanceRouter := router.RouterGroupApp.Instance
instanceRouter.InitInstanceRouter(privateGroup, publicGroup)
}
{
pcdnRouter := router.RouterGroupApp.Pcdn
pcdnRouter.InitPcdnRouter(privateGroup)
}
}
18 changes: 18 additions & 0 deletions server/model/pcdn/dispatch_task.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package pcdn

import "github.com/flipped-aurora/gin-vue-admin/server/global"

// PcdnDispatchTask PCDN调度任务
type PcdnDispatchTask struct {
global.GVA_MODEL
TraceID string `json:"traceId" form:"traceId" gorm:"column:trace_id;size:128;index;comment:追踪ID"`
Status string `json:"status" form:"status" gorm:"column:status;size:32;index;comment:任务状态"`
NodeID uint `json:"nodeId" form:"nodeId" gorm:"column:node_id;comment:节点ID"`
PolicyID uint `json:"policyId" form:"policyId" gorm:"column:policy_id;comment:策略ID"`
RequestURI string `json:"requestUri" form:"requestUri" gorm:"column:request_uri;size:255;comment:请求路径"`
Result string `json:"result" form:"result" gorm:"column:result;type:text;comment:执行结果"`
}

func (PcdnDispatchTask) TableName() string {
return "pcdn_dispatch_task"
}
19 changes: 19 additions & 0 deletions server/model/pcdn/node.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package pcdn

import "github.com/flipped-aurora/gin-vue-admin/server/global"

// PcdnNode PCDN节点
type PcdnNode struct {
global.GVA_MODEL
Name string `json:"name" form:"name" gorm:"column:name;size:128;comment:节点名称" binding:"required"`
Region string `json:"region" form:"region" gorm:"column:region;size:128;comment:节点区域"`
Address string `json:"address" form:"address" gorm:"column:address;size:255;comment:节点地址" binding:"required"`
Weight int `json:"weight" form:"weight" gorm:"column:weight;default:100;comment:节点权重"`
Online bool `json:"online" form:"online" gorm:"column:online;default:true;comment:上下线状态"`
Status string `json:"status" form:"status" gorm:"column:status;size:32;default:'active';comment:节点状态"`
Remark string `json:"remark" form:"remark" gorm:"column:remark;size:512;comment:备注"`
}

func (PcdnNode) TableName() string {
return "pcdn_node"
}
19 changes: 19 additions & 0 deletions server/model/pcdn/policy.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package pcdn

import "github.com/flipped-aurora/gin-vue-admin/server/global"

// PcdnPolicy PCDN策略
type PcdnPolicy struct {
global.GVA_MODEL
Name string `json:"name" form:"name" gorm:"column:name;size:128;comment:策略名称" binding:"required"`
Template string `json:"template" form:"template" gorm:"column:template;type:text;comment:策略模板" binding:"required"`
GrayPercent int `json:"grayPercent" form:"grayPercent" gorm:"column:gray_percent;default:0;comment:灰度比例"`
Enabled bool `json:"enabled" form:"enabled" gorm:"column:enabled;default:false;comment:是否启用"`
Published bool `json:"published" form:"published" gorm:"column:published;default:false;comment:是否已发布"`
Version string `json:"version" form:"version" gorm:"column:version;size:64;comment:版本"`
PublishedNote string `json:"publishedNote" form:"publishedNote" gorm:"column:published_note;size:255;comment:发布说明"`
}

func (PcdnPolicy) TableName() string {
return "pcdn_policy"
}
Loading
Loading