package api import ( "context" "encoding/json" "log/slog" "net/http" "os" ) var Logger *slog.Logger const VTT_URL string = "http://73.188.175.49:30000" func remoteOnline(ctx context.Context, url string) bool { req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) if err != nil { panic(err) } _, err = http.DefaultClient.Do(req) if err != nil { return false } return true } func respondOnline(w http.ResponseWriter, url string, isOnline bool) { data := struct { Online bool `json:"online"` Site string `json:"url"` }{isOnline, url} jsonData, err := json.Marshal(data) if err != nil { http.Error(w, "Error constructing response", http.StatusInternalServerError) Logger.Error("Error marshalling site status data") return } w.Header().Set("Content-Type", "application/json") w.Write(jsonData) } func VttOnline(w http.ResponseWriter, req *http.Request) { isOnline := remoteOnline(req.Context(), VTT_URL) if !isOnline { Logger.DebugContext(req.Context(), "Foundry VTT is offline") } respondOnline(w, VTT_URL, isOnline) } func VttRedirect(w http.ResponseWriter, req *http.Request) { http.Redirect(w, req, VTT_URL, http.StatusMovedPermanently) } func SiteOnline(w http.ResponseWriter, req *http.Request) { const URL string = "https://dnd.jpappel.xyz" isOnline := remoteOnline(req.Context(), URL) if !isOnline { Logger.DebugContext(req.Context(), "Campaign Website is offline") } respondOnline(w, URL, isOnline) } func init() { Logger = slog.New(slog.NewTextHandler(os.Stdout, nil)) }