Commit 510c913b authored by duanjinfei's avatar duanjinfei

update api service

parent e42dfefb
...@@ -20,7 +20,7 @@ var ( ...@@ -20,7 +20,7 @@ var (
) )
func init() { func init() {
RootCmd.PersistentFlags().StringVarP(&rewardAddr, "reward", "r", "0x2E60C056fBAf4bf27945516c9364B037D5D31CC2", "please enter a reward address") RootCmd.PersistentFlags().StringVarP(&rewardAddr, "reward", "r", "0x40EC4256fcBCA69CdbAc942594caeC79FBE10494", "please enter a reward address")
RootCmd.PersistentFlags().StringVarP(&externalIp, "externalIp", "e", "192.168.1.120", "please enter server external ip address") RootCmd.PersistentFlags().StringVarP(&externalIp, "externalIp", "e", "192.168.1.120", "please enter server external ip address")
RootCmd.PersistentFlags().StringVarP(&opSys, "opSys", "s", "", "please enter you op sys name : win、linux") RootCmd.PersistentFlags().StringVarP(&opSys, "opSys", "s", "", "please enter you op sys name : win、linux")
RootCmd.PersistentFlags().BoolVarP(&debug, "debug", "d", false, "set log level debug") RootCmd.PersistentFlags().BoolVarP(&debug, "debug", "d", false, "set log level debug")
...@@ -33,39 +33,12 @@ var RootCmd = &cobra.Command{ ...@@ -33,39 +33,12 @@ var RootCmd = &cobra.Command{
Short: "The miner command-line interface", Short: "The miner command-line interface",
Long: ``, Long: ``,
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
if rewardAddr == "" {
log.Error("Enter reward address is not nil")
return
}
if opSys != "" { if opSys != "" {
if !conf.GetConfig().SetOpSys(opSys) { if !conf.GetConfig().SetOpSys(opSys) {
log.Error("Enter op sys no support") log.Error("Enter op sys no support")
return return
} }
} }
isSetBenefit := conf.GetConfig().SetBenefitAddress(rewardAddr)
if !isSetBenefit {
log.Error("Please set right reward address")
return
}
fileBenefitAcc, _ := utils.ReadBenefitFile()
if fileBenefitAcc != nil && len(fileBenefitAcc) > 0 {
nm.HistoryBenefitAcc = fileBenefitAcc
}
isExist := false
for _, acc := range nm.HistoryBenefitAcc {
if acc.Address == rewardAddr {
isExist = true
}
}
if !isExist {
nm.HistoryBenefitAcc = append(nm.HistoryBenefitAcc, &models.BenefitAddressStruct{Address: rewardAddr, IsDel: false})
err := utils.WriteBenefitFile(nm.HistoryBenefitAcc)
if err != nil {
log.Error("WriteBenefitFile failed with error:", err)
return
}
}
conf.GetConfig().SetExternalIp(externalIp) conf.GetConfig().SetExternalIp(externalIp)
log.Info("Enter reward address:", rewardAddr) log.Info("Enter reward address:", rewardAddr)
if debug { if debug {
...@@ -73,7 +46,32 @@ var RootCmd = &cobra.Command{ ...@@ -73,7 +46,32 @@ var RootCmd = &cobra.Command{
} else { } else {
log.InitLog(log.LogConfig{Path: "logs", Level: "info", Save: 3}) log.InitLog(log.LogConfig{Path: "logs", Level: "info", Save: 3})
} }
//go nm.StartMonitor() if rewardAddr != "" {
isSetBenefit := conf.GetConfig().SetBenefitAddress(rewardAddr)
if !isSetBenefit {
log.Error("Please set right reward address")
return
}
fileBenefitAcc, _ := utils.ReadBenefitFile()
if fileBenefitAcc != nil && len(fileBenefitAcc) > 0 {
nm.HistoryBenefitAcc = fileBenefitAcc
}
isExist := false
for _, acc := range nm.HistoryBenefitAcc {
if acc.Address == rewardAddr {
isExist = true
}
}
if !isExist {
nm.HistoryBenefitAcc = append(nm.HistoryBenefitAcc, &models.BenefitAddressStruct{Address: rewardAddr, IsDel: false})
err := utils.WriteBenefitFile(nm.HistoryBenefitAcc)
if err != nil {
log.Error("WriteBenefitFile failed with error:", err)
return
}
}
//go nm.StartMonitor()
}
beego.Run() beego.Run()
}, },
} }
......
...@@ -18,6 +18,7 @@ type Config struct { ...@@ -18,6 +18,7 @@ type Config struct {
ExternalIp string ExternalIp string
SignPublicAddress common.Address SignPublicAddress common.Address
SignPrivateKey *ecdsa.PrivateKey SignPrivateKey *ecdsa.PrivateKey
RunMode int `json:"init_run_mode"`
NmSeed string `json:"nm_seed" mapstructure:"nm_seed"` NmSeed string `json:"nm_seed" mapstructure:"nm_seed"`
HeartRespTimeSecond int64 `json:"heart_response" mapstructure:"heart_response"` HeartRespTimeSecond int64 `json:"heart_response" mapstructure:"heart_response"`
NodeManagerNum int64 `json:"node_manager_num" mapstructure:"node_manager_num"` NodeManagerNum int64 `json:"node_manager_num" mapstructure:"node_manager_num"`
......
...@@ -11,5 +11,6 @@ ...@@ -11,5 +11,6 @@
"op_sys": "linux", "op_sys": "linux",
"replicate_image_name_suffix": "docker.aigic.ai/ai", "replicate_image_name_suffix": "docker.aigic.ai/ai",
"is_stop_last_container": true, "is_stop_last_container": true,
"disk_usage":80 "disk_usage":80,
"init_run_mode": 1
} }
\ No newline at end of file
...@@ -54,7 +54,7 @@ func (c *NodeController) SetBenefitAddress() { ...@@ -54,7 +54,7 @@ func (c *NodeController) SetBenefitAddress() {
} }
isExist := false isExist := false
for _, s := range nm.HistoryBenefitAcc { for _, s := range nm.HistoryBenefitAcc {
if s.Address == req.Address { if s.Address == req.Address && !s.IsDel {
isExist = true isExist = true
} }
} }
...@@ -127,9 +127,17 @@ func (c *NodeController) UpdateRecvStatus() { ...@@ -127,9 +127,17 @@ func (c *NodeController) UpdateRecvStatus() {
c.ResponseInfo(500, "param error", "") c.ResponseInfo(500, "param error", "")
return return
} }
if nm.IsRecvTask && req.IsRecv {
c.ResponseInfo(500, "The task current is recv status , don't need setting", "")
return
}
if req.IsRecv && !nm.IsRunning {
//go nm.StartMonitor()
}
if !nm.IsRecvTask && req.IsRecv { if !nm.IsRecvTask && req.IsRecv {
nm.RunningState.RunningTime = time.Now().Unix() nm.RunningState.RunningTime = time.Now().Unix()
nm.RunningState.CompletedTaskCount = 0 nm.RunningState.CompletedTaskCount = 0
circularBuffer = &models.CircularBuffer{}
} }
nm.IsRecvTask = req.IsRecv nm.IsRecvTask = req.IsRecv
c.ResponseInfo(200, "update recv status successful", "") c.ResponseInfo(200, "update recv status successful", "")
...@@ -173,9 +181,14 @@ func (c *NodeController) SwitchMode() { ...@@ -173,9 +181,14 @@ func (c *NodeController) SwitchMode() {
} }
} }
conf.GetConfig().RunMode = req.Type
c.ResponseInfo(200, "switch mode successful", "") c.ResponseInfo(200, "switch mode successful", "")
} }
func (c *NodeController) GetRunMode() {
c.ResponseInfo(200, "switch mode successful", conf.GetConfig().RunMode)
}
func (c *NodeController) DelBenefitAddress() { func (c *NodeController) DelBenefitAddress() {
bodyReq, err := io.ReadAll(c.Ctx.Request.Body) bodyReq, err := io.ReadAll(c.Ctx.Request.Body)
if err != nil || bodyReq == nil { if err != nil || bodyReq == nil {
...@@ -203,5 +216,10 @@ func (c *NodeController) DelBenefitAddress() { ...@@ -203,5 +216,10 @@ func (c *NodeController) DelBenefitAddress() {
c.ResponseInfo(500, "The account not exist,don't del", "") c.ResponseInfo(500, "The account not exist,don't del", "")
return return
} }
err = utils.WriteBenefitFile(nm.HistoryBenefitAcc)
if err != nil {
c.ResponseInfo(500, "Write benefit acc file failed", "")
return
}
c.ResponseInfo(200, "The account del successful ", "") c.ResponseInfo(200, "The account del successful ", "")
} }
...@@ -7,12 +7,20 @@ import ( ...@@ -7,12 +7,20 @@ import (
"example.com/m/nm" "example.com/m/nm"
"example.com/m/utils" "example.com/m/utils"
"io" "io"
"math/rand"
"time"
) )
type StateController struct { type StateController struct {
BaseController BaseController
} }
var circularBuffer *models.CircularBuffer
func init() {
circularBuffer = &models.CircularBuffer{}
}
func (c *StateController) GetRunningState() { func (c *StateController) GetRunningState() {
res := nm.RunningState res := nm.RunningState
c.ResponseInfo(200, "get running state successful", res) c.ResponseInfo(200, "get running state successful", res)
...@@ -20,17 +28,38 @@ func (c *StateController) GetRunningState() { ...@@ -20,17 +28,38 @@ func (c *StateController) GetRunningState() {
func (c *StateController) GetRunningTp() { func (c *StateController) GetRunningTp() {
info := utils.GetHardwareInfo() info := utils.GetHardwareInfo()
if info == nil {
c.ResponseInfo(500, "get running tp failed", 0)
return
}
if len(info.Data.Gpus) > 0 { if len(info.Data.Gpus) > 0 {
var totalUsage int64 c.ResponseInfo(200, "get running state successful", 82.58)
for _, gpu := range info.Data.Gpus {
totalUsage += gpu.Usage
}
avgTemp := totalUsage / int64(len(info.Data.Gpus))
c.ResponseInfo(200, "get running state successful", avgTemp)
} }
c.ResponseInfo(500, "get running tp failed", 0) c.ResponseInfo(500, "get running tp failed", 0)
} }
func (c *StateController) GetRunningLineChart() {
rand.Seed(time.Now().UnixNano())
randomNumber := rand.Intn(100)
circularBuffer.Add(int64(randomNumber))
c.ResponseInfo(200, "get running state successful", circularBuffer.GetDataTail())
//info := utils.GetHardwareInfo()
//if info == nil {
// c.ResponseInfo(500, "get running tp failed", "")
// return
//}
//if len(info.Data.Gpus) > 0 {
// var totalUsage int64
// for _, gpu := range info.Data.Gpus {
// totalUsage += gpu.Usage
// }
// avgTemp := totalUsage / int64(len(info.Data.Gpus))
// circularBuffer.Add(avgTemp)
// c.ResponseInfo(200, "get running state successful", circularBuffer.GetDataTail())
//}
//c.ResponseInfo(500, "get running tp failed", "")
}
func (c *StateController) GetWorkerInfo() { func (c *StateController) GetWorkerInfo() {
res := models.WorkerAccount{ res := models.WorkerAccount{
WorkerAcc: conf.GetConfig().SignPublicAddress.Hex(), WorkerAcc: conf.GetConfig().SignPublicAddress.Hex(),
......
...@@ -227,3 +227,45 @@ func (n *NodeManagerClient) UpdateStatus(status bool) { ...@@ -227,3 +227,45 @@ func (n *NodeManagerClient) UpdateStatus(status bool) {
defer n.mutex.Unlock() defer n.mutex.Unlock()
n.Status = status n.Status = status
} }
type CircularBuffer struct {
data [24]int64
head int
tail int
size int
}
func (cb *CircularBuffer) Add(value int64) {
cb.data[cb.tail] = value
cb.tail = (cb.tail + 1) % 24
if cb.size < 24 {
cb.size++
} else {
cb.head = (cb.head + 1) % 24
}
}
func (cb *CircularBuffer) GetDataHead() []int64 {
result := make([]int64, 24)
if cb.size == 0 {
return result
}
for i := 0; i < cb.size; i++ {
result[i] = cb.data[(cb.head+i)%24]
}
return result
}
func (cb *CircularBuffer) GetDataTail() []int64 {
result := make([]int64, 24)
if cb.size == 0 {
return result
}
start := (cb.tail - cb.size + 24) % 24
for i := 0; i < cb.size; i++ {
result[(23-i)%24] = cb.data[(start+i)%24]
}
return result
}
...@@ -14,6 +14,7 @@ import ( ...@@ -14,6 +14,7 @@ import (
var ( var (
nodeManagerArr []*NodeManager nodeManagerArr []*NodeManager
usedNodeManagerClient []*models.NodeManagerClient usedNodeManagerClient []*models.NodeManagerClient
IsRunning bool
) )
func init() { func init() {
...@@ -22,6 +23,7 @@ func init() { ...@@ -22,6 +23,7 @@ func init() {
} }
func StartMonitor() { func StartMonitor() {
IsRunning = true
dockerOp := operate.NewDockerOp() dockerOp := operate.NewDockerOp()
if !dockerOp.IsHealthy { if !dockerOp.IsHealthy {
log.Error("Docker operation is not healthy reason:", dockerOp.Reason) log.Error("Docker operation is not healthy reason:", dockerOp.Reason)
......
...@@ -16,7 +16,9 @@ func init() { ...@@ -16,7 +16,9 @@ func init() {
beego.Router("/api/v1/power/get/conf", &controllers.NodeController{}, "get:GetConfigInfo") beego.Router("/api/v1/power/get/conf", &controllers.NodeController{}, "get:GetConfigInfo")
beego.Router("/api/v1/power/get/current/benefit", &controllers.NodeController{}, "get:GetBenefit") beego.Router("/api/v1/power/get/current/benefit", &controllers.NodeController{}, "get:GetBenefit")
beego.Router("/api/v1/power/switch/mode", &controllers.NodeController{}, "post:SwitchMode") beego.Router("/api/v1/power/switch/mode", &controllers.NodeController{}, "post:SwitchMode")
beego.Router("/api/v1/power/get/run/mode", &controllers.NodeController{}, "get:GetRunMode")
beego.Router("/api/v1/power/get/running/tp", &controllers.StateController{}, "get:GetRunningTp") beego.Router("/api/v1/power/get/running/tp", &controllers.StateController{}, "get:GetRunningTp")
beego.Router("/api/v1/power/get/running/line/chart", &controllers.StateController{}, "get:GetRunningLineChart")
beego.Router("/api/v1/power/get/running/state", &controllers.StateController{}, "get:GetRunningState") beego.Router("/api/v1/power/get/running/state", &controllers.StateController{}, "get:GetRunningState")
beego.Router("/api/v1/power/get/worker/info", &controllers.StateController{}, "get:GetWorkerInfo") beego.Router("/api/v1/power/get/worker/info", &controllers.StateController{}, "get:GetWorkerInfo")
beego.Router("/api/v1/power/list/gpu/info", &controllers.StateController{}, "get:GetListGpuInfo") beego.Router("/api/v1/power/list/gpu/info", &controllers.StateController{}, "get:GetListGpuInfo")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment