package main import ( "log" "github.com/joho/godotenv" "penguins.lan/api" "penguins.lan/args" "penguins.lan/database" "penguins.lan/dnsd" "penguins.lan/scheduled" ) func main() { log.SetFlags(log.LstdFlags | log.Lshortfile) if err := godotenv.Load(); err != nil { log.Println("no .env file loaded:", err) } argv, err := args.GetArgs() if err != nil { log.Fatal(err) } dbConn := database.MakeConn(&argv.DatabasePath) defer dbConn.Close() if argv.Migrate { if _, err := database.Migrate(dbConn); err != nil { log.Fatal(err) } log.Println("database migrated successfully") } if argv.Scheduler { scheduled.StartScheduler(argv, dbConn) log.Println("scheduler started") } if argv.Server { server := api.MakeServer(argv, dbConn) log.Printf("listening on :%d", argv.Port) go func() { if err := server.ListenAndServe(); err != nil { log.Fatal(err) } }() } if argv.Dns { dnsServer := dnsd.MakeServer(argv, dbConn) log.Printf("dns listening on :%d for zone %s", argv.DnsPort, argv.DnsZone) go func() { if err := dnsServer.ListenAndServe(); err != nil { log.Fatal(err) } }() } if argv.Scheduler || argv.Server || argv.Dns { select {} } }