root 4 天之前
父節點
當前提交
4176fd6bbd
共有 4 個文件被更改,包括 228 次插入0 次删除
  1. 94 0
      cmd/commands/service.go
  2. 86 0
      cmd/main.go
  3. 24 0
      configs/config.demo.yaml
  4. 24 0
      configs/config.yaml

+ 94 - 0
cmd/commands/service.go

@@ -0,0 +1,94 @@
+package commands
+
+import (
+	"fmt"
+
+	"github.com/kardianos/service"
+	"github.com/sirupsen/logrus"
+	"github.com/urfave/cli"
+)
+
+var logger service.Logger
+
+type program struct {
+	ctx *cli.Context
+}
+
+func (p *program) Start(s service.Service) error {
+	//go p.run()
+	return nil
+}
+
+func (p *program) Stop(s service.Service) error {
+	// Stop should not block. Return with a few seconds.
+	return nil
+}
+
+// CmdService cli 命令
+var CmdService = cli.Command{
+	Name:        "service",
+	Usage:       "./pbx-api-gin service",
+	Description: "PBX API install/uninstall",
+	Action:      runService,
+	Flags: []cli.Flag{
+		cli.StringFlag{Name: "action, a", Usage: "install/uninstall/start/stop"},
+		cli.StringFlag{Name: "config, c", Usage: "配置文件路径"},
+		cli.Int64Flag{Name: "port, p", Usage: "默认绑定端口 8080", Value: 8080},
+		cli.StringFlag{Name: "host", Usage: "默认绑定地址 0.0.0.0", Value: "0.0.0.0"},
+	},
+}
+
+func runService(ctx *cli.Context) {
+	svcConfig := &service.Config{
+		Name:        "PBX-API",
+		DisplayName: "PBX-API",
+		Description: "PBX-API as service.",
+		Arguments:   []string{"--config", ctx.String("config")},
+	}
+
+	prg := &program{
+		ctx: ctx,
+	}
+	s, err := service.New(prg, svcConfig)
+	if err != nil {
+		logrus.Fatal(err)
+	}
+	logger, err = s.Logger(nil)
+	if err != nil {
+		logrus.Fatal(err)
+	}
+
+	switch ctx.String("action") {
+	case "install":
+		if !ctx.IsSet("config") {
+			fmt.Print("install must set config path, please by  -config set")
+			return
+		}
+		err = s.Install()
+		if err != nil {
+			fmt.Println("install err", err)
+		} else {
+			fmt.Println("install success")
+		}
+		return
+	case "uninstall":
+		err = s.Uninstall()
+		if err != nil {
+			fmt.Println("Uninstall err", err)
+		} else {
+			fmt.Println("Uninstall success")
+		}
+		return
+	case "start":
+		s.Start()
+		return
+	case "stop":
+		s.Stop()
+		return
+	}
+
+	err = s.Run()
+	if err != nil {
+		logger.Error(err)
+	}
+}

+ 86 - 0
cmd/main.go

