first working package query api

This commit is contained in:
2023-12-14 16:02:34 +01:00
parent 235b755ab1
commit b897198b85

93
api.go
View File

@@ -1,10 +1,16 @@
package main
import (
"entgo.io/ent/dialect/sql"
"entgo.io/ent/dialect/sql/sqljson"
"github.com/c2h5oh/datasize"
"github.com/go-chi/render"
log "github.com/sirupsen/logrus"
"net/http"
"somegit.dev/ALHP/ALHP.GO/ent"
"somegit.dev/ALHP/ALHP.GO/ent/dbpackage"
"somegit.dev/ALHP/ALHP.GO/ent/predicate"
"strconv"
)
type StatsResponse struct {
@@ -19,6 +25,26 @@ type StatsResponse struct {
} `json:"lto"`
}
type ThinPackage struct {
Pkgbase string `json:"pkgbase"`
SplitPackages []string `json:"split_packages"`
Status dbpackage.Status `json:"status"`
SkipReason string `json:"skip_reason"`
LTO dbpackage.Lto `json:"lto"`
DebugSymbols dbpackage.DebugSymbols `json:"debug_symbols"`
ArchVersion string `json:"arch_version"`
RepoVersion string `json:"repo_version"`
BuildDate int64 `json:"build_date"`
PeakMem string `json:"peak_mem"`
}
type PackageResponse struct {
Packages []*ThinPackage `json:"packages"`
Results int `json:"results"`
Page int `json:"page"`
Limit int `json:"limit"`
}
func GetStats(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
var v []struct {
@@ -69,3 +95,70 @@ func GetStats(w http.ResponseWriter, r *http.Request) {
render.Status(r, http.StatusOK)
render.JSON(w, r, resp)
}
func GetPackages(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
pkgbase := r.URL.Query().Get("pkgbase")
status := r.URL.Query().Get("status")
page, err := strconv.Atoi(r.URL.Query().Get("page"))
if err != nil {
log.Warningf("error parsing page: %v", err)
render.Status(r, http.StatusInternalServerError)
return
}
limit, err := strconv.Atoi(r.URL.Query().Get("limit"))
if err != nil {
log.Warningf("error parsing page: %v", err)
render.Status(r, http.StatusInternalServerError)
return
}
var constraints []predicate.DBPackage
if pkgbase != "" {
constraints = append(constraints, dbpackage.Or(dbpackage.PkgbaseContains(pkgbase), func(selector *sql.Selector) {
selector.Where(sqljson.StringContains(dbpackage.FieldPackages, pkgbase))
}))
}
if status != "" {
constraints = append(constraints, dbpackage.StatusEQ(dbpackage.Status(status)))
}
nPkgs, err := db.DBPackage.Query().Where(constraints...).Count(ctx)
if err != nil {
log.Warningf("error getting package count from db: %v", err)
render.Status(r, http.StatusInternalServerError)
return
}
rPackages, err := db.DBPackage.Query().Where(constraints...).Limit(limit).All(ctx)
if err != nil {
log.Warningf("error getting packages from db: %v", err)
render.Status(r, http.StatusInternalServerError)
return
}
resp := new(PackageResponse)
for _, mPkg := range rPackages {
resp.Packages = append(resp.Packages, &ThinPackage{
Pkgbase: mPkg.Pkgbase,
SplitPackages: mPkg.Packages,
Status: mPkg.Status,
SkipReason: mPkg.SkipReason,
LTO: mPkg.Lto,
DebugSymbols: mPkg.DebugSymbols,
ArchVersion: mPkg.Version,
RepoVersion: mPkg.RepoVersion,
BuildDate: mPkg.BuildTimeStart.Unix(),
PeakMem: (datasize.ByteSize(*mPkg.MaxRss) * datasize.KB).HumanReadable(),
})
}
resp.Page = page
resp.Limit = limit
resp.Results = nPkgs
render.Status(r, http.StatusOK)
render.JSON(w, r, resp)
}