148 lines
4.1 KiB
Go
148 lines
4.1 KiB
Go
package main
|
|
|
|
import (
|
|
"proxy/canal"
|
|
config2 "proxy/config"
|
|
"proxy/cron"
|
|
"proxy/provision"
|
|
_ "time"
|
|
|
|
l4g "github.com/sirupsen/logrus"
|
|
mysql "proxy/Nmysql"
|
|
rdb "proxy/Nredis"
|
|
rest "proxy/Nrestful"
|
|
tn "proxy/TelnetShellServer"
|
|
"proxy/logger"
|
|
)
|
|
/*
|
|
func initLog(cfg *rest.LogConf) {
|
|
if strings.Compare("file", cfg.Output) != 0 {
|
|
l4g.SetOutput(os.Stdout)
|
|
} else {
|
|
path := cfg.Path// "/var/log/pcf.log"
|
|
// log rotate
|
|
//`WithLinkName` 为最新的日志建立软连接
|
|
//`WithRotationTime` 设置日志分割的时间,隔多久分割一次
|
|
//WithMaxAge 和 WithRotationCount二者只能设置一个
|
|
// `WithMaxAge` 设置文件清理前的最长保存时间
|
|
// `WithRotationCount` 设置文件清理前最多保存的个数
|
|
//
|
|
// add a new log every 3 hours, with 30 days at most.
|
|
writer, _ := rotatelogs.New(
|
|
path+".%Y-%m-%d-%H:%M",
|
|
rotatelogs.WithLinkName(path),
|
|
//rotatelogs.WithMaxAge(time.Duration(cfg.MaxAge)*time.Hour),
|
|
//rotatelogs.WithRotationTime(time.Duration(cfg.RotationTime)*time.Hour),
|
|
rotatelogs.WithRotationTime(3 * time.Hour),
|
|
rotatelogs.WithRotationCount(uint(cfg.MaxAge)),
|
|
)
|
|
l4g.SetOutput(writer)
|
|
}
|
|
|
|
if strings.Compare("debug", cfg.Level) == 0 {
|
|
l4g.SetLevel(l4g.DebugLevel)
|
|
} else if strings.Compare("info", cfg.Level) == 0 {
|
|
l4g.SetLevel(l4g.InfoLevel)
|
|
} else if strings.Compare("warn", cfg.Level) == 0 {
|
|
l4g.SetLevel(l4g.WarnLevel)
|
|
} else if strings.Compare("error", cfg.Level) == 0 {
|
|
l4g.SetLevel(l4g.ErrorLevel)
|
|
}
|
|
//l4g.SetReportCaller(true)// useless
|
|
//l4g.SetFormatter(&l4g.TextFormatter{})
|
|
}*/
|
|
|
|
func check(err error, message string) {
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
initLog.Debugf("%s", message)
|
|
}
|
|
|
|
// ******************************************************************
|
|
var initLog *l4g.Entry
|
|
func init() {
|
|
initLog = logger.InitLog
|
|
}
|
|
|
|
func setLogLevel(level string) {
|
|
if level != "" {
|
|
level, err := l4g.ParseLevel(level)
|
|
if err != nil {
|
|
initLog.Warnf("Log level [%s] is invalid, set to [info] level",
|
|
level)
|
|
logger.SetLogLevel(l4g.InfoLevel)
|
|
} else {
|
|
initLog.Infof("Log level is set to [%s] level", level)
|
|
logger.SetLogLevel(level)
|
|
}
|
|
} else {
|
|
initLog.Infoln("Log level not set. Default set to [info] level")
|
|
logger.SetLogLevel(l4g.InfoLevel)
|
|
}
|
|
|
|
logger.SetReportCaller(true)
|
|
}
|
|
// *********************************************************************************
|
|
|
|
//var cfgFile = flag.String("c", "", "selfcare proxy configure file.")
|
|
func main() {
|
|
// check if billing already running
|
|
/*var output, errout string
|
|
err, output, errout := rest.Shellout("pidof billing")
|
|
if err != nil {
|
|
fmt.Printf("Get pid of billing fail, err: %v\n", err)
|
|
} else {
|
|
ss := strings.Fields(output)
|
|
if len(ss) >= 2 {
|
|
fmt.Printf("Process billing is already running, pids[%s], exit!\n", output)
|
|
os.Exit(0)
|
|
} else {
|
|
fmt.Printf("First process of billing, stdout[%s], stderr[%s]!\n", output, errout)
|
|
}
|
|
}*/
|
|
|
|
//flag.Parse()
|
|
|
|
// read config
|
|
config := &config2.Config
|
|
err := config2.ReadConfig()
|
|
if err != nil {
|
|
initLog.Errorf("open config file error: %s", err)
|
|
return
|
|
} else {
|
|
initLog.Infof("config file: %v", config)
|
|
}
|
|
|
|
//initLog(&config.Log)
|
|
setLogLevel(config.Log.Level)
|
|
|
|
initLog.Infof("selfcare proxy start...\r\nconfig:[%v]", config)
|
|
|
|
if config.Rest.Enabled {
|
|
go rest.Connect_ocs(config.Rest.LocRzIp, config.Rest.OcsRzIp, config.Rest.LocRzPort, config.Rest.OcsRzPort)
|
|
go rest.StartHttpServer(config.Rest.HttpAddr)
|
|
}
|
|
|
|
go tn.Server(config.TelnetServer.Addr)
|
|
|
|
// temp disable======================
|
|
go rdb.NewRedisClient(config.RedisDb.NetType, config.RedisDb.Addr, config.RedisDb.Password, config.RedisDb.SentinelAddrs)
|
|
|
|
go mysql.OpenMysql(config.MysqlDb.Username, config.MysqlDb.Password, config.MysqlDb.Addr)
|
|
if config.CanalServer.Enabled {
|
|
go canal.CanalFsm(config.CanalServer.Addr, config.CanalServer.Username, config.CanalServer.Password)
|
|
}
|
|
//
|
|
|
|
if config.CronCfg.Enabled && (config.CronCfg.ClrExp != "" || config.CronCfg.NtfSms != "") {
|
|
cron.CronStart(config.CronCfg.ClrExp, config.CronCfg.NtfSms)
|
|
defer cron.CronStop()
|
|
}
|
|
|
|
go provision.ProvisionFsm()
|
|
|
|
select {}
|
|
}
|