|
@@ -1,121 +0,0 @@
|
|
|
-// sharesrv.main 分享主服务入口
|
|
|
-package main
|
|
|
-
|
|
|
-import (
|
|
|
- "context"
|
|
|
- "fmt"
|
|
|
- "net/http"
|
|
|
- "os"
|
|
|
- "os/signal"
|
|
|
- "share/internal/funcaward"
|
|
|
- "syscall"
|
|
|
- "time"
|
|
|
-
|
|
|
- "share/config"
|
|
|
- "share/docs/srv/docs"
|
|
|
- "share/internal/event"
|
|
|
- "share/internal/prometheus"
|
|
|
- "share/internal/share"
|
|
|
- "share/internal/utils"
|
|
|
- "share/pkg/db"
|
|
|
- "share/pkg/log"
|
|
|
-
|
|
|
- "git.jiaxianghudong.com/yunfan/yunfan"
|
|
|
-
|
|
|
- "github.com/pkg/errors"
|
|
|
-)
|
|
|
-
|
|
|
-var (
|
|
|
- Version = "0.0.1"
|
|
|
- BuildTime string
|
|
|
-)
|
|
|
-
|
|
|
-// @title 家乡互动 Share API
|
|
|
-// @version 0.1
|
|
|
-// @description 家乡互动分享服务
|
|
|
-// @BasePath /share/v2
|
|
|
-// @host localhost:9091
|
|
|
-func main() {
|
|
|
- log.Infow("", "Version", Version, "BuildTime", BuildTime)
|
|
|
-
|
|
|
- // 初始化Mysql
|
|
|
- cfgMysql := config.GetMysql()
|
|
|
- if err := db.Init(cfgMysql.Addr,
|
|
|
- cfgMysql.UserName,
|
|
|
- cfgMysql.Password,
|
|
|
- db.DB(cfgMysql.Db...),
|
|
|
- db.MaxIdle(cfgMysql.MaxIdle),
|
|
|
- db.MaxCons(cfgMysql.MaxOpen),
|
|
|
- db.ParseTime()); err != nil {
|
|
|
- log.Error(errors.WithMessage(err, "init mysql failed"))
|
|
|
- return
|
|
|
- }
|
|
|
- // 服务退出前,释放数据库资源
|
|
|
- defer db.Close()
|
|
|
-
|
|
|
- event.WatchEvent()
|
|
|
-
|
|
|
- // 道具服务连接
|
|
|
- share.ConnPropSrv()
|
|
|
-
|
|
|
- // 初始化分享埋点配置
|
|
|
- funcaward.InitAwards()
|
|
|
-
|
|
|
- httpPort := config.HTTPPort()
|
|
|
- mode := config.RunMode()
|
|
|
- if mode == "debug" {
|
|
|
- docs.SwaggerInfo.Host = fmt.Sprintf("%s:%d", utils.GetInternalIP(), httpPort)
|
|
|
- //docs.SwaggerInfo.Host = fmt.Sprintf("%s:%d", "192.168.14.117", httpPort)
|
|
|
- docs.SwaggerInfo.Version = Version
|
|
|
- }
|
|
|
-
|
|
|
- prometheus.Init("yunfan", config.GetName(), mode, utils.GetInternalIP())
|
|
|
-
|
|
|
- // 有设置RPC端口,则运行RPC服务
|
|
|
- if config.GetRPCPort() != 0 {
|
|
|
- go func() {
|
|
|
- if err := share.RunRPC(); err != nil && err != yunfan.ErrShutdown {
|
|
|
- log.Error(errors.WithMessage(err, "server run rpc failed"))
|
|
|
- os.Exit(1)
|
|
|
- return
|
|
|
- }
|
|
|
- }()
|
|
|
- }
|
|
|
-
|
|
|
- // 有设置HTTP端口, 则运行HTTP服务
|
|
|
- if httpPort != 0 {
|
|
|
- // 启动服务监听
|
|
|
- go func(port int, mode string) {
|
|
|
- if err := share.RunHttp(port, mode); err != nil && err != http.ErrServerClosed {
|
|
|
- log.Error(errors.WithMessage(err, "server run http failed"))
|
|
|
- os.Exit(1)
|
|
|
- return
|
|
|
- }
|
|
|
- }(httpPort, mode)
|
|
|
- }
|
|
|
-
|
|
|
- log.Infof("server[%s] serving on port:%d", mode, httpPort)
|
|
|
- waitStop()
|
|
|
-}
|
|
|
-
|
|
|
-// waitStop 等待服务停止
|
|
|
-func waitStop() {
|
|
|
- // 捕捉退出信号
|
|
|
- sig := make(chan os.Signal, 1)
|
|
|
-
|
|
|
- signal.Notify(sig, syscall.SIGTERM, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGHUP)
|
|
|
- s := <-sig
|
|
|
-
|
|
|
- log.Infof("receive signal:%d , server stopping ...", s)
|
|
|
-
|
|
|
- ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
|
|
- defer cancel()
|
|
|
-
|
|
|
- if err := share.Stop(ctx); err != nil {
|
|
|
- log.Error(errors.Wrap(err, "server stop failed"))
|
|
|
- return
|
|
|
- }
|
|
|
- log.Info("server exited")
|
|
|
-
|
|
|
- _ = log.Sync()
|
|
|
-}
|