Commit 7884dc8b authored by root's avatar root

fmt

parent 3fb8e362
......@@ -8,10 +8,10 @@ import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
"time"
clog "github.com/33cn/chain33/common/log"
log "github.com/33cn/chain33/common/log/log15"
"net/http"
"time"
)
func init() {
......@@ -26,7 +26,6 @@ func init() {
var tlog = log.New("main", "main.go")
// @title Golang Gin API
// @version 1.0
// @description An example of gin
......@@ -38,7 +37,7 @@ func main() {
//区域网广播设备
go app.Broadcast()
//节点操作
go app.BityuanJob(time.NewTicker(time.Second*30))
go app.BityuanJob(time.NewTicker(time.Second * 30))
//树莓派内置程序操作
go app.PaiJob(time.NewTicker(time.Second * 50))
//go app.ClearLog(time.NewTicker(time.Hour*1))
......@@ -60,7 +59,7 @@ func main() {
MaxHeaderBytes: maxHeaderBytes,
}
tlog.Info("[info] start http server listening ", "port",endPoint)
tlog.Info("[info] start http server listening ", "port", endPoint)
server.ListenAndServe()
select {}
// If you want Graceful Restart, you need a Unix system and download github.com/fvbock/endless
......
package app
import (
"chain33-pai/service/pai_service"
"chain33-pai/pkg/util"
"chain33-pai/service/pai_service"
"net"
"time"
)
var (
serial string
serial string
runningAddr *net.IPNet
)
func Broadcast() {
func Broadcast() {
var pai pai_service.Pai
send := "hello world"
if serial != "" {
......@@ -25,10 +25,10 @@ func Broadcast() {
}
}
//ip 会变化
ip,err := util.GetLocalIpByName("wlan0")
ip, err := util.GetLocalIpByName("wlan0")
if err != nil || ip == nil {
tlog.Error("broadcast",err)
ip,err = util.GetLocalIpByName("eth0")
tlog.Error("broadcast", err)
ip, err = util.GetLocalIpByName("eth0")
if err != nil {
panic(err)
}
......@@ -46,21 +46,21 @@ func Broadcast() {
}
conn, err := net.DialUDP("udp", &laddr, &raddr)
if err != nil {
tlog.Error("broadcast","net error ",err)
tlog.Error("broadcast", "net error ", err)
panic(err)
}
for {
//ip 会变化
ip,err = util.GetLocalIpByName("wlan0")
ip, err = util.GetLocalIpByName("wlan0")
if err != nil || ip == nil {
tlog.Error("broadcast","err","wlan0 not exists")
ip,err = util.GetLocalIpByName("eth0")
tlog.Error("broadcast", "err", "wlan0 not exists")
ip, err = util.GetLocalIpByName("eth0")
if err != nil {
tlog.Error("broadcast","err","eth0 not exists")
time.Sleep(time.Second*1)
tlog.Error("broadcast", "err", "eth0 not exists")
time.Sleep(time.Second * 1)
continue
}
tlog.Info("broadcast","eth0",ip.IP.String())
tlog.Info("broadcast", "eth0", ip.IP.String())
}
if runningAddr != nil && runningAddr.IP.String() != ip.IP.String() {
......@@ -76,22 +76,22 @@ func Broadcast() {
conn.Close()
conn, err = net.DialUDP("udp", &laddr, &raddr)
if err != nil {
tlog.Error("broadcast","net error ",err)
tlog.Error("broadcast", "net error ", err)
panic(err)
}
tlog.Info("broadcast","oldip",runningAddr.IP.String(),"newip",ip.IP.String())
tlog.Info("broadcast", "oldip", runningAddr.IP.String(), "newip", ip.IP.String())
}
runningAddr = ip
_, err = conn.Write([]byte(send))
if err != nil{
tlog.Error("broadcast ","err",err)
time.Sleep(time.Second*1)
if err != nil {
tlog.Error("broadcast ", "err", err)
time.Sleep(time.Second * 1)
continue
}
tlog.Info("broadcast","ip:",ip.IP.String(),"udp",send)
time.Sleep(time.Second*1)
tlog.Info("broadcast", "ip:", ip.IP.String(), "udp", send)
time.Sleep(time.Second * 1)
}
......
......@@ -7,5 +7,5 @@ type MsgType struct {
}
func Setup() {
JobChan = make(chan MsgType,10)
JobChan = make(chan MsgType, 10)
}
This diff is collapsed.
package app
import (
"time"
"chain33-pai/pkg/setting"
"bytes"
"os/exec"
"fmt"
"chain33-pai/pkg/setting"
"chain33-pai/service/pai_service"
"errors"
"fmt"
"os"
"os/exec"
"time"
)
var (
......@@ -17,8 +17,8 @@ var (
func RaspberryChan() {
for {
if value,ok := <- JobChan; ok {
tlog.Info("raspberrychan","msg",value)
if value, ok := <-JobChan; ok {
tlog.Info("raspberrychan", "msg", value)
if value.Name == "" {
continue
}
......@@ -30,37 +30,37 @@ func RaspberryChan() {
case "ROLLBACK":
err := rollback()
if err == nil {
tlog.Info("rollback success","err",nil)
tlog.Info("rollback success", "err", nil)
} else {
tlog.Error("rollback fail ","err",err)
tlog.Error("rollback fail ", "err", err)
}
case "BACKUP":
err := backup()
if err == nil {
tlog.Info("backup success","err",nil)
tlog.Info("backup success", "err", nil)
} else {
tlog.Error("backup fail ","err",err)
tlog.Error("backup fail ", "err", err)
}
case "RECOVER":
err := recoverNode()
if err == nil {
tlog.Info("recover success","err",nil)
tlog.Info("recover success", "err", nil)
} else {
tlog.Error("recover fail ","err",err)
tlog.Error("recover fail ", "err", err)
}
case "DELETEBACKUP":
err := deleteBackup()
if err == nil {
tlog.Info("deleteBackup success","err",nil)
tlog.Info("deleteBackup success", "err", nil)
} else {
tlog.Error("deleteBackup fail ","err",err)
tlog.Error("deleteBackup fail ", "err", err)
}
case "RESTART":
err := restartNode()
if err == nil {
tlog.Info("deleteBackup success","err",nil)
tlog.Info("deleteBackup success", "err", nil)
} else {
tlog.Error("deleteBackup fail ","err",err)
tlog.Error("deleteBackup fail ", "err", err)
}
}
......@@ -69,26 +69,25 @@ func RaspberryChan() {
}
}
func rollback() error {
BityuanFlag.Lock.Lock()
defer BityuanFlag.Lock.Unlock()
BityuanFlag.Flag = true
_,err := SafeCloseNode()
_, err := SafeCloseNode()
if err != nil {
BityuanFlag.Flag = false
BityuanFlag.Flag = false
return err
}
var pai pai_service.Pai
err = pai.SetPai()
if err != nil {
tlog.Error("SetPai","err",err)
BityuanFlag.Flag = false
tlog.Error("SetPai", "err", err)
BityuanFlag.Flag = false
return err
}
if pai.LocalLastHeight == 0 {
tlog.Error("LocalLastHeight","height",pai.LocalLastHeight)
BityuanFlag.Flag = false
tlog.Error("LocalLastHeight", "height", pai.LocalLastHeight)
BityuanFlag.Flag = false
return err
}
rollheight := pai.LocalLastHeight - 1000
......@@ -97,25 +96,25 @@ func rollback() error {
}
isrun := MakeSureBtyIsNotRun()
if isrun {
BityuanFlag.Flag = false
BityuanFlag.Flag = false
return errors.New("bty is running")
}
tlog.Info("rollback start","height",pai.LocalLastHeight,"rollbackheight",rollheight)
tlog.Info("rollback start", "height", pai.LocalLastHeight, "rollbackheight", rollheight)
var buf bytes.Buffer
if btyPath == "" {
tlog.Error("GetAbsPath","err","btyPath not exists")
BityuanFlag.Flag = false
tlog.Error("GetAbsPath", "err", "btyPath not exists")
BityuanFlag.Flag = false
return err
}
cmd := exec.Command(btyPath+"/"+setting.BityuanSetting.Name, "-rollback",fmt.Sprintf("%d",rollheight))
cmd := exec.Command(btyPath+"/"+setting.BityuanSetting.Name, "-rollback", fmt.Sprintf("%d", rollheight))
cmd.Stdout = &buf
err = cmd.Run()
if err != nil {
BityuanFlag.Flag = false
BityuanFlag.Flag = false
return err
}
tlog.Info("rollback end","height",pai.LocalLastHeight,"rollbackheight",rollheight)
BityuanFlag.Flag = false
tlog.Info("rollback end", "height", pai.LocalLastHeight, "rollbackheight", rollheight)
BityuanFlag.Flag = false
return nil
}
......@@ -126,10 +125,10 @@ func backup() error {
return errors.New("env err")
}
BityuanFlag.Flag = true
ok,err := SafeCloseNode()
if err != nil {
ok, err := SafeCloseNode()
if err != nil {
BityuanFlag.Flag = false
tlog.Error("SafeCloseNode","err",err)
tlog.Error("SafeCloseNode", "err", err)
return err
}
if !ok {
......@@ -138,11 +137,11 @@ func backup() error {
}
isrun := MakeSureBtyIsNotRun()
if isrun {
BityuanFlag.Flag = false
BityuanFlag.Flag = false
return errors.New("bty is running")
}
err = deleteBackup()
if err != nil && err != errors.New("backup file not exists"){
if err != nil && err != errors.New("backup file not exists") {
BityuanFlag.Flag = false
return err
}
......@@ -150,7 +149,7 @@ func backup() error {
if err != nil {
return err
}
BityuanFlag.Flag = false
BityuanFlag.Flag = false
StartProcess(setting.Chain33Pai.Auto)
return nil
}
......@@ -158,13 +157,13 @@ func backup() error {
func SafeBackup() error {
s := time.Now()
defer func() {
tlog.Info("SafeBackup","cost",time.Since(s))
tlog.Info("SafeBackup", "cost", time.Since(s))
}()
var buf bytes.Buffer
backup := exec.Command("cp","-r",btyPath+"/datadir",btyPath+"/datadir_backup")
backup := exec.Command("cp", "-r", btyPath+"/datadir", btyPath+"/datadir_backup")
backup.Stderr = &buf
if err := backup.Run();err != nil {
tlog.Error("SafeBackup","err",buf.String())
if err := backup.Run(); err != nil {
tlog.Error("SafeBackup", "err", buf.String())
return err
}
return nil
......@@ -174,10 +173,10 @@ func recoverNode() error {
BityuanFlag.Lock.Lock()
defer BityuanFlag.Lock.Unlock()
if btyPath == "" {
tlog.Error("btyPath empty","err","node not exists")
tlog.Error("btyPath empty", "err", "node not exists")
return errors.New("node not exists")
}
_,err := SafeCloseNode()
_, err := SafeCloseNode()
if err != nil {
return err
}
......@@ -186,23 +185,23 @@ func recoverNode() error {
return errors.New("bty is running")
}
backupPath := btyPath + "/datadir_backup"
if _,err := os.Stat(backupPath);err != nil {
if _, err := os.Stat(backupPath); err != nil {
if os.IsNotExist(err) {
tlog.Error("backup file not exists","err",backupPath)
tlog.Error("backup file not exists", "err", backupPath)
return errors.New("backup file not exists")
}
}
remove := exec.Command("rm","-rf",btyPath+"/datadir")
remove := exec.Command("rm", "-rf", btyPath+"/datadir")
err = remove.Run()
if err != nil {
tlog.Error("rm -rf datadir","err",err)
tlog.Error("rm -rf datadir", "err", err)
return err
}
recover := exec.Command("cp","-r",backupPath,btyPath+"/datadir")
recover := exec.Command("cp", "-r", backupPath, btyPath+"/datadir")
err = recover.Run()
if err != nil {
tlog.Error("cp -r datadir_backup datadir","err",err)
tlog.Error("cp -r datadir_backup datadir", "err", err)
return err
}
StartProcess(setting.Chain33Pai.Auto)
......@@ -212,33 +211,32 @@ func recoverNode() error {
func deleteBackup() error {
s := time.Now()
defer func() {
tlog.Info("deleteBackup","cost",time.Since(s))
tlog.Info("deleteBackup", "cost", time.Since(s))
}()
backupPath := btyPath + "/datadir_backup"
if _,err := os.Stat(backupPath);err != nil {
if _, err := os.Stat(backupPath); err != nil {
if os.IsNotExist(err) {
tlog.Error("backup file not exists","err",backupPath)
tlog.Error("backup file not exists", "err", backupPath)
return nil
}
}
remove := exec.Command("rm","-rf",backupPath)
remove := exec.Command("rm", "-rf", backupPath)
err := remove.Run()
if err != nil {
tlog.Error("rm -rf datadir_backup","err",err)
tlog.Error("rm -rf datadir_backup", "err", err)
return err
}
return nil
}
func restartNode() error {
BityuanFlag.Lock.Lock()
defer BityuanFlag.Lock.Unlock()
if btyPath == "" {
tlog.Error("btyPath empty","err","node not exists")
tlog.Error("btyPath empty", "err", "node not exists")
return errors.New("node not exists")
}
_,err := SafeCloseNode()
_, err := SafeCloseNode()
if err != nil {
return err
}
......@@ -247,13 +245,13 @@ func restartNode() error {
return errors.New("bty is running")
}
StartProcess(setting.Chain33Pai.Auto)
return nil
return nil
}
func MakeSureBtyIsNotRun() bool {
s := time.Now()
defer func() {
tlog.Info("MakeSureBtyIsNotRun","cost",time.Since(s))
tlog.Info("MakeSureBtyIsNotRun", "cost", time.Since(s))
}()
num := 0
for {
......@@ -265,7 +263,7 @@ func MakeSureBtyIsNotRun() bool {
return false
}
num++
time.Sleep(time.Second*1)
time.Sleep(time.Second * 1)
}
return true
}
\ No newline at end of file
}
......@@ -8,7 +8,7 @@ var (
func GetVersion() string {
if GitCommit != "" {
return version+"-"+GitCommit
return version + "-" + GitCommit
}
return version
}
......@@ -2,57 +2,55 @@ package chain33
import (
"context"
"google.golang.org/grpc"
"github.com/33cn/chain33/types"
"google.golang.org/grpc"
)
type PaiClient struct {
}
var (
paiClient types.Chain33Client
paiClient types.Chain33Client
paiNetgrpcAddr = "localhost:8802"
)
func init() {
maxReceLimit := grpc.WithMaxMsgSize(30*1024*1024)
conn, err := grpc.Dial(paiNetgrpcAddr, grpc.WithInsecure(),maxReceLimit)
maxReceLimit := grpc.WithMaxMsgSize(30 * 1024 * 1024)
conn, err := grpc.Dial(paiNetgrpcAddr, grpc.WithInsecure(), maxReceLimit)
if err != nil {
panic(err)
}
paiClient = types.NewChain33Client(conn)
}
func (p *PaiClient) GetWalletStatus() (*types.WalletStatus,error) {
return paiClient.GetWalletStatus(context.Background(),&types.ReqNil{})
func (p *PaiClient) GetWalletStatus() (*types.WalletStatus, error) {
return paiClient.GetWalletStatus(context.Background(), &types.ReqNil{})
}
func (p *PaiClient) GetPeerInfo() (*types.PeerList,error) {
return paiClient.GetPeerInfo(context.Background(),&types.P2PGetPeerReq{})
func (p *PaiClient) GetPeerInfo() (*types.PeerList, error) {
return paiClient.GetPeerInfo(context.Background(), &types.P2PGetPeerReq{})
}
func (p *PaiClient) IsNtpClockSync() (*types.Reply,error) {
return paiClient.IsNtpClockSync(context.Background(),&types.ReqNil{})
func (p *PaiClient) IsNtpClockSync() (*types.Reply, error) {
return paiClient.IsNtpClockSync(context.Background(), &types.ReqNil{})
}
func (p *PaiClient) GetNetInfo() (*types.NodeNetInfo,error) {
return paiClient.NetInfo(context.Background(),&types.P2PGetNetInfoReq{})
func (p *PaiClient) GetNetInfo() (*types.NodeNetInfo, error) {
return paiClient.NetInfo(context.Background(), &types.P2PGetNetInfoReq{})
}
func (p *PaiClient) Version()(*types.VersionInfo,error){
return paiClient.Version(context.Background(),&types.ReqNil{})
func (p *PaiClient) Version() (*types.VersionInfo, error) {
return paiClient.Version(context.Background(), &types.ReqNil{})
}
func (p *PaiClient) Close() (*types.Reply,error) {
return paiClient.CloseQueue(context.Background(),&types.ReqNil{})
func (p *PaiClient) Close() (*types.Reply, error) {
return paiClient.CloseQueue(context.Background(), &types.ReqNil{})
}
func (p *PaiClient) Unlock(lock *types.WalletUnLock)(*types.Reply,error){
return paiClient.UnLock(context.Background(),lock)
func (p *PaiClient) Unlock(lock *types.WalletUnLock) (*types.Reply, error) {
return paiClient.UnLock(context.Background(), lock)
}
func (p *PaiClient) IsSync() (*types.Reply,error) {
return paiClient.IsSync(context.Background(),&types.ReqNil{})
func (p *PaiClient) IsSync() (*types.Reply, error) {
return paiClient.IsSync(context.Background(), &types.ReqNil{})
}
......@@ -5,21 +5,21 @@ const (
ERROR = 500
INVALID_PARAMS = 400
NETWORK_ERROR = 5004
NODE_ERROR = 5000
SUCCESS_RUNNING= 5002
ENV_ERROR = 5001
DOWNLOAD_ERROR = 5005
TAR_XVF_ERROR = 5006
CP_ERROR = 5007
RM_ERROR = 5008
MV_ERROR = 5009
TRY_LATER = 5010
DF_ERROR = 5011
VERSION_UPDATE_ERROR = 5012
NO_JOB = 5013
UNDONE = 5014
ERROR_AUTH = 5015
NETWORK_ERROR = 5004
NODE_ERROR = 5000
SUCCESS_RUNNING = 5002
ENV_ERROR = 5001
DOWNLOAD_ERROR = 5005
TAR_XVF_ERROR = 5006
CP_ERROR = 5007
RM_ERROR = 5008
MV_ERROR = 5009
TRY_LATER = 5010
DF_ERROR = 5011
VERSION_UPDATE_ERROR = 5012
NO_JOB = 5013
UNDONE = 5014
ERROR_AUTH = 5015
ERROR_EXIST_TAG = 10001
ERROR_EXIST_TAG_FAIL = 10002
ERROR_NOT_EXIST_TAG = 10003
......
......@@ -4,14 +4,14 @@ var MsgFlags = map[int]string{
SUCCESS: "ok",
ERROR: "fail",
INVALID_PARAMS: "请求参数错误",
DOWNLOAD_ERROR: "下载出错",
TAR_XVF_ERROR: "解压文件出错",
CP_ERROR: "拷贝文件出错",
RM_ERROR: "删除文件出错",
MV_ERROR: "移动文件出错",
TRY_LATER: "其他任务进行中,稍后再试",
DF_ERROR: "df命令执行异常",
VERSION_UPDATE_ERROR: "版本更新异常,请检查当前版本和更新版本",
DOWNLOAD_ERROR: "下载出错",
TAR_XVF_ERROR: "解压文件出错",
CP_ERROR: "拷贝文件出错",
RM_ERROR: "删除文件出错",
MV_ERROR: "移动文件出错",
TRY_LATER: "其他任务进行中,稍后再试",
DF_ERROR: "df命令执行异常",
VERSION_UPDATE_ERROR: "版本更新异常,请检查当前版本和更新版本",
ERROR_EXIST_TAG: "已存在该标签名称",
ERROR_EXIST_TAG_FAIL: "获取已存在标签失败",
ERROR_NOT_EXIST_TAG: "该标签不存在",
......
package logging
import (
"fmt"
"chain33-pai/pkg/file"
"fmt"
"log"
"os"
"path/filepath"
......
package pai
import (
"os/exec"
"io/ioutil"
"strings"
"bytes"
"chain33-pai/pkg/util"
"github.com/33cn/chain33/common/log"
"bytes"
"io/ioutil"
"os/exec"
"strings"
)
var tlog = log.New("pkg","pai")
var tlog = log.New("pkg", "pai")
func MonitorServer() ([]*Disk,error) {
func MonitorServer() ([]*Disk, error) {
//获取硬盘情况
cmd := exec.Command("df","-T")
cmd := exec.Command("df", "-T")
stdout, err := cmd.StdoutPipe()
err = cmd.Start()
if err != nil {
tlog.Info("MonitorServer","df -T start " ,err)
return nil,err
tlog.Info("MonitorServer", "df -T start ", err)
return nil, err
}
content, err := ioutil.ReadAll(stdout)
if err != nil {
tlog.Info("MonitorServer","ioutil readd err",err)
return nil,err
tlog.Info("MonitorServer", "ioutil readd err", err)
return nil, err
}
err = cmd.Wait()
if err != nil {
tlog.Info("MonitorServer","df -T end" ,err)
return nil,err
tlog.Info("MonitorServer", "df -T end", err)
return nil, err
}
tlog.Info("MonitorServer","content",string(content))
list := strings.Split(string(content),"\n")
tempDisk := make([]*Disk,0)
for _,v := range list {
c := strings.Contains(v,"/dev/sd")
tlog.Info("MonitorServer", "content", string(content))
list := strings.Split(string(content), "\n")
tempDisk := make([]*Disk, 0)
for _, v := range list {
c := strings.Contains(v, "/dev/sd")
if c {
tempD := &Disk{}
params := strings.Split(util.DeleteExtraSpace(v)," ")
params := strings.Split(util.DeleteExtraSpace(v), " ")
if len(params) == 7 {
tempD.Filesystem = params[0]
tempD.Type = params[1]
tempD.SizeK = params[2]
tempD.Use = params[5]
tempDisk = append(tempDisk,tempD)
tempDisk = append(tempDisk, tempD)
} else {
break
}
}
}
return tempDisk,nil
return tempDisk, nil
}
func FindAbsPath(name string) string {
var buffer bytes.Buffer
cmd:=exec.Command("find","/media","-name",name)
cmd.Stdout=&buffer
cmd := exec.Command("find", "/media", "-name", name)
cmd.Stdout = &buffer
cmd.Start()
cmd.Wait()
if buffer.String() == "" {
tlog.Error("FindAbsPath","ERR","node path not exists")
tlog.Error("FindAbsPath", "ERR", "node path not exists")
return ""
}
pathlist := strings.Split(buffer.String(),"\n")
pathlist := strings.Split(buffer.String(), "\n")
return pathlist[0]
}
\ No newline at end of file
}
......@@ -2,7 +2,7 @@ package pai
type Disk struct {
Filesystem string `json:"filesystem"`
Type string `json:"type"`//硬盘格式
SizeK string `json:"size_k"`//硬盘大小
Use string `json:"use"`
Type string `json:"type"` //硬盘格式
SizeK string `json:"size_k"` //硬盘大小
Use string `json:"use"`
}
package setting
import (
"log"
"time"
"os/exec"
"chain33-pai/pkg/chain33"
"github.com/go-ini/ini"
"github.com/33cn/chain33/types"
"github.com/go-ini/ini"
"log"
"os/exec"
"time"
)
var PaiClient *chain33.PaiClient
......@@ -63,40 +62,42 @@ type Redis struct {
MaxActive int
IdleTimeout time.Duration
}
var RedisSetting = &Redis{}
type Bityuan struct {
Path string
Path string
Name string
GitPath string
Passwd string
Version string
GitPath string
Passwd string
Version string
VersionPath string
}
var BityuanSetting=&Bityuan{}
var BityuanSetting = &Bityuan{}
type Chain33_pai struct {
Name string
Path string
Auto string
Start string
StartUp string
Scripts string
DownloadUrl string
VersionUrl string
FeedBackUrl string
IsCompleteUrl string
FeedBackNosshUrl string
IsCompleteNosshUrl string
RaspberryServer string
StopPai string
UploadVersionUrl string
UploadTestUrl string
Name string
Path string
Auto string
Start string
StartUp string
Scripts string
DownloadUrl string
VersionUrl string
FeedBackUrl string
IsCompleteUrl string
FeedBackNosshUrl string
IsCompleteNosshUrl string
RaspberryServer string
StopPai string
UploadVersionUrl string
UploadTestUrl string
}
var Chain33Pai=&Chain33_pai{}
var Chain33Pai = &Chain33_pai{}
var LogSetting=&types.Log{}
var LogSetting = &types.Log{}
var cfg *ini.File
......@@ -110,10 +111,10 @@ func Setup() {
mapTo("app", AppSetting)
mapTo("redis", RedisSetting)
mapTo("server", ServerSetting)
mapTo("chain33-pai",Chain33Pai)
mapTo("bityuan",BityuanSetting)
mapTo("chain33-pai", Chain33Pai)
mapTo("bityuan", BityuanSetting)
mapTo("database", DatabaseSetting)
mapTo("log",LogSetting)
mapTo("log", LogSetting)
AppSetting.ImageMaxSize = AppSetting.ImageMaxSize * 1024 * 1024
ServerSetting.ReadTimeout = ServerSetting.ReadTimeout * time.Second
ServerSetting.WriteTimeout = ServerSetting.WriteTimeout * time.Second
......@@ -121,20 +122,20 @@ func Setup() {
}
func FreshVersion(){
version,err:=PaiClient.Version()
if err!=nil{
auto:=exec.Command(Chain33Pai.Auto)
err=auto.Start()
if err != nil {
log.Fatalf("start node failed,need to start manually")
}
err=auto.Wait()
if err != nil {
log.Fatalf("start node failed,need to start manually")
}
func FreshVersion() {
version, err := PaiClient.Version()
if err != nil {
auto := exec.Command(Chain33Pai.Auto)
err = auto.Start()
if err != nil {
log.Fatalf("start node failed,need to start manually")
}
err = auto.Wait()
if err != nil {
log.Fatalf("start node failed,need to start manually")
}
BityuanSetting.Version=version.App
}
BityuanSetting.Version = version.App
}
// mapTo map section
......
package util
import (
"github.com/unknwon/com"
"github.com/gin-gonic/gin"
"github.com/unknwon/com"
"chain33-pai/pkg/setting"
)
......
......@@ -2,12 +2,12 @@ package util
import (
"chain33-pai/pkg/setting"
"net"
"errors"
"net/http"
"io/ioutil"
"strings"
"net"
"net/http"
"regexp"
"strings"
)
// Setup Initialize the util
......@@ -31,10 +31,10 @@ func GetLocalIP() (ipv4 *net.IPNet, err error) {
// 取第一个非lo的网卡IP
for _, addr = range addrs {
// 这个网络地址是IP地址: ipv4, ipv6
if ipNet, isIpNet = addr.(*net.IPNet); isIpNet && !ipNet.IP.IsLoopback(){
if ipNet, isIpNet = addr.(*net.IPNet); isIpNet && !ipNet.IP.IsLoopback() {
// 跳过IPV6
if ipNet.IP.To4() != nil{
ipv4 = ipNet// 192.168.1.1
if ipNet.IP.To4() != nil {
ipv4 = ipNet // 192.168.1.1
return
}
}
......@@ -46,48 +46,47 @@ func GetLocalIP() (ipv4 *net.IPNet, err error) {
func GetLocalIpByName(name string) (ipv4 *net.IPNet, err error) {
if name == "" {
return nil,errors.New("name not empty")
return nil, errors.New("name not empty")
}
inter,err := net.InterfaceByName(name)
inter, err := net.InterfaceByName(name)
if err != nil {
return nil,err
return nil, err
}
var (
addrs []net.Addr
ipNet *net.IPNet // IP地址
isIpNet bool
)
if addrs,err = inter.Addrs(); err != nil {
return nil,err
if addrs, err = inter.Addrs(); err != nil {
return nil, err
}
for _, addr := range addrs {
if ipNet, isIpNet = addr.(*net.IPNet); isIpNet && !ipNet.IP.IsLoopback(){
if ipNet, isIpNet = addr.(*net.IPNet); isIpNet && !ipNet.IP.IsLoopback() {
// 跳过IPV6
if ipNet.IP.To4() != nil{
ipv4 = ipNet// 192.168.1.1
if ipNet.IP.To4() != nil {
ipv4 = ipNet // 192.168.1.1
return
}
}
}
return nil,nil
return nil, nil
}
func GetExternal() (string,error) {
func GetExternal() (string, error) {
resp, err := http.Get("http://myexternalip.com/raw")
if err != nil {
return "",err
return "", err
}
defer resp.Body.Close()
content,_ := ioutil.ReadAll(resp.Body)
return string(content),nil
content, _ := ioutil.ReadAll(resp.Body)
return string(content), nil
}
//两个以上空格替换成一个空格
func DeleteExtraSpace(s string) string {
//删除字符串中的多余空格,有多个空格时,仅保留一个空格
s1 := strings.Replace(s, " ", " ", -1) //替换tab为空格
s1 := strings.Replace(s, " ", " ", -1) //替换tab为空格
regstr := "\\s{2,}" //两个及两个以上空格的正则表达式
reg, _ := regexp.Compile(regstr) //编译正则表达式
s2 := make([]byte, len(s1)) //定义字符数组切片
......@@ -129,4 +128,3 @@ func VersionCompare(version string) string {
}
return string(vo)
}
package api
import (
"net/http"
"github.com/astaxie/beego/validation"
"github.com/gin-gonic/gin"
"chain33-pai/pkg/app"
"chain33-pai/pkg/e"
"chain33-pai/pkg/util"
"chain33-pai/service/auth_service"
)
type auth struct {
Username string `valid:"Required; MaxSize(50)"`
Password string `valid:"Required; MaxSize(50)"`
}
// @Summary Get Auth
// @Produce json
// @Param username query string true "userName"
// @Param password query string true "password"
// @Success 200 {object} app.Response
// @Failure 500 {object} app.Response
// @Router /auth [get]
func GetAuth(c *gin.Context) {
appG := app.Gin{C: c}
valid := validation.Validation{}
username := c.Query("username")
password := c.Query("password")
a := auth{Username: username, Password: password}
ok, _ := valid.Valid(&a)
if !ok {
app.MarkErrors(valid.Errors)
appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
return
}
authService := auth_service.Auth{Username: username, Password: password}
isExist, err := authService.Check()
if err != nil {
appG.Response(http.StatusInternalServerError, e.ERROR_AUTH_CHECK_TOKEN_FAIL, nil)
return
}
if !isExist {
appG.Response(http.StatusUnauthorized, e.ERROR_AUTH, nil)
return
}
token, err := util.GenerateToken(username, password)
if err != nil {
appG.Response(http.StatusInternalServerError, e.ERROR_AUTH_TOKEN, nil)
return
}
appG.Response(http.StatusOK, e.SUCCESS, map[string]string{
"token": token,
})
}
This diff is collapsed.
package v1
import (
"os"
"net/http"
"chain33-pai/pkg/e"
"chain33-pai/pkg/app"
"github.com/gin-gonic/gin"
"chain33-pai/service/pai_service"
"chain33-pai/pkg/e"
"chain33-pai/pkg/pai"
"chain33-pai/pkg/setting"
"os/exec"
log "github.com/33cn/chain33/common/log/log15"
"chain33-pai/pkg/util"
"chain33-pai/pkg/pai"
"chain33-pai/service/pai_service"
log "github.com/33cn/chain33/common/log/log15"
"github.com/gin-gonic/gin"
"net/http"
"os"
"os/exec"
)
var tlog = log.New("api", "v1")
......@@ -40,18 +40,18 @@ func GetDevstatus(c *gin.Context) {
//获取chain33-pai程序版本
func GetPaiVersion(c *gin.Context) {
appG := app.Gin{C:c}
appG := app.Gin{C: c}
version := app.GetVersion()
var pai pai_service.Pai
latest,err := pai.GetPaiLatestVersion(int32(2))
latest, err := pai.GetPaiLatestVersion(int32(2))
if err != nil {
appG.Response(http.StatusOK, e.NETWORK_ERROR, nil)
return
}
appG.Response(http.StatusOK, e.SUCCESS, gin.H{
"current":version,
"latest":latest,
"current": version,
"latest": latest,
})
}
......@@ -59,7 +59,7 @@ func GetPaiVersion(c *gin.Context) {
//具体更新逻辑写在代码 更新迭代比较麻烦 改为下面new方法
//下载地址阿里云oss地址 固定ip格式+/+chain33-pai+x.x.x+.tar.gz
func UpdatePai(c *gin.Context) {
appG := app.Gin{C:c}
appG := app.Gin{C: c}
if app.DPercent.Flag {
appG.Response(http.StatusOK, e.DOWNLOAD_ERROR, "正在升级中,不要重复点击")
return
......@@ -83,7 +83,7 @@ func UpdatePai(c *gin.Context) {
}
//检查版本号是否存在于online数据库
var pai pai_service.Pai
latest,err := pai.GetPaiLatestVersion(int32(2))
latest, err := pai.GetPaiLatestVersion(int32(2))
if err != nil {
appG.Response(http.StatusOK, e.DOWNLOAD_ERROR, err)
app.DPercent.Flag = false
......@@ -96,102 +96,102 @@ func UpdatePai(c *gin.Context) {
app.DPercent.Flag = false
return
}
name := setting.Chain33Pai.Name+"_"+req.Version+".tar.gz"
url := setting.Chain33Pai.DownloadUrl+ name
name := setting.Chain33Pai.Name + "_" + req.Version + ".tar.gz"
url := setting.Chain33Pai.DownloadUrl + name
//oss下载更新包
err = app.DownLoadFile(url,name,int32(2))
err = app.DownLoadFile(url, name, int32(2))
if err != nil {
appG.Response(http.StatusOK, e.DOWNLOAD_ERROR, err)
app.DPercent.Flag = false
return
}
//解压缩文件
tar := exec.Command("tar","-xvf",name)
tar := exec.Command("tar", "-xvf", name)
err = tar.Start()
if err != nil {
tlog.Error("tar","err",err)
tlog.Error("tar", "err", err)
appG.Response(http.StatusOK, e.TAR_XVF_ERROR, err)
app.DPercent.Flag = false
return
}
err = tar.Wait()
if err != nil {
tlog.Error("tar","err",err)
tlog.Error("tar", "err", err)
appG.Response(http.StatusOK, e.TAR_XVF_ERROR, err)
app.DPercent.Flag = false
return
}
//备份原文件 确保没有alias 关联
bak := exec.Command("cp",setting.Chain33Pai.Name,setting.Chain33Pai.Name+".bak")
bak := exec.Command("cp", setting.Chain33Pai.Name, setting.Chain33Pai.Name+".bak")
err = bak.Start()
if err != nil {
tlog.Error("bak","err",err)
tlog.Error("bak", "err", err)
appG.Response(http.StatusOK, e.CP_ERROR, err)
app.DPercent.Flag = false
return
}
err = bak.Wait()
if err != nil {
tlog.Error("bak","err",err)
tlog.Error("bak", "err", err)
appG.Response(http.StatusOK, e.CP_ERROR, err)
app.DPercent.Flag = false
return
}
//备份配置文件
bakconf := exec.Command("cp","conf/app.ini","conf/app.ini.bak")
bakconf := exec.Command("cp", "conf/app.ini", "conf/app.ini.bak")
err = bakconf.Start()
if err != nil {
tlog.Error("bakconf","err",err)
tlog.Error("bakconf", "err", err)
appG.Response(http.StatusOK, e.CP_ERROR, err)
app.DPercent.Flag = false
return
}
err = bakconf.Wait()
if err != nil {
tlog.Error("bakconf","err",err)
tlog.Error("bakconf", "err", err)
appG.Response(http.StatusOK, e.CP_ERROR, err)
app.DPercent.Flag = false
return
}
//替换原执行文件
mv := exec.Command("mv",setting.Chain33Pai.Name+"_"+req.Version+"/"+setting.Chain33Pai.Name,".")
mv := exec.Command("mv", setting.Chain33Pai.Name+"_"+req.Version+"/"+setting.Chain33Pai.Name, ".")
err = mv.Start()
if err != nil {
tlog.Error("mv","err",err)
tlog.Error("mv", "err", err)
appG.Response(http.StatusOK, e.MV_ERROR, err)
app.DPercent.Flag = false
return
}
err = mv.Wait()
if err != nil {
tlog.Error("mv","err",err)
tlog.Error("mv", "err", err)
appG.Response(http.StatusOK, e.MV_ERROR, err)
app.DPercent.Flag = false
return
}
//替换配置文件
mvconf := exec.Command("mv",setting.Chain33Pai.Name+"_"+req.Version+"/conf/app.ini","conf")
mvconf := exec.Command("mv", setting.Chain33Pai.Name+"_"+req.Version+"/conf/app.ini", "conf")
err = mvconf.Start()
if err != nil {
tlog.Error("mvconf","err",err)
tlog.Error("mvconf", "err", err)
appG.Response(http.StatusOK, e.MV_ERROR, err)
app.DPercent.Flag = false
return
}
err = mvconf.Wait()
if err != nil {
tlog.Error("mvconf","err",err)
tlog.Error("mvconf", "err", err)
appG.Response(http.StatusOK, e.MV_ERROR, err)
app.DPercent.Flag = false
return
}
os.RemoveAll("scripts")
os.Mkdir("scripts",0600)
os.RemoveAll("scripts")
os.Mkdir("scripts", 0600)
//删除temp文件夹
//替换原执行文件
app.MVScripts(setting.Chain33Pai.Name+"_"+req.Version,".")
app.MVScripts(setting.Chain33Pai.Name+"_"+req.Version, ".")
remove := exec.Command("rm","-rf",setting.Chain33Pai.Name+"_"+req.Version,name)
remove := exec.Command("rm", "-rf", setting.Chain33Pai.Name+"_"+req.Version, name)
err = remove.Start()
if err != nil {
appG.Response(http.StatusOK, e.RM_ERROR, err)
......@@ -212,7 +212,7 @@ func UpdatePai(c *gin.Context) {
//忽略req.Version 对比自己版本和最新版本 直接更新覆盖最新版本
//下载地址阿里云oss地址 固定ip格式+/+chain33-pai+x.x.x+.tar.gz
func UpdatePaiNew(c *gin.Context) {
appG := app.Gin{C:c}
appG := app.Gin{C: c}
if app.DPercent.Flag {
appG.Response(http.StatusOK, e.DOWNLOAD_ERROR, "正在升级中,不要重复点击")
return
......@@ -238,18 +238,17 @@ func UpdatePaiNew(c *gin.Context) {
appG.Response(http.StatusOK, e.SUCCESS, nil)
}
func GetDPercent(c *gin.Context) {
appG := app.Gin{C:c}
appG := app.Gin{C: c}
appG.Response(http.StatusOK, e.SUCCESS, gin.H{
"total":app.DPercent.Total,
"current":app.DPercent.Current,
"total": app.DPercent.Total,
"current": app.DPercent.Current,
})
}
func GetExternal(c *gin.Context) {
appG := app.Gin{C:c}
ip,err := util.GetExternal()
appG := app.Gin{C: c}
ip, err := util.GetExternal()
if err != nil {
appG.Response(http.StatusOK, e.ERROR, "get external ip err")
return
......@@ -258,12 +257,12 @@ func GetExternal(c *gin.Context) {
}
func GetServerStatus(c *gin.Context) {
appG := app.Gin{C:c}
disks,err := pai.MonitorServer()
appG := app.Gin{C: c}
disks, err := pai.MonitorServer()
if err != nil {
appG.Response(http.StatusOK, e.ERROR, err)
return
}
app.ServerStatus.Disks = disks
appG.Response(http.StatusOK, e.SUCCESS, app.ServerStatus)
}
\ No newline at end of file
}
package routers
import (
"github.com/gin-gonic/gin"
_ "chain33-pai/docs"
"chain33-pai/routers/api/v1"
"github.com/gin-gonic/gin"
"net/http"
)
// InitRouter initialize routing information
func InitRouter() *gin.Engine {
r := gin.New()
r.Use(gin.Logger())
r.Use(gin.Recovery())
r.Use(Cors())
r := gin.New()
r.Use(gin.Logger())
r.Use(gin.Recovery())
r.Use(Cors())
apiv1 := r.Group("/pai")
//获取树莓派基本信息
apiv1.POST("/devdetail",v1.GetDevdetail)
apiv1.POST("/devdetail", v1.GetDevdetail)
//获取树莓派基本信息
apiv1.POST("/resetwallet",v1.ResetWallet)
apiv1.POST("/resetwallet", v1.ResetWallet)
//更新bityuan节点 下载替换 重启
apiv1.POST("/updatenode",v1.UpdateNodeNew)
apiv1.POST("/updatenode", v1.UpdateNodeNew)
//检查节点是否还在更新同步 节点6.4.0大版本更新可能需要十几个小时 故加此接口
apiv1.POST("/nodeupdate",v1.UpdateNodeStatus)
apiv1.POST("/devstatus",v1.GetDevstatus)
apiv1.POST("/updatedetail",v1.UpdateDetail)
apiv1.POST("/version",v1.Version)
apiv1.POST("/reset",v1.ResetNode)
apiv1.POST("/nodeinfo",v1.NodeInfo)
apiv1.POST("/nodeupdate", v1.UpdateNodeStatus)
apiv1.POST("/devstatus", v1.GetDevstatus)
apiv1.POST("/updatedetail", v1.UpdateDetail)
apiv1.POST("/version", v1.Version)
apiv1.POST("/reset", v1.ResetNode)
apiv1.POST("/nodeinfo", v1.NodeInfo)
//本程序版本
apiv1.POST("/paiversion",v1.GetPaiVersion)
apiv1.POST("/paiversion", v1.GetPaiVersion)
//本程序下载新版本
apiv1.POST("/updatepai",v1.UpdatePaiNew)
apiv1.POST("/updatepai", v1.UpdatePaiNew)
//获取下载进度
apiv1.POST("/dpercent",v1.GetDPercent)
apiv1.POST("/dpercent", v1.GetDPercent)
//获取外网ip
apiv1.POST("/external",v1.GetExternal)
apiv1.POST("/external", v1.GetExternal)
//服务器状态
apiv1.POST("/serverstatus",v1.GetServerStatus)
apiv1.POST("/serverstatus", v1.GetServerStatus)
//反馈信息
apiv1.POST("/feedback",v1.FeedBackWithoutSSH)
apiv1.POST("/feedback", v1.FeedBackWithoutSSH)
//反馈处理进度
apiv1.POST("/iscomplete",v1.FeedBackStatusWithoutSSH)
apiv1.POST("/iscomplete", v1.FeedBackStatusWithoutSSH)
//反馈信息
apiv1.POST("/feedback1",v1.FeedBack)
apiv1.POST("/feedback1", v1.FeedBack)
//反馈处理进度
apiv1.POST("/iscomplete1",v1.FeedBackStatus)
apiv1.POST("/escrowpassword",v1.EscrowPasswd)
apiv1.POST("/iscomplete1", v1.FeedBackStatus)
apiv1.POST("/escrowpassword", v1.EscrowPasswd)
//pai更新完成用户手动重启设备
//apiv1.POST("/isreboot",v1.IsReBoot)
//重启节点
apiv1.POST("/restartnode",v1.RestartNode)
apiv1.POST("/restartnode", v1.RestartNode)
//安全关闭节点,不会再重启 除非是重启树莓派
apiv1.POST("/closenode",v1.CloseNode)
apiv1.POST("/closenode", v1.CloseNode)
//sudo poweroff
apiv1.POST("/poweroff",v1.PoweroffPai)
apiv1.POST("/poweroff", v1.PoweroffPai)
//test
apiv1.POST("/test",v1.Test)
apiv1.POST("/test", v1.Test)
//回滚1000区块
apiv1.POST("/rollback",v1.Rollback)
apiv1.POST("/rollback", v1.Rollback)
//一键备份 40g
apiv1.POST("/nodebackup",v1.NodeBackup)
apiv1.POST("/nodebackup", v1.NodeBackup)
//一键恢复 针对不同步 并且 回滚多次还不同步的情况下拿最近的备份恢复
apiv1.POST("/noderecover",v1.NodeRecover)
apiv1.POST("/noderecover", v1.NodeRecover)
//删除备份
apiv1.POST("/delbackup",v1.DelBackup)
apiv1.POST("/delbackup", v1.DelBackup)
//是否备份
apiv1.POST("/isbackup",v1.CheckBackup)
apiv1.POST("/isbackup", v1.CheckBackup)
return r
}
......
package pai_service
import (
"os/exec"
"io"
"strings"
"bufio"
"bytes"
"chain33-pai/pkg/chain33"
"github.com/33cn/chain33/types"
"chain33-pai/pkg/pai"
"chain33-pai/pkg/setting"
"encoding/json"
"errors"
log "github.com/33cn/chain33/common/log/log15"
"net/http"
"bytes"
"github.com/33cn/chain33/types"
"io"
"io/ioutil"
"encoding/json"
"chain33-pai/pkg/setting"
"chain33-pai/pkg/pai"
"net/http"
"os"
"errors"
"os/exec"
"strconv"
"strings"
)
var (
pai_serial string
tlog = log.New("service", "pai_Service")
tlog = log.New("service", "pai_Service")
)
//在网络通畅的情况下 ENum 每30s +1 20=>restart 40 => rollback 60 =>recover
type Pai struct {
Hardware string `json:"hardware"`
Revision string `json:"revision"`
Revision string `json:"revision"`
Serial string `json:"serial"`
//PeerList *types.PeerList
LocalLastHeight int64 `json:"local_last_height"`
LastHeight int64 `json:"last_height"`
IsNtpSync bool `json:"is_ntp_sync"`
WalletStatus *types.WalletStatus `json:"wallet_status"`
NetInfo *types.NodeNetInfo `json:"net_info"`
BtyVersion *types.VersionInfo `json:"bty_version"`
Err string `json:"err"`
Arch string `json:"arch"`
Disks []*pai.Disk
IsBackup bool `json:"is_backup"`
ENum int64 `json:"e_num"`
LocalLastHeight int64 `json:"local_last_height"`
LastHeight int64 `json:"last_height"`
IsNtpSync bool `json:"is_ntp_sync"`
WalletStatus *types.WalletStatus `json:"wallet_status"`
NetInfo *types.NodeNetInfo `json:"net_info"`
BtyVersion *types.VersionInfo `json:"bty_version"`
Err string `json:"err"`
Arch string `json:"arch"`
Disks []*pai.Disk
IsBackup bool `json:"is_backup"`
ENum int64 `json:"e_num"`
LocalLastHeight2 int64 `json:"local_last_height_2"`
ProLevel int64 `json:"pro_level"`
Temp int64 `json:"temp"`
ProLevel int64 `json:"pro_level"`
Temp int64 `json:"temp"`
}
type ReqUpdatePai struct {
......@@ -69,13 +69,13 @@ func (p *Pai) SetPaiEnv() error {
cmd.Stdout = &buf
cmd.Run()
arch := buf.String()
p.Arch = strings.Replace(arch,"\n","",-1)
p.Arch = strings.Replace(arch, "\n", "", -1)
return nil
}
func (p *Pai) GetBtyVersion() error {
client := &chain33.PaiClient{}
v,err := client.Version()
v, err := client.Version()
if err != nil {
p.Err = err.Error()
return err
......@@ -91,12 +91,12 @@ func (p *Pai) GetConfig() bool {
if p.Serial != "" {
return true
}
config ,err := getPaiConfig("cat","/proc/cpuinfo")
config, err := getPaiConfig("cat", "/proc/cpuinfo")
if err != nil {
p.Err = err.Error()
return false
}
if _,ok := config["serial"];ok {
if _, ok := config["serial"]; ok {
p.Serial = config["serial"]
p.Hardware = config["hardware"]
p.Revision = config["revision"]
......@@ -107,14 +107,14 @@ func (p *Pai) GetConfig() bool {
func (p *Pai) GetDevstatus() error {
client := &chain33.PaiClient{}
peerinfo,err := client.GetPeerInfo()
peerinfo, err := client.GetPeerInfo()
if err != nil {
tlog.Error("GetDevstatus peerinfo ","err",err)
tlog.Error("GetDevstatus peerinfo ", "err", err)
p.Err = err.Error()
return err
}
for _,v := range peerinfo.Peers {
for _, v := range peerinfo.Peers {
if p.LastHeight < v.Header.Height {
p.LastHeight = v.Header.Height
}
......@@ -122,31 +122,31 @@ func (p *Pai) GetDevstatus() error {
p.LocalLastHeight = v.Header.Height
}
}
sync ,err := client.IsNtpClockSync()
sync, err := client.IsNtpClockSync()
if err != nil {
p.Err = err.Error()
tlog.Error("GetDevstatus IsNtpClockSync"," err",err)
tlog.Error("GetDevstatus IsNtpClockSync", " err", err)
return err
}
p.IsNtpSync = sync.IsOk
netinfo,err := client.GetNetInfo()
netinfo, err := client.GetNetInfo()
if err != nil {
p.Err = err.Error()
tlog.Error("GetDevstatus GetNetInfo"," err",err)
tlog.Error("GetDevstatus GetNetInfo", " err", err)
return err
}
p.NetInfo = netinfo
walletstatus,err := client.GetWalletStatus()
walletstatus, err := client.GetWalletStatus()
if err != nil {
p.Err = err.Error()
tlog.Error("GetDevstatus GetWalletStatus ","err",err)
tlog.Error("GetDevstatus GetWalletStatus ", "err", err)
return err
}
p.WalletStatus = walletstatus
return nil
}
func getPaiConfig(command string ,arg ...string) (config map[string]string,err error) {
func getPaiConfig(command string, arg ...string) (config map[string]string, err error) {
//获取操作系统版本信息
list := make(map[string]string, 0)
......@@ -154,20 +154,20 @@ func getPaiConfig(command string ,arg ...string) (config map[string]string,err e
stdout, err := cmd.StdoutPipe()
//tlog.Info(stdout)
if err != nil {
tlog.Info("getPaiConfig",err)
return nil,err
tlog.Info("getPaiConfig", err)
return nil, err
}
defer stdout.Close()
if err := cmd.Start(); err != nil {
tlog.Info("getPaiConfig",err)
return nil,err
tlog.Info("getPaiConfig", err)
return nil, err
}
rd := bufio.NewReader(stdout)
for {
line, err := rd.ReadString('\n')
if err!=nil || io.EOF==err{
if err != nil || io.EOF == err {
break
}else{
} else {
//tlog.Info("line", line)
l := strings.Split(line, ":")
......@@ -188,33 +188,33 @@ func getPaiConfig(command string ,arg ...string) (config map[string]string,err e
return list, nil
}
func (p *Pai) GetPaiLatestVersion(t int32) (string,error) {
func (p *Pai) GetPaiLatestVersion(t int32) (string, error) {
data := make(map[string]interface{})
data["type"] = t
bytesData, _ := json.Marshal(data)
resp, err := http.Post(setting.Chain33Pai.VersionUrl,"application/json", bytes.NewReader(bytesData))
resp, err := http.Post(setting.Chain33Pai.VersionUrl, "application/json", bytes.NewReader(bytesData))
if err != nil {
return "",err
return "", err
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return "",err
return "", err
}
type res struct {
Code int64
Msg string
Msg string
Data string
}
var r res
err = json.Unmarshal(body,&r)
err = json.Unmarshal(body, &r)
if err != nil {
return "",err
return "", err
}
return r.Data,nil
return r.Data, nil
}
func (p *Pai) GetDiskUseage() error {
disks,err := pai.MonitorServer()
disks, err := pai.MonitorServer()
if err != nil {
return err
}
......@@ -227,14 +227,14 @@ func (p *Pai) GetDiskUseage() error {
func (p *Pai) CheckBackup() error {
path := pai.FindAbsPath("wallet-bty")
if path == "" {
tlog.Error("IsBackup","path","node not exists")
tlog.Error("IsBackup", "path", "node not exists")
//p.IsBackup = false
return errors.New("node not exists")
}
backupPath := path + "/datadir_backup"
if _,err := os.Stat(backupPath);err != nil {
if _, err := os.Stat(backupPath); err != nil {
if os.IsNotExist(err) {
tlog.Error("backup file not exists","err",backupPath)
tlog.Error("backup file not exists", "err", backupPath)
p.IsBackup = false
return errors.New("backup file not exists")
}
......@@ -245,16 +245,16 @@ func (p *Pai) CheckBackup() error {
func (p *Pai) GetTemp() error {
var b bytes.Buffer
cmd := exec.Command("cat","/sys/class/thermal/thermal_zone0/temp")
cmd := exec.Command("cat", "/sys/class/thermal/thermal_zone0/temp")
cmd.Stdout = &b
err := cmd.Run()
if err != nil {
return err
}
list := strings.Split(b.String(),"\n")
list := strings.Split(b.String(), "\n")
if list[0] != "" {
temp,_ := strconv.Atoi(list[0])
temp, _ := strconv.Atoi(list[0])
p.Temp = int64(temp)
}
return nil
}
\ No newline at end of file
}
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