Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
power-node
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Odysseus
power-node
Commits
6f6a360d
Commit
6f6a360d
authored
May 20, 2024
by
duanjinfei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add controller
parent
0420afd8
Changes
12
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
135 additions
and
22 deletions
+135
-22
rootcmd.go
cmd/rootcmd.go
+3
-2
NodeController.go
controllers/NodeController.go
+70
-4
StateController.go
controllers/StateController.go
+3
-3
db.go
db/db.go
+15
-0
model_handler.go
largeModel/model_handler.go
+11
-5
const.go
models/const.go
+3
-0
node_manager.go
models/node_manager.go
+5
-0
req_resp.go
models/req_resp.go
+5
-1
api.go
nm/api.go
+3
-3
msg_handler.go
nm/msg_handler.go
+12
-1
router.go
routers/router.go
+2
-0
util.go
utils/util.go
+3
-3
No files found.
cmd/rootcmd.go
View file @
6f6a360d
...
@@ -3,6 +3,7 @@ package main
...
@@ -3,6 +3,7 @@ package main
import
(
import
(
"example.com/m/conf"
"example.com/m/conf"
"example.com/m/log"
"example.com/m/log"
"example.com/m/models"
"example.com/m/nm"
"example.com/m/nm"
"example.com/m/utils"
"example.com/m/utils"
"fmt"
"fmt"
...
@@ -53,12 +54,12 @@ var RootCmd = &cobra.Command{
...
@@ -53,12 +54,12 @@ var RootCmd = &cobra.Command{
}
}
isExist
:=
false
isExist
:=
false
for
_
,
acc
:=
range
nm
.
HistoryBenefitAcc
{
for
_
,
acc
:=
range
nm
.
HistoryBenefitAcc
{
if
acc
==
rewardAddr
{
if
acc
.
Address
==
rewardAddr
{
isExist
=
true
isExist
=
true
}
}
}
}
if
!
isExist
{
if
!
isExist
{
nm
.
HistoryBenefitAcc
=
append
(
nm
.
HistoryBenefitAcc
,
rewardAddr
)
nm
.
HistoryBenefitAcc
=
append
(
nm
.
HistoryBenefitAcc
,
&
models
.
BenefitAddressStruct
{
Address
:
rewardAddr
,
IsDel
:
false
}
)
err
:=
utils
.
WriteBenefitFile
(
nm
.
HistoryBenefitAcc
)
err
:=
utils
.
WriteBenefitFile
(
nm
.
HistoryBenefitAcc
)
if
err
!=
nil
{
if
err
!=
nil
{
log
.
Error
(
"WriteBenefitFile failed with error:"
,
err
)
log
.
Error
(
"WriteBenefitFile failed with error:"
,
err
)
...
...
controllers/NodeController.go
View file @
6f6a360d
...
@@ -42,7 +42,7 @@ func (c *NodeController) SetBenefitAddress() {
...
@@ -42,7 +42,7 @@ func (c *NodeController) SetBenefitAddress() {
c
.
ResponseInfo
(
500
,
"param error"
,
""
)
c
.
ResponseInfo
(
500
,
"param error"
,
""
)
return
return
}
}
req
:=
&
models
.
BenefitAddress
{}
req
:=
&
models
.
BenefitAddress
Req
{}
err
=
json
.
Unmarshal
(
bodyReq
,
req
)
err
=
json
.
Unmarshal
(
bodyReq
,
req
)
if
err
!=
nil
{
if
err
!=
nil
{
c
.
ResponseInfo
(
500
,
"param error"
,
""
)
c
.
ResponseInfo
(
500
,
"param error"
,
""
)
...
@@ -54,12 +54,12 @@ func (c *NodeController) SetBenefitAddress() {
...
@@ -54,12 +54,12 @@ func (c *NodeController) SetBenefitAddress() {
}
}
isExist
:=
false
isExist
:=
false
for
_
,
s
:=
range
nm
.
HistoryBenefitAcc
{
for
_
,
s
:=
range
nm
.
HistoryBenefitAcc
{
if
s
==
req
.
Address
{
if
s
.
Address
==
req
.
Address
{
isExist
=
true
isExist
=
true
}
}
}
}
if
!
isExist
{
if
!
isExist
{
nm
.
HistoryBenefitAcc
=
append
(
nm
.
HistoryBenefitAcc
,
req
.
Address
)
nm
.
HistoryBenefitAcc
=
append
(
nm
.
HistoryBenefitAcc
,
&
models
.
BenefitAddressStruct
{
Address
:
req
.
Address
,
IsDel
:
false
}
)
err
=
utils
.
WriteBenefitFile
(
nm
.
HistoryBenefitAcc
)
err
=
utils
.
WriteBenefitFile
(
nm
.
HistoryBenefitAcc
)
if
err
!=
nil
{
if
err
!=
nil
{
c
.
ResponseInfo
(
500
,
"Write benefit file failed"
,
""
)
c
.
ResponseInfo
(
500
,
"Write benefit file failed"
,
""
)
...
@@ -70,7 +70,14 @@ func (c *NodeController) SetBenefitAddress() {
...
@@ -70,7 +70,14 @@ func (c *NodeController) SetBenefitAddress() {
func
(
c
*
NodeController
)
ListHistoryBenefitAddress
()
{
func
(
c
*
NodeController
)
ListHistoryBenefitAddress
()
{
fileBenefitAcc
,
_
:=
utils
.
ReadBenefitFile
()
fileBenefitAcc
,
_
:=
utils
.
ReadBenefitFile
()
c
.
ResponseInfo
(
200
,
"list history benefit address successful"
,
fileBenefitAcc
)
res
:=
make
([]
*
models
.
BenefitAddressStruct
,
0
)
for
_
,
addressStruct
:=
range
fileBenefitAcc
{
if
addressStruct
.
IsDel
{
continue
}
res
=
append
(
res
,
addressStruct
)
}
c
.
ResponseInfo
(
200
,
"list history benefit address successful"
,
res
)
}
}
func
(
c
*
NodeController
)
AddNodeManager
()
{
func
(
c
*
NodeController
)
AddNodeManager
()
{
...
@@ -139,3 +146,62 @@ func (c *NodeController) GetConfigInfo() {
...
@@ -139,3 +146,62 @@ func (c *NodeController) GetConfigInfo() {
func
(
c
*
NodeController
)
GetBenefit
()
{
func
(
c
*
NodeController
)
GetBenefit
()
{
c
.
ResponseInfo
(
200
,
"get benefit address successful"
,
conf
.
GetConfig
()
.
BenefitAddress
)
c
.
ResponseInfo
(
200
,
"get benefit address successful"
,
conf
.
GetConfig
()
.
BenefitAddress
)
}
}
func
(
c
*
NodeController
)
SwitchMode
()
{
bodyReq
,
err
:=
io
.
ReadAll
(
c
.
Ctx
.
Request
.
Body
)
if
err
!=
nil
||
bodyReq
==
nil
{
c
.
ResponseInfo
(
500
,
"param error"
,
""
)
return
}
req
:=
&
models
.
RunMode
{}
err
=
json
.
Unmarshal
(
bodyReq
,
req
)
if
err
!=
nil
{
c
.
ResponseInfo
(
500
,
"param error"
,
""
)
return
}
switch
req
.
Type
{
case
models
.
BasicMode
:
{
}
case
models
.
HealthMode
:
{
}
case
models
.
SaveMode
:
{
}
}
c
.
ResponseInfo
(
200
,
"switch mode successful"
,
""
)
}
func
(
c
*
NodeController
)
DelBenefitAddress
()
{
bodyReq
,
err
:=
io
.
ReadAll
(
c
.
Ctx
.
Request
.
Body
)
if
err
!=
nil
||
bodyReq
==
nil
{
c
.
ResponseInfo
(
500
,
"param error"
,
""
)
return
}
req
:=
&
models
.
BenefitAddressReq
{}
err
=
json
.
Unmarshal
(
bodyReq
,
req
)
if
err
!=
nil
{
c
.
ResponseInfo
(
500
,
"param error"
,
""
)
return
}
if
req
.
Address
==
conf
.
GetConfig
()
.
BenefitAddress
{
c
.
ResponseInfo
(
500
,
"Don't del current benefit address"
,
""
)
return
}
isExist
:=
false
for
_
,
s
:=
range
nm
.
HistoryBenefitAcc
{
if
s
.
Address
==
req
.
Address
{
s
.
IsDel
=
true
isExist
=
true
}
}
if
!
isExist
{
c
.
ResponseInfo
(
500
,
"The account not exist,don't del"
,
""
)
return
}
c
.
ResponseInfo
(
200
,
"The account del successful "
,
""
)
}
controllers/StateController.go
View file @
6f6a360d
...
@@ -21,11 +21,11 @@ func (c *StateController) GetRunningState() {
...
@@ -21,11 +21,11 @@ func (c *StateController) GetRunningState() {
func
(
c
*
StateController
)
GetRunningTp
()
{
func
(
c
*
StateController
)
GetRunningTp
()
{
info
:=
utils
.
GetHardwareInfo
()
info
:=
utils
.
GetHardwareInfo
()
if
len
(
info
.
Data
.
Gpus
)
>
0
{
if
len
(
info
.
Data
.
Gpus
)
>
0
{
var
total
Temp
int64
var
total
Usage
int64
for
_
,
gpu
:=
range
info
.
Data
.
Gpus
{
for
_
,
gpu
:=
range
info
.
Data
.
Gpus
{
total
Temp
+=
gpu
.
Temp
total
Usage
+=
gpu
.
Usage
}
}
avgTemp
:=
total
Temp
/
int64
(
len
(
info
.
Data
.
Gpus
))
avgTemp
:=
total
Usage
/
int64
(
len
(
info
.
Data
.
Gpus
))
c
.
ResponseInfo
(
200
,
"get running state successful"
,
avgTemp
)
c
.
ResponseInfo
(
200
,
"get running state successful"
,
avgTemp
)
}
}
c
.
ResponseInfo
(
500
,
"get running tp failed"
,
0
)
c
.
ResponseInfo
(
500
,
"get running tp failed"
,
0
)
...
...
db/db.go
View file @
6f6a360d
...
@@ -6,6 +6,7 @@ import (
...
@@ -6,6 +6,7 @@ import (
"example.com/m/models"
"example.com/m/models"
"github.com/syndtr/goleveldb/leveldb"
"github.com/syndtr/goleveldb/leveldb"
"github.com/syndtr/goleveldb/leveldb/iterator"
"github.com/syndtr/goleveldb/leveldb/iterator"
"sort"
)
)
var
dbInstance
*
leveldb
.
DB
var
dbInstance
*
leveldb
.
DB
...
@@ -101,6 +102,20 @@ func GetModel(key string) (*models.ModelInfo, error) {
...
@@ -101,6 +102,20 @@ func GetModel(key string) (*models.ModelInfo, error) {
return
imageInfo
,
nil
return
imageInfo
,
nil
}
}
func
GetRunningModel
()
[]
*
models
.
ModelInfo
{
res
:=
make
([]
*
models
.
ModelInfo
,
0
)
for
key
:=
range
modelKeys
{
model
,
_
:=
GetModel
(
key
)
if
model
!=
nil
&&
model
.
IsRunning
{
res
=
append
(
res
,
model
)
}
}
sort
.
Slice
(
res
,
func
(
i
,
j
int
)
bool
{
return
res
[
i
]
.
TotalRunCount
<
res
[
j
]
.
TotalRunCount
})
return
res
}
func
Delete
(
key
[]
byte
)
error
{
func
Delete
(
key
[]
byte
)
error
{
err
:=
dbInstance
.
Delete
(
key
,
nil
)
err
:=
dbInstance
.
Delete
(
key
,
nil
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
largeModel/model_handler.go
View file @
6f6a360d
...
@@ -73,13 +73,19 @@ func (m *ModelHandler) MonitorModelInfo() {
...
@@ -73,13 +73,19 @@ func (m *ModelHandler) MonitorModelInfo() {
model
,
_
:=
db
.
GetModel
(
modelInfo
.
ImageName
)
model
,
_
:=
db
.
GetModel
(
modelInfo
.
ImageName
)
if
model
!=
nil
{
if
model
!=
nil
{
model
.
UpdateFiled
(
modelInfo
)
model
.
UpdateFiled
(
modelInfo
)
err
:=
db
.
PutModel
(
modelInfo
.
ImageName
,
model
)
if
err
!=
nil
{
log
.
WithError
(
err
)
.
Error
(
"Put db error"
)
continue
}
}
}
else
{
err
:=
db
.
PutModel
(
modelInfo
.
ImageName
,
modelInfo
)
err
:=
db
.
PutModel
(
modelInfo
.
ImageName
,
modelInfo
)
if
err
!=
nil
{
if
err
!=
nil
{
log
.
WithError
(
err
)
.
Error
(
"Put db error"
)
log
.
WithError
(
err
)
.
Error
(
"Put db error"
)
continue
continue
}
}
}
}
}
ticker
=
time
.
NewTicker
(
time
.
Minute
*
10
)
ticker
=
time
.
NewTicker
(
time
.
Minute
*
10
)
}
}
}
}
...
...
models/const.go
View file @
6f6a360d
...
@@ -24,4 +24,7 @@ const (
...
@@ -24,4 +24,7 @@ const (
EncryptionKey
=
"uxhendjFYsoWFnsO"
EncryptionKey
=
"uxhendjFYsoWFnsO"
HistoryBenefitAddressDirectory
=
"data/benefitList"
HistoryBenefitAddressDirectory
=
"data/benefitList"
CudaEnv
=
"CUDA_VISIBLE_DEVICES"
CudaEnv
=
"CUDA_VISIBLE_DEVICES"
BasicMode
=
1
HealthMode
=
2
SaveMode
=
3
)
)
models/node_manager.go
View file @
6f6a360d
...
@@ -6,6 +6,11 @@ import (
...
@@ -6,6 +6,11 @@ import (
"time"
"time"
)
)
type
BenefitAddressStruct
struct
{
Address
string
`json:"address"`
IsDel
bool
`json:"is_del"`
}
type
TaskCmd
struct
{
type
TaskCmd
struct
{
ImageName
string
`json:"image_name"`
ImageName
string
`json:"image_name"`
DockerCmd
*
DockerCmd
`json:"docker_cmd"`
DockerCmd
*
DockerCmd
`json:"docker_cmd"`
...
...
models/req_resp.go
View file @
6f6a360d
package
models
package
models
type
BenefitAddress
struct
{
type
BenefitAddress
Req
struct
{
Address
string
`json:"address"`
Address
string
`json:"address"`
}
}
type
RunMode
struct
{
Type
int
`json:"type"`
}
type
RecvTask
struct
{
type
RecvTask
struct
{
IsRecv
bool
`json:"is_recv"`
IsRecv
bool
`json:"is_recv"`
}
}
...
...
nm/api.go
View file @
6f6a360d
...
@@ -13,20 +13,20 @@ type NodeManager struct {
...
@@ -13,20 +13,20 @@ type NodeManager struct {
}
}
var
(
var
(
HistoryBenefitAcc
[]
string
HistoryBenefitAcc
[]
*
models
.
BenefitAddressStruct
RunningState
*
models
.
RunningState
RunningState
*
models
.
RunningState
IsRecvTask
bool
IsRecvTask
bool
)
)
func
init
()
{
func
init
()
{
IsRecvTask
=
true
IsRecvTask
=
true
HistoryBenefitAcc
=
make
([]
string
,
0
)
HistoryBenefitAcc
=
make
([]
*
models
.
BenefitAddressStruct
,
0
)
RunningState
=
&
models
.
RunningState
{
RunningState
=
&
models
.
RunningState
{
RunningTime
:
time
.
Now
()
.
Unix
(),
RunningTime
:
time
.
Now
()
.
Unix
(),
CompletedTaskCount
:
0
,
CompletedTaskCount
:
0
,
NmIpAddr
:
""
,
NmIpAddr
:
""
,
NmDelayTime
:
0
,
NmDelayTime
:
0
,
NmLocation
:
""
,
NmLocation
:
"
Hong Kong
"
,
}
}
}
}
...
...
nm/msg_handler.go
View file @
6f6a360d
...
@@ -181,7 +181,18 @@ func (n *NodeManagerHandler) DistributionMsgWorker(nodeManagerMsgChan chan *node
...
@@ -181,7 +181,18 @@ func (n *NodeManagerHandler) DistributionMsgWorker(nodeManagerMsgChan chan *node
}
}
}
}
if
!
isMatch
{
if
!
isMatch
{
runningModel
:=
db
.
GetRunningModel
()
if
len
(
runningModel
)
==
0
{
continue
}
for
_
,
modelInfo
:=
range
runningModel
{
if
modelInfo
.
RunningMem
>
model
.
GpuRam
{
isMatch
=
true
dockerOp
.
StopContainer
(
model
.
ContainerId
)
envMap
[
models
.
CudaEnv
]
=
strconv
.
FormatInt
(
int64
(
modelInfo
.
GpuSeq
),
10
)
break
}
}
}
}
if
isMatch
{
if
isMatch
{
_
,
err
:=
dockerOp
.
CreateAndStartContainer
(
model
.
ImageName
,
dockerCmd
)
_
,
err
:=
dockerOp
.
CreateAndStartContainer
(
model
.
ImageName
,
dockerCmd
)
...
...
routers/router.go
View file @
6f6a360d
...
@@ -10,10 +10,12 @@ func init() {
...
@@ -10,10 +10,12 @@ func init() {
beego
.
Router
(
"/api/v1/power/set/nm/seed"
,
&
controllers
.
NodeController
{},
"post:SetNmSeed"
)
beego
.
Router
(
"/api/v1/power/set/nm/seed"
,
&
controllers
.
NodeController
{},
"post:SetNmSeed"
)
beego
.
Router
(
"/api/v1/power/join/benefit/acc"
,
&
controllers
.
NodeController
{},
"post:SetBenefitAddress"
)
beego
.
Router
(
"/api/v1/power/join/benefit/acc"
,
&
controllers
.
NodeController
{},
"post:SetBenefitAddress"
)
beego
.
Router
(
"/api/v1/power/list/benefit/acc"
,
&
controllers
.
NodeController
{},
"get:ListHistoryBenefitAddress"
)
beego
.
Router
(
"/api/v1/power/list/benefit/acc"
,
&
controllers
.
NodeController
{},
"get:ListHistoryBenefitAddress"
)
beego
.
Router
(
"/api/v1/power/del/benefit/acc"
,
&
controllers
.
NodeController
{},
"post:DelBenefitAddress"
)
beego
.
Router
(
"/api/v1/power/update/recv/status"
,
&
controllers
.
NodeController
{},
"post:UpdateRecvStatus"
)
beego
.
Router
(
"/api/v1/power/update/recv/status"
,
&
controllers
.
NodeController
{},
"post:UpdateRecvStatus"
)
beego
.
Router
(
"/api/v1/power/get/recv/status"
,
&
controllers
.
NodeController
{},
"get:GetRecvStatus"
)
beego
.
Router
(
"/api/v1/power/get/recv/status"
,
&
controllers
.
NodeController
{},
"get:GetRecvStatus"
)
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/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/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"
)
...
...
utils/util.go
View file @
6f6a360d
...
@@ -215,7 +215,7 @@ func DeleteNm(nodeArr []*models.NodeManagerClient, target int) []*models.NodeMan
...
@@ -215,7 +215,7 @@ func DeleteNm(nodeArr []*models.NodeManagerClient, target int) []*models.NodeMan
return
nodeArr
[
:
len
(
nodeArr
)
-
1
]
return
nodeArr
[
:
len
(
nodeArr
)
-
1
]
}
}
func
WriteBenefitFile
(
historyBenefitAcc
[]
string
)
error
{
func
WriteBenefitFile
(
historyBenefitAcc
[]
*
models
.
BenefitAddressStruct
)
error
{
log
.
Info
(
"WritingBenefitFile........"
)
log
.
Info
(
"WritingBenefitFile........"
)
key
:=
[]
byte
(
models
.
EncryptionKey
)
key
:=
[]
byte
(
models
.
EncryptionKey
)
serializedData
,
err
:=
json
.
Marshal
(
historyBenefitAcc
)
serializedData
,
err
:=
json
.
Marshal
(
historyBenefitAcc
)
...
@@ -230,14 +230,14 @@ func WriteBenefitFile(historyBenefitAcc []string) error {
...
@@ -230,14 +230,14 @@ func WriteBenefitFile(historyBenefitAcc []string) error {
return
nil
return
nil
}
}
func
ReadBenefitFile
()
([]
string
,
error
)
{
func
ReadBenefitFile
()
([]
*
models
.
BenefitAddressStruct
,
error
)
{
log
.
Info
(
"ReadBenefitFile........"
)
log
.
Info
(
"ReadBenefitFile........"
)
key
:=
[]
byte
(
models
.
EncryptionKey
)
key
:=
[]
byte
(
models
.
EncryptionKey
)
readRes
,
err
:=
readAndDecryptFile
(
key
,
models
.
HistoryBenefitAddressDirectory
)
readRes
,
err
:=
readAndDecryptFile
(
key
,
models
.
HistoryBenefitAddressDirectory
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
res
:=
make
([]
string
,
0
)
res
:=
make
([]
*
models
.
BenefitAddressStruct
,
0
)
err
=
json
.
Unmarshal
(
readRes
,
&
res
)
err
=
json
.
Unmarshal
(
readRes
,
&
res
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment