package api import ( "errors" "fmt" "time" "github.com/TwiN/gatus/v5/storage/store" "github.com/TwiN/gatus/v5/storage/store/common" "github.com/gofiber/fiber/v2" ) func UptimeRaw(c *fiber.Ctx) error { duration := c.Params("duration") var from time.Time switch duration { case "7d": from = time.Now().Add(-7 * 24 * time.Hour) case "24h": from = time.Now().Add(-24 * time.Hour) case "1h": from = time.Now().Add(-2 * time.Hour) // Because uptime metrics are stored by hour, we have to cheat a little default: return c.Status(400).SendString("Durations supported: 7d, 24h, 1h") } key := c.Params("key") uptime, err := store.Get().GetUptimeByKey(key, from, time.Now()) if err != nil { if errors.Is(err, common.ErrEndpointNotFound) { return c.Status(404).SendString(err.Error()) } else if errors.Is(err, common.ErrInvalidTimeRange) { return c.Status(400).SendString(err.Error()) } return c.Status(500).SendString(err.Error()) } c.Set("Content-Type", "text/html") c.Set("Cache-Control", "no-cache, no-store, must-revalidate") c.Set("Expires", "0") return c.Status(200).Send([]byte(fmt.Sprintf("%f", uptime))) }