func main() { defer func() { if r := recover(); r != nil { fmt.Fprintf(os.Stderr, fmt.Sprintf("%s : %s", r, debug.Stack())) } }() // Initiliaze logger with default TextFormatter log.SetFormatter(&log.TextFormatter{DisableColors: false, FullTimestamp: true}) // Set the log level if options.Debug { log.SetLevel(log.DebugLevel) } server := dns.NewServer(options) if server != nil { server.Start() } // handle the signals and gracefully shutdown the server sig := make(chan os.Signal, 1) signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM) go func() { log.Warnf("signal %s received", <-sig) server.Stop() }() server.Wait() }
func main() { swaggerSpec, err := spec.New(restapi.SwaggerJSON, "") if err != nil { log.Fatalln(err) } api := operations.NewPortLayerAPI(swaggerSpec) server := restapi.NewServer(api) defer server.Shutdown() parser := flags.NewParser(server, flags.Default) parser.ShortDescription = `Port Layer API` parser.LongDescription = `Port Layer API` server.ConfigureFlags() for _, optsGroup := range api.CommandLineOptionsGroups { parser.AddGroup(optsGroup.ShortDescription, optsGroup.LongDescription, optsGroup.Options) } if _, err := parser.Parse(); err != nil { os.Exit(1) } server.ConfigureAPI() // BEGIN // Set the Interface name to instruct listeners to bind on this interface options.Interface = "bridge" // Start the DNS Server dnsserver := dns.NewServer(options) if dnsserver != nil { dnsserver.Start() } // handle the signals and gracefully shutdown the server sig := make(chan os.Signal, 1) signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM) go func() { <-sig dnsserver.Stop() server.Stop() }() go func() { dnsserver.Wait() }() // END if err := server.Serve(); err != nil { log.Fatalln(err) } }