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

3 years ago
  1. package program
  2. import (
  3. "etcd/program/api"
  4. v1 "etcd/program/api/v1"
  5. "etcd/program/config"
  6. "etcd/program/logger"
  7. "etcd/program/models"
  8. "net/http"
  9. "os/exec"
  10. "runtime"
  11. )
  12. // Program 主程序
  13. type Program struct {
  14. cfg *config.Config // 配置
  15. s *http.Server // http服务-用于程序结束stop
  16. vApis map[string]api.API // 多版本api启动运行
  17. }
  18. var ETCDConfig *config.EtcdConfig //etcd配置
  19. // New 创建主程序
  20. func New() (*Program, error) {
  21. // 配置文件
  22. cfg, err := config.LoadConfig("")
  23. if err != nil {
  24. return nil, err
  25. }
  26. ETCDConfig = cfg.ETCD
  27. // 日志对象
  28. _, err = logger.InitLogger(cfg.LogPath, cfg.Debug)
  29. if err != nil {
  30. return nil, err
  31. }
  32. // 连接数据库
  33. err = models.InitClientNew(cfg.DB)
  34. if err != nil {
  35. return nil, err
  36. }
  37. // 注册api对象
  38. apis := make(map[string]api.API, 0)
  39. apis["v1"] = new(v1.APIV1)
  40. // js, _ := json.Marshal(cfg)
  41. // fmt.Println(string(js))
  42. return &Program{
  43. cfg: cfg,
  44. vApis: apis,
  45. }, nil
  46. }
  47. // Run 启动程序
  48. func (p *Program) Run() error {
  49. // 启动http服务
  50. go p.startAPI()
  51. // 打开浏览器
  52. //go func() {
  53. // time.Sleep(100 * time.Millisecond)
  54. // openURL(fmt.Sprintf("http://127.0.0.1:%d/ui/", p.cfg.HTTP.Port))
  55. //}()
  56. return nil
  57. }
  58. // Stop 停止服务
  59. func (p *Program) Stop() {
  60. if p.s != nil {
  61. p.s.Close()
  62. }
  63. }
  64. // 打开url
  65. func openURL(urlAddr string) {
  66. var cmd *exec.Cmd
  67. if runtime.GOOS == "windows" {
  68. cmd = exec.Command("cmd", " /c start "+urlAddr)
  69. } else if runtime.GOOS == "darwin" {
  70. cmd = exec.Command("open", urlAddr)
  71. } else {
  72. return
  73. }
  74. err := cmd.Start()
  75. if err != nil {
  76. logger.Log.Errorw("Error opening browser", "err", err)
  77. }
  78. }