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  }