Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
chain33-pai
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
szh
chain33-pai
Commits
ebb37e64
Commit
ebb37e64
authored
Dec 25, 2019
by
szh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
更新节点更新接口逻辑 和 对应进度接口
parent
c3469ef8
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
149 additions
and
80 deletions
+149
-80
process.go
pkg/app/process.go
+24
-30
node.go
routers/api/v1/node.go
+123
-49
pai.go
routers/api/v1/pai.go
+2
-1
No files found.
pkg/app/process.go
View file @
ebb37e64
...
...
@@ -28,25 +28,26 @@ type ProcessInfo struct {
}
type
updateInfo
struct
{
Status
bool
`json:"status"`
Info
string
`json:"info"`
Flag
bool
`json:"flag"`
//接口处理完成
Total
int64
`json:"total"`
Current
int64
`json:"current"`
}
type
Server
struct
{
Disks
[]
*
Disk
//硬盘信息
NodeProcesssInfo
ProcessInfo
//节点信息
Error
string
//错误信息
Disks
[]
*
Disk
`json:"disks"`
//硬盘信息
NodeProcesssInfo
ProcessInfo
`json:"node_processs_info"`
//节点信息
Error
string
`json:"error"`
//错误信息
}
type
Disk
struct
{
Filesystem
string
Type
string
//硬盘格式
SizeK
string
//硬盘大小
Use
string
Filesystem
string
`json:"filesystem"`
Type
string
`json:"type"`
//硬盘格式
SizeK
string
`json:"size_k"`
//硬盘大小
Use
string
`json:"use"`
}
var
BityuanFlag
bool
//true表示有任务在占用,禁止其他重复操作
var
BityuanFlag
bool
//true表示有任务在占用,禁止其他重复操作
重置钱包 重置节点 升级节点 不能并发执行
var
Bityuan
ProcessInfo
var
UpdateInfo
updateInfo
var
NodeError
error
...
...
@@ -264,24 +265,7 @@ type DownloadPercent struct {
Flag
bool
}
type
Reader
struct
{
io
.
Reader
Total
int64
Current
int64
}
func
(
r
*
Reader
)
Read
(
p
[]
byte
)
(
n
int
,
err
error
)
{
n
,
err
=
r
.
Reader
.
Read
(
p
)
if
err
!=
nil
{
return
0
,
err
}
r
.
Current
+=
int64
(
n
)
DPercent
.
Current
+=
int64
(
n
)
log
.
Printf
(
"
\r
进度%.2f%%"
,
float64
(
r
.
Current
*
100000
/
r
.
Total
)
/
100
)
return
}
func
DownLoadFile
(
url
string
,
file
string
)
error
{
func
DownLoadFile
(
url
string
,
file
string
,
ty
int32
)
error
{
var
(
buf
=
make
([]
byte
,
32
*
1024
)
)
...
...
@@ -300,7 +284,12 @@ func DownLoadFile(url string,file string) error {
defer
func
(){
f
.
Close
()
}()
DPercent
.
Total
=
r
.
ContentLength
if
ty
==
int32
(
1
)
{
UpdateInfo
.
Total
=
r
.
ContentLength
}
else
{
DPercent
.
Total
=
r
.
ContentLength
}
//reader := &Reader{
// Reader:r.Body,
// Total:r.ContentLength,
...
...
@@ -314,7 +303,12 @@ func DownLoadFile(url string,file string) error {
nw
,
ew
:=
f
.
Write
(
buf
[
0
:
nr
])
//数据长度大于0
if
nw
>
0
{
DPercent
.
Current
+=
int64
(
nw
)
if
ty
==
int32
(
1
)
{
UpdateInfo
.
Current
+=
int64
(
nw
)
}
else
{
DPercent
.
Current
+=
int64
(
nw
)
}
}
//写入出错
if
ew
!=
nil
{
...
...
routers/api/v1/node.go
View file @
ebb37e64
...
...
@@ -57,10 +57,10 @@ func ResetWallet(c *gin.Context) {
app
.
BityuanFlag
=
false
}
//钱包更新
涉及到配置文件更新以及是否重新同步等规则不明确,先暂时不开放
//钱包更新
,只替换执行文件
func
UpdateNode
(
c
*
gin
.
Context
){
appG
:=
app
.
Gin
{
C
:
c
}
if
f
lag
{
if
app
.
BityuanF
lag
{
appG
.
Response
(
http
.
StatusOK
,
e
.
SUCCESS_RUNNING
,
"node is updating"
)
return
}
...
...
@@ -68,57 +68,138 @@ func UpdateNode(c *gin.Context){
appG
.
Response
(
http
.
StatusOK
,
e
.
NODE_ERROR
,
"node internal error,could not start node"
)
return
}
app
.
BityuanFlag
=
true
app
.
UpdateInfo
.
Flag
=
false
setting
.
FreshVersion
()
latestVersion
:=
app
.
GetLatestVersion
()
app
.
UpdateInfo
.
Status
=
false
var
pai
pai_service
.
Pai
latestVersion
,
err
:=
pai
.
GetPaiLatestVersion
(
int32
(
1
))
if
err
!=
nil
{
appG
.
Response
(
http
.
StatusOK
,
e
.
NODE_ERROR
,
"get online version err"
)
app
.
BityuanFlag
=
false
app
.
UpdateInfo
.
Flag
=
true
return
}
if
latestVersion
==
setting
.
BityuanSetting
.
Version
{
app
.
UpdateInfo
.
Info
=
"current version is latest"
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
appG
.
Response
(
http
.
StatusOK
,
e
.
SUCCESS
,
"current version is latest"
)
return
}
if
flag
{
app
.
UpdateInfo
.
Info
=
"Updating..."
appG
.
Response
(
http
.
StatusOK
,
e
.
SUCCESS_RUNNING
,
"node is updating"
)
return
}
if
latestVersion
==
""
{
flag
=
fals
e
app
.
UpdateInfo
.
Info
=
"network error"
app
.
UpdateInfo
.
Flag
=
tru
e
app
.
BityuanFlag
=
false
appG
.
Response
(
http
.
StatusOK
,
e
.
NETWORK_ERROR
,
"network error,please checkout your network then try again"
)
return
}
name
:=
setting
.
BityuanSetting
.
Name
+
"_"
+
latestVersion
+
".tar.gz"
url
:=
setting
.
Chain33Pai
.
DownloadUrl
+
name
err
=
app
.
DownLoadFile
(
url
,
name
,
int32
(
1
))
if
err
!=
nil
{
appG
.
Response
(
http
.
StatusOK
,
e
.
DOWNLOAD_ERROR
,
err
)
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
return
}
//解压缩文件
tar
:=
exec
.
Command
(
"tar"
,
"-xvf"
,
name
)
err
=
tar
.
Start
()
if
err
!=
nil
{
log
.
Println
(
"tar"
,
err
)
appG
.
Response
(
http
.
StatusOK
,
e
.
TAR_XVF_ERROR
,
err
)
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
return
}
err
=
tar
.
Wait
()
if
err
!=
nil
{
log
.
Println
(
"tar"
,
err
)
appG
.
Response
(
http
.
StatusOK
,
e
.
TAR_XVF_ERROR
,
err
)
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
return
}
//备份原文件 确保没有alias 关联
bak
:=
exec
.
Command
(
"cp"
,
setting
.
BityuanSetting
.
Name
,
setting
.
BityuanSetting
.
Name
+
".bak"
)
err
=
bak
.
Start
()
if
err
!=
nil
{
log
.
Println
(
"bak"
,
err
)
appG
.
Response
(
http
.
StatusOK
,
e
.
CP_ERROR
,
err
)
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
return
}
err
=
bak
.
Wait
()
if
err
!=
nil
{
log
.
Println
(
"bak"
,
err
)
appG
.
Response
(
http
.
StatusOK
,
e
.
CP_ERROR
,
err
)
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
return
}
//备份配置文件
bakconf
:=
exec
.
Command
(
"cp"
,
"bityuan.toml"
,
"bityuan.toml.bak"
)
err
=
bakconf
.
Start
()
if
err
!=
nil
{
log
.
Println
(
"bakconf"
,
err
)
appG
.
Response
(
http
.
StatusOK
,
e
.
CP_ERROR
,
err
)
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
return
}
err
=
bakconf
.
Wait
()
if
err
!=
nil
{
log
.
Println
(
"bakconf"
,
err
)
appG
.
Response
(
http
.
StatusOK
,
e
.
CP_ERROR
,
err
)
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
return
}
//替换原执行文件
mv
:=
exec
.
Command
(
"mv"
,
setting
.
BityuanSetting
.
Name
+
"_"
+
latestVersion
+
"/"
+
setting
.
BityuanSetting
.
Name
,
"."
)
err
=
mv
.
Start
()
if
err
!=
nil
{
log
.
Println
(
"mv"
,
err
)
appG
.
Response
(
http
.
StatusOK
,
e
.
MV_ERROR
,
err
)
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
return
}
err
=
mv
.
Wait
()
if
err
!=
nil
{
log
.
Println
(
"mv"
,
err
)
appG
.
Response
(
http
.
StatusOK
,
e
.
MV_ERROR
,
err
)
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
return
}
mv2
:=
exec
.
Command
(
"mv"
,
setting
.
BityuanSetting
.
Name
+
"_"
+
latestVersion
+
"/"
+
"bityuan.toml"
,
"."
)
err
=
mv2
.
Start
()
if
err
!=
nil
{
log
.
Println
(
"mv2"
,
err
)
appG
.
Response
(
http
.
StatusOK
,
e
.
MV_ERROR
,
err
)
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
return
}
err
=
mv2
.
Wait
()
if
err
!=
nil
{
log
.
Println
(
"mv2"
,
err
)
appG
.
Response
(
http
.
StatusOK
,
e
.
MV_ERROR
,
err
)
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
return
}
err
=
app
.
StartProcess
(
setting
.
Chain33Pai
.
Auto
)
if
err
!=
nil
{
app
.
UpdateInfo
.
Flag
=
true
app
.
BityuanFlag
=
false
appG
.
Response
(
http
.
StatusOK
,
e
.
NODE_ERROR
,
"start auto sh err"
)
return
}
appG
.
Response
(
http
.
StatusOK
,
e
.
SUCCESS
,
"update job started"
)
go
func
(){
flag
=
true
err
:=
app
.
DownLoadLatestVersion
()
if
err
!=
nil
{
flag
=
false
app
.
UpdateInfo
.
Info
=
err
.
Error
()
return
}
app
.
Copy
(
setting
.
BityuanSetting
.
Name
,
app
.
Bityuan
.
Path
)
app
.
Copy
(
fmt
.
Sprintf
(
"%s-cli"
,
setting
.
BityuanSetting
.
Name
),
app
.
Bityuan
.
Path
)
os
.
Chdir
(
".."
)
os
.
RemoveAll
(
setting
.
BityuanSetting
.
Name
)
kill
:=
exec
.
Command
(
"kill"
,
"-9"
,
app
.
Bityuan
.
Pid
)
kill
.
Start
()
err
=
kill
.
Wait
()
if
err
!=
nil
{
flag
=
false
app
.
UpdateInfo
.
Info
=
"fail to update node "
return
}
err
=
app
.
StartProcess
(
setting
.
Chain33Pai
.
Auto
)
if
err
!=
nil
{
flag
=
false
app
.
UpdateInfo
.
Info
=
"fail to update node "
return
}
app
.
UpdateInfo
.
Status
=
true
app
.
UpdateInfo
.
Info
=
"complete"
flag
=
false
}()
}
//重置节点只需要删除datadir 然后重启节点
...
...
@@ -158,13 +239,6 @@ func ResetNode(c* gin.Context){
func
UpdateDetail
(
c
*
gin
.
Context
){
appG
:=
app
.
Gin
{
C
:
c
}
if
flag
{
appG
.
Response
(
http
.
StatusOK
,
e
.
SUCCESS_RUNNING
,
app
.
UpdateInfo
)
return
}
if
app
.
UpdateInfo
.
Info
==
"download latest version failed"
{
appG
.
Response
(
http
.
StatusOK
,
e
.
NETWORK_ERROR
,
app
.
UpdateInfo
)
}
appG
.
Response
(
http
.
StatusOK
,
e
.
SUCCESS
,
app
.
UpdateInfo
)
}
...
...
routers/api/v1/pai.go
View file @
ebb37e64
...
...
@@ -65,12 +65,13 @@ func UpdatePai(c *gin.Context) {
err
:=
c
.
ShouldBindJSON
(
&
req
)
if
err
!=
nil
{
appG
.
Response
(
http
.
StatusOK
,
e
.
INVALID_PARAMS
,
nil
)
app
.
DPercent
.
Flag
=
false
return
}
name
:=
setting
.
Chain33Pai
.
Name
+
"_"
+
req
.
Version
+
".tar.gz"
url
:=
setting
.
Chain33Pai
.
DownloadUrl
+
name
//oss下载更新包
err
=
app
.
DownLoadFile
(
url
,
name
)
err
=
app
.
DownLoadFile
(
url
,
name
,
int32
(
2
)
)
if
err
!=
nil
{
appG
.
Response
(
http
.
StatusOK
,
e
.
DOWNLOAD_ERROR
,
err
)
app
.
DPercent
.
Flag
=
false
...
...
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