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