Files
alhp-web/api.go

72 lines
1.7 KiB
Go

package main
import (
"github.com/go-chi/render"
"net/http"
"somegit.dev/ALHP/ALHP.GO/ent"
"somegit.dev/ALHP/ALHP.GO/ent/dbpackage"
)
type StatsResponse struct {
Failed int `json:"failed"`
Skipped int `json:"skipped"`
Latest int `json:"latest"`
Queued int `json:"queued"`
LTO *struct {
Enabled int `json:"enabled"`
Disabled int `json:"disabled"`
Unknown int `json:"unknown"`
} `json:"lto"`
}
func GetStats(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
var v []struct {
Status dbpackage.Status `json:"status"`
Count int `json:"count"`
}
db.DBPackage.Query().GroupBy(dbpackage.FieldStatus).Aggregate(ent.Count()).ScanX(ctx, &v)
resp := new(StatsResponse)
resp.LTO = new(struct {
Enabled int `json:"enabled"`
Disabled int `json:"disabled"`
Unknown int `json:"unknown"`
})
for _, c := range v {
switch c.Status { //nolint:exhaustive
case dbpackage.StatusFailed:
resp.Failed = c.Count
case dbpackage.StatusSkipped:
resp.Skipped = c.Count
case dbpackage.StatusLatest:
resp.Latest = c.Count
case dbpackage.StatusQueued:
resp.Queued = c.Count
}
}
var v2 []struct {
Status dbpackage.Lto `json:"lto"` //nolint:tagliatelle
Count int `json:"count"`
}
db.DBPackage.Query().Where(dbpackage.StatusNEQ(dbpackage.StatusSkipped)).
GroupBy(dbpackage.FieldLto).Aggregate(ent.Count()).ScanX(ctx, &v2)
for _, c := range v2 {
switch c.Status {
case dbpackage.LtoUnknown:
resp.LTO.Unknown = c.Count
case dbpackage.LtoDisabled, dbpackage.LtoAutoDisabled:
resp.LTO.Disabled += c.Count
case dbpackage.LtoEnabled:
resp.LTO.Enabled = c.Count
}
}
render.Status(r, http.StatusOK)
render.JSON(w, r, resp)
}