package program
|
|
|
|
import (
|
|
"etcd/program/api"
|
|
v1 "etcd/program/api/v1"
|
|
"etcd/program/config"
|
|
"etcd/program/logger"
|
|
"etcd/program/models"
|
|
"net/http"
|
|
"os/exec"
|
|
"runtime"
|
|
)
|
|
|
|
// Program 主程序
|
|
type Program struct {
|
|
cfg *config.Config // 配置
|
|
s *http.Server // http服务-用于程序结束stop
|
|
vApis map[string]api.API // 多版本api启动运行
|
|
}
|
|
var ETCDConfig *config.EtcdConfig //etcd配置
|
|
|
|
// New 创建主程序
|
|
func New() (*Program, error) {
|
|
// 配置文件
|
|
cfg, err := config.LoadConfig("")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
ETCDConfig = cfg.ETCD
|
|
|
|
// 日志对象
|
|
_, err = logger.InitLogger(cfg.LogPath, cfg.Debug)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// 连接数据库
|
|
err = models.InitClientNew(cfg.DB)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// 注册api对象
|
|
apis := make(map[string]api.API, 0)
|
|
apis["v1"] = new(v1.APIV1)
|
|
|
|
// js, _ := json.Marshal(cfg)
|
|
// fmt.Println(string(js))
|
|
|
|
return &Program{
|
|
cfg: cfg,
|
|
vApis: apis,
|
|
}, nil
|
|
}
|
|
|
|
// Run 启动程序
|
|
func (p *Program) Run() error {
|
|
// 启动http服务
|
|
go p.startAPI()
|
|
|
|
// 打开浏览器
|
|
//go func() {
|
|
// time.Sleep(100 * time.Millisecond)
|
|
// openURL(fmt.Sprintf("http://127.0.0.1:%d/ui/", p.cfg.HTTP.Port))
|
|
//}()
|
|
|
|
return nil
|
|
}
|
|
|
|
// Stop 停止服务
|
|
func (p *Program) Stop() {
|
|
if p.s != nil {
|
|
p.s.Close()
|
|
}
|
|
}
|
|
|
|
// 打开url
|
|
func openURL(urlAddr string) {
|
|
var cmd *exec.Cmd
|
|
if runtime.GOOS == "windows" {
|
|
cmd = exec.Command("cmd", " /c start "+urlAddr)
|
|
} else if runtime.GOOS == "darwin" {
|
|
cmd = exec.Command("open", urlAddr)
|
|
} else {
|
|
return
|
|
}
|
|
err := cmd.Start()
|
|
if err != nil {
|
|
logger.Log.Errorw("Error opening browser", "err", err)
|
|
}
|
|
}
|