aboutsummaryrefslogtreecommitdiffstats
path: root/modules/indexer/stats/queue.go
diff options
context:
space:
mode:
Diffstat (limited to 'modules/indexer/stats/queue.go')
-rw-r--r--modules/indexer/stats/queue.go43
1 files changed, 43 insertions, 0 deletions
diff --git a/modules/indexer/stats/queue.go b/modules/indexer/stats/queue.go
new file mode 100644
index 0000000000..43a4de5ac9
--- /dev/null
+++ b/modules/indexer/stats/queue.go
@@ -0,0 +1,43 @@
+// Copyright 2020 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package stats
+
+import (
+ "fmt"
+
+ "code.gitea.io/gitea/models"
+ "code.gitea.io/gitea/modules/graceful"
+ "code.gitea.io/gitea/modules/log"
+ "code.gitea.io/gitea/modules/queue"
+)
+
+// statsQueue represents a queue to handle repository stats updates
+var statsQueue queue.Queue
+
+// handle passed PR IDs and test the PRs
+func handle(data ...queue.Data) {
+ for _, datum := range data {
+ opts := datum.(int64)
+ if err := indexer.Index(opts); err != nil {
+ log.Error("stats queue idexer.Index(%d) failed: %v", opts, err)
+ }
+ }
+}
+
+func initStatsQueue() error {
+ statsQueue = queue.CreateQueue("repo_stats_update", handle, int64(0)).(queue.Queue)
+ if statsQueue == nil {
+ return fmt.Errorf("Unable to create repo_stats_update Queue")
+ }
+
+ go graceful.GetManager().RunWithShutdownFns(statsQueue.Run)
+
+ return nil
+}
+
+// UpdateRepoIndexer update a repository's entries in the indexer
+func UpdateRepoIndexer(repo *models.Repository) error {
+ return statsQueue.Push(repo.ID)
+}