package main import ( "fmt" "net" "net/http" "os" "strconv" "ems.agt/lib/dborm" "ems.agt/lib/global" "ems.agt/lib/log" "ems.agt/lib/routes" "ems.agt/features/dbrest" "ems.agt/features/fm" "ems.agt/features/pm" "ems.agt/restagent/config" ) // const defaultConfigFile = "./etc/restconf.yaml" // func init() { // cfile := flag.String("c", defaultConfigFile, "config file") // pv := flag.Bool("v", false, "print version") // ph := flag.Bool("h", false, "print help") // flag.Parse() // if *pv { // fmt.Printf("OMC restagent version: %s\n%s\n%s\n\n", global.Version, global.BuildTime, global.GoVer) // os.Exit(0) // } // if *ph { // flag.Usage() // os.Exit(0) // } // config.ReadConfig(*cfile) // config.UriPrefix = config.GetYamlConfig().OMC.UriPrefix // //fmt.Println(config.UriPrefix) // } func listenIPv6(ipv6 string, port int) { // addr := &net.TCPAddr{ IP: net.ParseIP(ipv6), Port: port, } listener, err := net.ListenTCP("tcp6", addr) if err != nil { fmt.Println("Failed to listen:", err) return } server := &http.Server{} err = server.Serve(listener) if err != nil { fmt.Println("Failed to serve:", err) } } func HttpListen(addr string, router http.Handler) { err := http.ListenAndServe(addr, router) if err != nil { fmt.Println("ListenAndServe err:", err) os.Exit(5) } } func main() { conf := config.GetYamlConfig() log.InitLogger(conf.Logger.File, conf.Logger.Duration, conf.Logger.Count, "omc:restagent", config.GetLogLevel()) fmt.Printf("OMC restagent version: %s\n", global.Version) log.Infof("========================= OMC restagent startup =========================") log.Infof("OMC restagent version: %s %s %s", global.Version, global.BuildTime, global.GoVer) err := dborm.InitDbClient(conf.Database.Type, conf.Database.User, conf.Database.Password, conf.Database.Host, conf.Database.Port, conf.Database.Name) if err != nil { fmt.Println("dborm.initDbClient err:", err) os.Exit(4) } err = fm.InitDbClient(conf.Database.Type, conf.Database.User, conf.Database.Password, conf.Database.Host, conf.Database.Port, conf.Database.Name) if err != nil { fmt.Println("dborm.initDbClient err:", err) os.Exit(4) } err = pm.InitDbClient(conf.Database.Type, conf.Database.User, conf.Database.Password, conf.Database.Host, conf.Database.Port, conf.Database.Name) if err != nil { fmt.Println("dborm.initDbClient err:", err) os.Exit(4) } err = dbrest.InitDbClient(conf.Database.Type, conf.Database.User, conf.Database.Password, conf.Database.Host, conf.Database.Port, conf.Database.Name) if err != nil { fmt.Println("rests.initDbClient err:", err) os.Exit(4) } router := routes.NewRouter() for _, rest := range conf.Rest { // ipv4 goroutines if rest.IPv4 != "" { listen := rest.IPv4 + ":" + strconv.Itoa(int(rest.Port)) go HttpListen(listen, router) } // ipv6 goroutines if rest.IPv6 != "" { listenv6 := "[" + rest.IPv6 + "]" + ":" + strconv.Itoa(int(rest.Port)) go HttpListen(listenv6, router) } } select {} }