mirror of https://github.com/q191201771/lal.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
1.9 KiB
Go
93 lines
1.9 KiB
Go
5 years ago
|
// Copyright 2019, Chef. All rights reserved.
|
||
|
// https://github.com/q191201771/lal
|
||
|
//
|
||
|
// Use of this source code is governed by a MIT-style license
|
||
|
// that can be found in the License file.
|
||
|
//
|
||
|
// Author: Chef (191201771@qq.com)
|
||
|
|
||
6 years ago
|
package main
|
||
|
|
||
|
import (
|
||
|
"flag"
|
||
6 years ago
|
"fmt"
|
||
6 years ago
|
"net/http"
|
||
|
_ "net/http/pprof"
|
||
6 years ago
|
"os"
|
||
5 years ago
|
"os/signal"
|
||
|
"syscall"
|
||
5 years ago
|
|
||
|
"github.com/q191201771/lal/pkg/logic"
|
||
|
"github.com/q191201771/naza/pkg/bininfo"
|
||
|
log "github.com/q191201771/naza/pkg/nazalog"
|
||
6 years ago
|
)
|
||
|
|
||
5 years ago
|
var sm *logic.ServerManager
|
||
6 years ago
|
|
||
|
func main() {
|
||
6 years ago
|
confFile := parseFlag()
|
||
6 years ago
|
config := loadConf(confFile)
|
||
5 years ago
|
initLog(config.Log)
|
||
|
log.Infof("bininfo: %s", bininfo.StringifySingleLine())
|
||
6 years ago
|
|
||
5 years ago
|
sm = logic.NewServerManager(config)
|
||
6 years ago
|
|
||
5 years ago
|
if config.PProf.Addr != "" {
|
||
|
go runWebPProf(config.PProf.Addr)
|
||
|
}
|
||
5 years ago
|
go runSignalHandler()
|
||
6 years ago
|
|
||
5 years ago
|
sm.RunLoop()
|
||
6 years ago
|
}
|
||
|
|
||
6 years ago
|
func parseFlag() string {
|
||
6 years ago
|
binInfoFlag := flag.Bool("v", false, "show bin info")
|
||
|
cf := flag.String("c", "", "specify conf file")
|
||
6 years ago
|
flag.Parse()
|
||
6 years ago
|
if *binInfoFlag {
|
||
5 years ago
|
_, _ = fmt.Fprint(os.Stderr, bininfo.StringifyMultiLine())
|
||
5 years ago
|
os.Exit(0)
|
||
6 years ago
|
}
|
||
6 years ago
|
if *cf == "" {
|
||
6 years ago
|
flag.Usage()
|
||
6 years ago
|
os.Exit(1)
|
||
6 years ago
|
}
|
||
6 years ago
|
return *cf
|
||
6 years ago
|
}
|
||
6 years ago
|
|
||
5 years ago
|
func loadConf(confFile string) *logic.Config {
|
||
|
config, err := logic.LoadConf(confFile)
|
||
6 years ago
|
if err != nil {
|
||
5 years ago
|
log.Errorf("load conf failed. file=%s err=%+v", confFile, err)
|
||
6 years ago
|
os.Exit(1)
|
||
6 years ago
|
}
|
||
5 years ago
|
log.Infof("load conf file succ. file=%s content=%+v", confFile, config)
|
||
6 years ago
|
return config
|
||
|
}
|
||
6 years ago
|
|
||
5 years ago
|
func initLog(opt log.Option) {
|
||
|
if err := log.Init(func(option *log.Option) {
|
||
|
*option = opt
|
||
|
}); err != nil {
|
||
5 years ago
|
_, _ = fmt.Fprintf(os.Stderr, "initial log failed. err=%+v", err)
|
||
|
os.Exit(1)
|
||
|
}
|
||
|
log.Info("initial log succ.")
|
||
|
}
|
||
|
|
||
|
func runWebPProf(addr string) {
|
||
5 years ago
|
log.Infof("start web pprof listen. addr=%s", addr)
|
||
|
if err := http.ListenAndServe(addr, nil); err != nil {
|
||
6 years ago
|
log.Error(err)
|
||
6 years ago
|
return
|
||
6 years ago
|
}
|
||
|
}
|
||
|
|
||
5 years ago
|
func runSignalHandler() {
|
||
|
c := make(chan os.Signal)
|
||
|
signal.Notify(c, syscall.SIGUSR1, syscall.SIGUSR2)
|
||
|
s := <-c
|
||
|
log.Infof("recv signal. s=%+v", s)
|
||
|
sm.Dispose()
|
||
6 years ago
|
}
|