Files
EdgeAPI/cmd/edge-api/main.go

169 lines
4.1 KiB
Go
Raw Normal View History

2020-07-21 17:27:00 +08:00
package main
import (
2020-10-13 20:05:13 +08:00
"encoding/json"
"flag"
2020-10-13 20:10:42 +08:00
"fmt"
2020-07-22 22:17:53 +08:00
"github.com/TeaOSLab/EdgeAPI/internal/apps"
teaconst "github.com/TeaOSLab/EdgeAPI/internal/const"
2020-10-04 14:27:14 +08:00
"github.com/TeaOSLab/EdgeAPI/internal/nodes"
2020-10-13 20:05:13 +08:00
"github.com/TeaOSLab/EdgeAPI/internal/setup"
2020-09-16 09:09:21 +08:00
_ "github.com/TeaOSLab/EdgeAPI/internal/tasks"
2020-10-13 20:05:13 +08:00
"github.com/iwind/TeaGo/Tea"
2020-07-21 17:27:00 +08:00
_ "github.com/iwind/TeaGo/bootstrap"
2020-10-13 20:05:13 +08:00
"github.com/iwind/TeaGo/maps"
"github.com/iwind/TeaGo/types"
"github.com/iwind/gosock/pkg/gosock"
"io/ioutil"
2020-10-13 20:05:13 +08:00
"log"
"os"
2020-07-21 17:27:00 +08:00
)
func main() {
2020-10-13 20:05:13 +08:00
if !Tea.IsTesting() {
Tea.Env = "prod"
}
var app = apps.NewAppCmd()
2020-07-22 22:17:53 +08:00
app.Version(teaconst.Version)
app.Product(teaconst.ProductName)
app.Usage(teaconst.ProcessName + " [start|stop|restart|setup|upgrade|service|daemon|issues]")
2020-10-13 20:05:13 +08:00
app.On("setup", func() {
var setupCmd = setup.NewSetupFromCmd()
2020-10-13 20:05:13 +08:00
err := setupCmd.Run()
result := maps.Map{}
if err != nil {
result["isOk"] = false
result["error"] = err.Error()
} else {
result["isOk"] = true
result["adminNodeId"] = setupCmd.AdminNodeId
result["adminNodeSecret"] = setupCmd.AdminNodeSecret
}
resultJSON, err := json.Marshal(result)
if err != nil {
log.Fatal(err.Error())
}
_, _ = os.Stdout.Write(resultJSON)
})
2020-10-13 20:10:42 +08:00
app.On("upgrade", func() {
fmt.Println("start ...")
2020-10-13 20:10:42 +08:00
executor, err := setup.NewSQLExecutorFromCmd()
if err != nil {
fmt.Println("ERROR: " + err.Error())
return
}
2021-08-05 19:53:54 +08:00
err = executor.Run(true)
2020-10-13 20:10:42 +08:00
if err != nil {
fmt.Println("ERROR: " + err.Error())
return
}
fmt.Println("finished!")
})
2021-01-12 11:49:14 +08:00
app.On("daemon", func() {
nodes.NewAPINode().Daemon()
})
app.On("service", func() {
err := nodes.NewAPINode().InstallSystemService()
if err != nil {
fmt.Println("[ERROR]install failed: " + err.Error())
return
2021-01-12 11:49:14 +08:00
}
fmt.Println("done")
})
app.On("goman", func() {
var sock = gosock.NewTmpSock(teaconst.ProcessName)
reply, err := sock.Send(&gosock.Command{Code: "goman"})
if err != nil {
fmt.Println("[ERROR]" + err.Error())
} else {
instancesJSON, err := json.MarshalIndent(reply.Params, "", " ")
if err != nil {
fmt.Println("[ERROR]" + err.Error())
} else {
fmt.Println(string(instancesJSON))
}
}
})
2022-01-19 16:53:52 +08:00
app.On("debug", func() {
var sock = gosock.NewTmpSock(teaconst.ProcessName)
reply, err := sock.Send(&gosock.Command{Code: "debug"})
if err != nil {
fmt.Println("[ERROR]" + err.Error())
} else {
var isDebug = maps.NewMap(reply.Params).GetBool("debug")
if isDebug {
fmt.Println("debug on")
} else {
fmt.Println("debug off")
}
}
})
app.On("db.stmt.prepare", func() {
var sock = gosock.NewTmpSock(teaconst.ProcessName)
reply, err := sock.Send(&gosock.Command{Code: "db.stmt.prepare"})
if err != nil {
fmt.Println("[ERROR]" + err.Error())
} else {
var isOn = maps.NewMap(reply.Params).GetBool("isOn")
if isOn {
fmt.Println("show statements: on")
} else {
fmt.Println("show statements: off")
}
}
})
app.On("db.stmt.count", func() {
var sock = gosock.NewTmpSock(teaconst.ProcessName)
reply, err := sock.Send(&gosock.Command{Code: "db.stmt.count"})
if err != nil {
fmt.Println("[ERROR]" + err.Error())
} else {
var count = maps.NewMap(reply.Params).GetInt("count")
fmt.Println("prepared statements count: " + types.String(count))
}
})
app.On("issues", func() {
var flagSet = flag.NewFlagSet("issues", flag.ExitOnError)
var formatJSON = false
flagSet.BoolVar(&formatJSON, "json", false, "")
_ = flagSet.Parse(os.Args[2:])
data, err := ioutil.ReadFile(Tea.LogFile("issues.log"))
if err != nil {
if formatJSON {
fmt.Print("[]")
} else {
fmt.Println("no issues yet")
}
} else {
var issueMaps = []maps.Map{}
err = json.Unmarshal(data, &issueMaps)
if err != nil {
if formatJSON {
fmt.Print("[]")
} else {
fmt.Println("no issues yet")
}
} else {
if formatJSON {
fmt.Print(string(data))
} else {
if len(issueMaps) == 0 {
fmt.Println("no issues yet")
} else {
for i, issue := range issueMaps {
fmt.Println("issue " + types.String(i+1) + ": " + issue.GetString("message"))
}
}
}
}
}
})
2020-07-22 22:17:53 +08:00
app.Run(func() {
2020-10-04 14:27:14 +08:00
nodes.NewAPINode().Start()
2020-07-22 22:17:53 +08:00
})
2020-07-21 17:27:00 +08:00
}