Files
EdgeAdmin/cmd/edge-admin/main.go

161 lines
4.3 KiB
Go
Raw Normal View History

2020-07-22 09:59:40 +08:00
package main
import (
2021-01-12 11:49:37 +08:00
"fmt"
2020-07-22 09:59:40 +08:00
"github.com/TeaOSLab/EdgeAdmin/internal/apps"
"github.com/TeaOSLab/EdgeAdmin/internal/configs"
2020-07-22 09:59:40 +08:00
teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const"
2021-11-22 12:08:53 +08:00
"github.com/TeaOSLab/EdgeAdmin/internal/gen"
2020-10-14 14:46:22 +08:00
"github.com/TeaOSLab/EdgeAdmin/internal/nodes"
2022-09-06 21:19:37 +08:00
"github.com/TeaOSLab/EdgeAdmin/internal/utils"
2020-07-22 09:59:40 +08:00
_ "github.com/TeaOSLab/EdgeAdmin/internal/web"
_ "github.com/iwind/TeaGo/bootstrap"
2022-01-19 15:58:54 +08:00
"github.com/iwind/TeaGo/maps"
2021-07-20 17:15:17 +08:00
"github.com/iwind/gosock/pkg/gosock"
2022-09-06 21:19:37 +08:00
"log"
"time"
2020-07-22 09:59:40 +08:00
)
func main() {
2022-09-06 21:19:37 +08:00
var app = apps.NewAppCmd().
2020-07-22 09:59:40 +08:00
Version(teaconst.Version).
Product(teaconst.ProductName).
2022-09-06 21:19:37 +08:00
Usage(teaconst.ProcessName+" [-v|start|stop|restart|service|daemon|reset|recover|demo|upgrade]").
Usage(teaconst.ProcessName+" [dev|prod]").
Option("-h", "show this help").
Option("-v", "show version").
Option("start", "start the service").
Option("stop", "stop the service").
Option("restart", "restart the service").
Option("service", "register service into systemd").
Option("daemon", "start the service with daemon").
2021-07-20 17:15:17 +08:00
Option("reset", "reset configs").
Option("recover", "enter recovery mode").
Option("demo", "switch to demo mode").
Option("dev", "switch to 'dev' mode").
2022-09-06 21:19:37 +08:00
Option("prod", "switch to 'prod' mode").
Option("upgrade", "upgrade from official site")
2020-07-22 09:59:40 +08:00
2021-01-12 11:49:37 +08:00
app.On("daemon", func() {
nodes.NewAdminNode().Daemon()
})
app.On("service", func() {
err := nodes.NewAdminNode().InstallSystemService()
if err != nil {
fmt.Println("[ERROR]install failed: " + err.Error())
return
2021-01-12 11:49:37 +08:00
}
fmt.Println("done")
})
app.On("reset", func() {
err := configs.ResetAPIConfig()
if err != nil {
fmt.Println("[ERROR]reset failed: " + err.Error())
return
}
fmt.Println("done")
})
2021-07-20 17:15:17 +08:00
app.On("recover", func() {
sock := gosock.NewTmpSock(teaconst.ProcessName)
if !sock.IsListening() {
fmt.Println("[ERROR]the service not started yet, you should start the service first")
return
}
_, err := sock.Send(&gosock.Command{Code: "recover"})
if err != nil {
fmt.Println("[ERROR]enter recovery mode failed: " + err.Error())
return
}
fmt.Println("enter recovery mode successfully")
})
app.On("demo", func() {
sock := gosock.NewTmpSock(teaconst.ProcessName)
if !sock.IsListening() {
fmt.Println("[ERROR]the service not started yet, you should start the service first")
return
}
2022-01-19 15:58:54 +08:00
reply, err := sock.Send(&gosock.Command{Code: "demo"})
if err != nil {
fmt.Println("[ERROR]change demo mode failed: " + err.Error())
return
}
2022-01-19 15:58:54 +08:00
var isDemo = maps.NewMap(reply.Params).GetBool("isDemo")
if isDemo {
fmt.Println("change demo mode to: on")
} else {
fmt.Println("change demo mode to: off")
}
})
2021-11-22 12:08:53 +08:00
app.On("generate", func() {
err := gen.Generate()
if err != nil {
fmt.Println("generate failed: " + err.Error())
return
}
})
app.On("dev", func() {
var env = "dev"
var sock = gosock.NewTmpSock(teaconst.ProcessName)
_, err := sock.Send(&gosock.Command{
Code: env,
Params: nil,
})
if err != nil {
fmt.Println("failed to switch to '" + env + "': " + err.Error())
} else {
fmt.Println("switch to '" + env + "' ok")
}
})
app.On("prod", func() {
var env = "prod"
var sock = gosock.NewTmpSock(teaconst.ProcessName)
_, err := sock.Send(&gosock.Command{
Code: env,
Params: nil,
})
if err != nil {
fmt.Println("failed to switch to '" + env + "': " + err.Error())
} else {
fmt.Println("switch to '" + env + "' ok")
}
})
2022-09-06 21:19:37 +08:00
app.On("upgrade", func() {
var manager = utils.NewUpgradeManager("admin")
log.Println("checking latest version ...")
var ticker = time.NewTicker(1 * time.Second)
go func() {
var lastProgress float32 = 0
var isStarted = false
for range ticker.C {
if manager.IsDownloading() {
if !isStarted {
log.Println("start downloading v" + manager.NewVersion() + " ...")
isStarted = true
}
var progress = manager.Progress()
if progress >= 0 {
if progress == 0 || progress == 1 || progress-lastProgress >= 0.1 {
lastProgress = progress
log.Println(fmt.Sprintf("%.2f%%", manager.Progress()*100))
}
}
} else {
break
}
}
}()
err := manager.Start()
if err != nil {
log.Println("upgrade failed: " + err.Error())
return
}
log.Println("finished!")
log.Println("restarting ...")
app.RunRestart()
})
2020-07-22 09:59:40 +08:00
app.Run(func() {
2022-09-06 21:19:37 +08:00
var adminNode = nodes.NewAdminNode()
2020-10-14 14:46:22 +08:00
adminNode.Run()
2020-07-22 09:59:40 +08:00
})
}