* chore: initial commit for 30d badge/chart UI support * chore revert some changes * chore build frontend * chore remove old line * rebuild frontend * re-order list * feat: add support for 1h response chart * chore(docs): add section about response time chart * chore(frontend): add missing select * chore: code format * chore: new web build * Revert "chore: code format" This reverts commit 517f0ce3c85e16e771cddc26ca67c2085703158b. * chore(responsechart): remove support for 1h charts response time is only stored at 1h intervals, having a chart for the past 1h does not make sense.
44 lines
1.2 KiB
Go
44 lines
1.2 KiB
Go
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 "30d":
|
|
from = time.Now().Add(-30 * 24 * time.Hour)
|
|
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: 30d, 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/plain")
|
|
c.Set("Cache-Control", "no-cache, no-store, must-revalidate")
|
|
c.Set("Expires", "0")
|
|
return c.Status(200).Send([]byte(fmt.Sprintf("%f", uptime)))
|
|
}
|