ETCD后台服务
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

92 lines
1.6 KiB

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)
}
}