package main import ( "log" "os" "github.com/alexflint/go-arg" "github.com/brettlangdon/realm" ) var args struct { Zones []string `arg:"--zone,positional,help:DNS zone files to serve from this server"` Bind string `arg:"help:[]: to bind too"` StatsD string `arg:"--statsd,help:: to send StatsD metrics to"` } func main() { args.Bind = ":53" argParser := arg.MustParse(&args) if len(args.Zones) == 0 { log.Println("must supply at least 1 zone file to serve") argParser.WriteUsage(os.Stderr) os.Exit(1) } var registry *realm.Registry registry = realm.NewRegistry() for _, filename := range args.Zones { // Load and parse the zone file var zone *realm.Zone var err error log.Printf("parsing zone file \"%s\"\n", filename) zone, err = realm.ParseZone(filename) if err != nil { log.Fatal(err) } registry.AddZone(zone) } // Create and start the server log.Printf("starting the server on \"%s\"\n", args.Bind) var server *realm.Server var err error server, err = realm.NewServer(args.Bind, registry, args.StatsD) if err != nil { log.Fatal(err) } log.Fatal(server.ListenAndServe()) }