first working package query api
This commit is contained in:
93
api.go
93
api.go
@@ -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)
|
||||
}
|
||||
|
Reference in New Issue
Block a user