@@ -0,0 +1,86 @@
+package main
+
+import (
+	agiServer "pbx-api-gin/api"
+	"pbx-api-gin/internal/app"
+	"pbx-api-gin/internal/pkg/configs"
+	"pbx-api-gin/pkg/lfshook"
+	"pbx-api-gin/pkg/utils"
+
+	"github.com/sirupsen/logrus"
+	"gopkg.in/natefinch/lumberjack.v2"
+)
+
+var (
+	gitCommitCode string
+	buildDateTime string
+	goVersion     string
+)
+
+func main() {
+	initVersion()
+
+	go agiServer.StartAGI("127.0.0.1", "8090")
+	// 解析配置文件
+	configs.DecodeConfig()
+
+	configs.ConfigGlobal.LogLevel = logrus.InfoLevel
+
+	//gin.SetMode(gin.ReleaseMode)
+	//gin.SetMode(gin.DebugMode)
+
+	lfshook.NewLogger().Logger.SetFormatter(&logrus.TextFormatter{
+		ForceQuote:      false,
+		FullTimestamp:   true,
+		TimestampFormat: "2006-01-02 15:04:05",
+	})
+
+	if configs.ConfigGlobal.LogLevel < logrus.DebugLevel {
+
+		pathMap := lfshook.LoggerMap{
+			logrus.InfoLevel: &lumberjack.Logger{
+				Filename:   configs.ConfigGlobal.LogInfoPath,
+				MaxSize:    10, // maxSize M
+				MaxBackups: 5,  // keep 5 file
+				MaxAge:     7,  //  7 day
+			},
+
+			logrus.ErrorLevel: &lumberjack.Logger{
+				Filename:   configs.ConfigGlobal.LogErrorPath,
+				MaxSize:    10, // maxSize M
+				MaxBackups: 5,  // keep 5 file
+				MaxAge:     7,  //  7 day
+			},
+		}
+
+		lfshook.NewLogger().Logger.Hooks.Add(lfshook.NewHook(
+			pathMap,
+			&logrus.TextFormatter{
+				DisableColors:   true,
+				ForceQuote:      true,
+				TimestampFormat: "2006-01-02 15:04:05",
+				PadLevelText:    false,
+			},
+		))
+		lfshook.NewLogger().Logger.SetReportCaller(true)
+
+	}
+	utils.InitLog()
+	app.StartApp()
+	utils.Exit()
+	//return nil
+}
+
+func initVersion() {
+	if gitCommitCode != "" {
+		//构建信息
+		//utils.Logger.Printf("software version: V10.01")
+		lfshook.NewLogger().Printf("git commit code: %s", gitCommitCode)
+		lfshook.NewLogger().Printf("build date: %s", buildDateTime)
+		lfshook.NewLogger().Printf("go version: %s", goVersion)
+
+		utils.VersionInstance.BuildDate = buildDateTime
+		utils.VersionInstance.GoVersion = goVersion
+		utils.VersionInstance.GitCommitCode = gitCommitCode
+	}
+}

+ 24 - 0
configs/config.demo.yaml

@@ -0,0 +1,24 @@
+# AMI
+asteriskAMIHost: '127.0.0.1'
+asteriskAMIPort: '5038'
+asteriskAMIUser: 'admin'
+asteriskAMISecret: 'admin'
+
+# 数据库配置
+#mysqlDBHost: '127.0.0.1'
+#mysqlDBUser: 'debian-sys-maint'
+#mysqlDBName: 'PA'
+#mysqlDBSecret: '4Ae8GlfBN9Nq59Xd'
+
+# Redis
+#redisDBHost: 'localhost'
+#redisDBPort: '6379'
+#redisDBSecret: ''
+
+# log
+logErrorPath: '/data/test/log/error.log'
+logInfoPath: '/data/test/log/info.log'
+# log
+
+processRecord: 'yes'
+recordingEvent: '/data/test/log/recordEvent.log'

+ 24 - 0
configs/config.yaml

@@ -0,0 +1,24 @@
+# AMI
+asteriskAMIHost: '127.0.0.1'
+asteriskAMIPort: '5038'
+asteriskAMIUser: 'admin'
+asteriskAMISecret: 'admin'
+
+# 数据库配置
+#mysqlDBHost: '127.0.0.1'
+#mysqlDBUser: 'debian-sys-maint'
+#mysqlDBName: 'PA'
+#mysqlDBSecret: '4Ae8GlfBN9Nq59Xd'
+
+# Redis
+#redisDBHost: 'localhost'
+#redisDBPort: '6379'
+#redisDBSecret: ''
+
+# log
+logErrorPath: '/data/test/log/error.log'
+logInfoPath: '/data/test/log/info.log'
+# log
+
+processRecord: 'yes'
+recordingEvent: '/data/test/log/recordEvent.log'