package main import ( "fmt" "log" "net/http" "time" "git.simponic.xyz/simponic/whois/api" "git.simponic.xyz/simponic/whois/args" "git.simponic.xyz/simponic/whois/database" "git.simponic.xyz/simponic/whois/ntfy" "git.simponic.xyz/simponic/whois/scheduler" "github.com/joho/godotenv" ) func main() { log.SetFlags(log.LstdFlags | log.Lshortfile) err := godotenv.Load() if err != nil { log.Println("could not load .env file:", err) } argv, err := args.GetArgs() if err != nil { log.Fatal(err) } dbConn := database.MakeConn(&argv.DatabasePath) defer dbConn.Close() if argv.Migrate { _, err = database.Migrate(dbConn) if err != nil { log.Fatal(err) } log.Println("database migrated successfully") } if argv.NtfyListener { ntfy := ntfy.MakeNtfyWatcher(argv.NtfyEndpoint, argv.NtfyTopics) notifications := ntfy.Watch() go func() { for notification := range notifications { message := notification.Message update := database.Update{ Time: time.Now().UTC(), Name: message, } database.SaveUpdate(dbConn, &update) log.Println("saved update", update) } }() } if argv.Scheduler { go func() { scheduler.StartScheduler(dbConn, argv) }() } if argv.Server { mux := api.MakeMux(argv, dbConn) log.Println("🚀🚀 whois API listening on port", argv.Port) go func() { server := &http.Server{ Addr: ":" + fmt.Sprint(argv.Port), Handler: mux, } err = server.ListenAndServe() if err != nil { log.Fatal(err) } }() } if argv.Server || argv.Scheduler || argv.NtfyListener { select {} // block forever } }