From 84bdf34c14344d3dc4075195eede9c000f9e2f37 Mon Sep 17 00:00:00 2001 From: oppiliappan Date: Thu, 20 Nov 2025 04:47:58 +0000 Subject: [PATCH] appview/pipelines: add limit to pipelines query Change-Id: npksorsynormrqvmzkllrsrsxxvysvvp Signed-off-by: oppiliappan --- appview/db/pipeline.go | 6 ++++-- appview/pipelines/pipelines.go | 3 +++ appview/pulls/pulls.go | 2 ++ appview/repo/repo_util.go | 15 +-------------- 4 files changed, 10 insertions(+), 16 deletions(-) diff --git a/appview/db/pipeline.go b/appview/db/pipeline.go index 04eacb3d..49d24a48 100644 --- a/appview/db/pipeline.go +++ b/appview/db/pipeline.go @@ -168,7 +168,7 @@ func AddPipelineStatus(e Execer, status models.PipelineStatus) error { // this is a mega query, but the most useful one: // get N pipelines, for each one get the latest status of its N workflows -func GetPipelineStatuses(e Execer, filters ...filter) ([]models.Pipeline, error) { +func GetPipelineStatuses(e Execer, limit int, filters ...filter) ([]models.Pipeline, error) { var conditions []string var args []any for _, filter := range filters { @@ -205,7 +205,9 @@ func GetPipelineStatuses(e Execer, filters ...filter) ([]models.Pipeline, error) join triggers t ON p.trigger_id = t.id %s - `, whereClause) + order by p.created desc + limit %d + `, whereClause, limit) rows, err := e.Query(query, args...) if err != nil { diff --git a/appview/pipelines/pipelines.go b/appview/pipelines/pipelines.go index c1cfb429..7cfc2290 100644 --- a/appview/pipelines/pipelines.go +++ b/appview/pipelines/pipelines.go @@ -82,6 +82,7 @@ func (p *Pipelines) Index(w http.ResponseWriter, r *http.Request) { ps, err := db.GetPipelineStatuses( p.db, + 30, db.FilterEq("repo_owner", repoInfo.OwnerDid), db.FilterEq("repo_name", repoInfo.Name), db.FilterEq("knot", repoInfo.Knot), @@ -124,6 +125,7 @@ func (p *Pipelines) Workflow(w http.ResponseWriter, r *http.Request) { ps, err := db.GetPipelineStatuses( p.db, + 1, db.FilterEq("repo_owner", repoInfo.OwnerDid), db.FilterEq("repo_name", repoInfo.Name), db.FilterEq("knot", repoInfo.Knot), @@ -193,6 +195,7 @@ func (p *Pipelines) Logs(w http.ResponseWriter, r *http.Request) { ps, err := db.GetPipelineStatuses( p.db, + 1, db.FilterEq("repo_owner", repoInfo.OwnerDid), db.FilterEq("repo_name", repoInfo.Name), db.FilterEq("knot", repoInfo.Knot), diff --git a/appview/pulls/pulls.go b/appview/pulls/pulls.go index 572ceaa7..da384e8d 100644 --- a/appview/pulls/pulls.go +++ b/appview/pulls/pulls.go @@ -178,6 +178,7 @@ func (s *Pulls) RepoSinglePull(w http.ResponseWriter, r *http.Request) { ps, err := db.GetPipelineStatuses( s.db, + len(shas), db.FilterEq("repo_owner", repoInfo.OwnerDid), db.FilterEq("repo_name", repoInfo.Name), db.FilterEq("knot", repoInfo.Knot), @@ -648,6 +649,7 @@ func (s *Pulls) RepoPulls(w http.ResponseWriter, r *http.Request) { repoInfo := f.RepoInfo(user) ps, err := db.GetPipelineStatuses( s.db, + len(shas), db.FilterEq("repo_owner", repoInfo.OwnerDid), db.FilterEq("repo_name", repoInfo.Name), db.FilterEq("knot", repoInfo.Knot), diff --git a/appview/repo/repo_util.go b/appview/repo/repo_util.go index 34bc20c6..15262c75 100644 --- a/appview/repo/repo_util.go +++ b/appview/repo/repo_util.go @@ -1,8 +1,6 @@ package repo import ( - "crypto/rand" - "math/big" "slices" "sort" "strings" @@ -90,18 +88,6 @@ func balanceIndexItems(commitCount, branchCount, tagCount, fileCount int) (commi return } -func randomString(n int) string { - const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" - result := make([]byte, n) - - for i := 0; i < n; i++ { - n, _ := rand.Int(rand.Reader, big.NewInt(int64(len(letters)))) - result[i] = letters[n.Int64()] - } - - return string(result) -} - // grab pipelines from DB and munge that into a hashmap with commit sha as key // // golang is so blessed that it requires 35 lines of imperative code for this @@ -118,6 +104,7 @@ func getPipelineStatuses( ps, err := db.GetPipelineStatuses( d, + len(shas), db.FilterEq("repo_owner", repoInfo.OwnerDid), db.FilterEq("repo_name", repoInfo.Name), db.FilterEq("knot", repoInfo.Knot), -- 2.43.0