code.gitea.io/gitea@v1.19.3/modules/indexer/stats/queue.go (about) 1 // Copyright 2020 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package stats 5 6 import ( 7 "fmt" 8 9 repo_model "code.gitea.io/gitea/models/repo" 10 "code.gitea.io/gitea/modules/graceful" 11 "code.gitea.io/gitea/modules/log" 12 "code.gitea.io/gitea/modules/queue" 13 ) 14 15 // statsQueue represents a queue to handle repository stats updates 16 var statsQueue queue.UniqueQueue 17 18 // handle passed PR IDs and test the PRs 19 func handle(data ...queue.Data) []queue.Data { 20 for _, datum := range data { 21 opts := datum.(int64) 22 if err := indexer.Index(opts); err != nil { 23 log.Error("stats queue indexer.Index(%d) failed: %v", opts, err) 24 } 25 } 26 return nil 27 } 28 29 func initStatsQueue() error { 30 statsQueue = queue.CreateUniqueQueue("repo_stats_update", handle, int64(0)) 31 if statsQueue == nil { 32 return fmt.Errorf("Unable to create repo_stats_update Queue") 33 } 34 35 go graceful.GetManager().RunWithShutdownFns(statsQueue.Run) 36 37 return nil 38 } 39 40 // UpdateRepoIndexer update a repository's entries in the indexer 41 func UpdateRepoIndexer(repo *repo_model.Repository) error { 42 if err := statsQueue.Push(repo.ID); err != nil { 43 if err != queue.ErrAlreadyInQueue { 44 return err 45 } 46 log.Debug("Repo ID: %d already queued", repo.ID) 47 } 48 return nil 49 }