1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package main
import (
"chainweaver.org.cn/chainweaver/mira/mira-backend-service/core/service"
"chainweaver.org.cn/chainweaver/mira/mira-common/dbaccess"
"flag"
"fmt"
"log"
"os"
"os/signal"
"syscall"
"chainweaver.org.cn/chainweaver/mira/mira-backend-service/config"
"chainweaver.org.cn/chainweaver/mira/mira-backend-service/core/ctrl"
"chainweaver.org.cn/chainweaver/mira/mira-common/crypto"
"chainweaver.org.cn/chainweaver/mira/mira-common/logger"
"github.com/common-nighthawk/go-figure"
"github.com/gin-gonic/gin"
)
var configPath = flag.String("config", "./config.yaml", "config file path")
var printVersion = flag.Bool("version", false, "print version")
func main() {
flag.Parse()
if *printVersion {
PrintVersion()
return
}
// init config
if err := config.InitConfig(*configPath); err != nil {
log.Panicf("failed to initialize config: %v", err)
return
}
// init logger
logger.Init(&config.Conf.Log)
//logger.Infof("parse config success! config: %+v\n", config.Conf)
logger.Info(logo())
// init crypto
var err error
crypto.Csp, err = crypto.InitCrypto(&config.Conf.Crypto)
if err != nil {
logger.Infof("failed to initialize csp module: %v", err)
return
}
logger.Info("init crypto success!")
//init db
err = dbaccess.InitDBAccessService(&config.Conf.DB)
if err != nil {
logger.Errorf("failed to initialize db module: %v", err)
return
}
logger.Info("init db success!")
//init minio
err = dbaccess.InitMinioAccessService(&config.Conf.MinioConfig)
if err != nil {
logger.Errorf("failed to initialize minio module: %v", err)
return
}
logger.Info("init minio success!")
// init mira-ida-access-service client
err = service.InitMiraIdaAccessService()
if err != nil {
logger.Errorf("failed to initialize mira-ida-access-service client: %v", err)
return
}
logger.Info("init mira-ida-access-service client success!")
// init chainweaver.org.cn/chainweaver/mira/mira-backend-service/ service
go func() {
// start server
r := gin.Default()
r.Use(gin.Logger())
r.Use(gin.Recovery())
//register handlers
ctrl.InitRouter(r)
addr := fmt.Sprintf(":%d", config.Conf.Common.Port)
if err := r.Run(addr); err != nil {
panic(err)
}
}()
logger.Info("Startup server success!")
// wait for signal
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM,
syscall.SIGQUIT, syscall.SIGUSR1, syscall.SIGUSR2, syscall.SIGTSTP)
select {
case sig := <-sigs:
logger.Infof("recv signals: %d(%s)", sig, sig)
logger.Info("Shutdown server success!")
fmt.Fprintln(os.Stdout, "Shutdown server success!")
os.Exit(0)
}
}
func logo() string {
fig := figure.NewFigure("mira-backend-service", "slant", true)
s := fig.String()
fragment := "================================================================================="
versionInfo := fmt.Sprintf("Version: %2s%s\n", "", config.CurrentVersion)
versionInfo += fmt.Sprintf("Build Time:%6s%s\n", " ", config.BuildDateTime)
versionInfo += fmt.Sprintf("Git Branch:%6s%s\n", " ", config.GitBranch)
versionInfo += fmt.Sprintf("Git Commit:%6s%s", " ", config.GitCommit)
return fmt.Sprintf("\n%s\n%s%s\n%s\n", fragment, s, fragment, versionInfo)
}
func PrintVersion() {
fmt.Println(logo())
fmt.Println()
}