mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Separate open and closed issue in metrics (#16637)
* Get the issue counts in one query Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
		
							
								
								
									
										22
									
								
								models/models.go
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										22
									
								
								models/models.go
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -272,7 +272,8 @@ type Statistic struct {
 | 
			
		||||
	Counter struct {
 | 
			
		||||
		User, Org, PublicKey,
 | 
			
		||||
		Repo, Watch, Star, Action, Access,
 | 
			
		||||
		Issue, Comment, Oauth, Follow,
 | 
			
		||||
		Issue, IssueClosed, IssueOpen,
 | 
			
		||||
		Comment, Oauth, Follow,
 | 
			
		||||
		Mirror, Release, LoginSource, Webhook,
 | 
			
		||||
		Milestone, Label, HookTask,
 | 
			
		||||
		Team, UpdateTask, Attachment int64
 | 
			
		||||
@@ -289,7 +290,24 @@ func GetStatistic() (stats Statistic) {
 | 
			
		||||
	stats.Counter.Star, _ = x.Count(new(Star))
 | 
			
		||||
	stats.Counter.Action, _ = x.Count(new(Action))
 | 
			
		||||
	stats.Counter.Access, _ = x.Count(new(Access))
 | 
			
		||||
	stats.Counter.Issue, _ = x.Count(new(Issue))
 | 
			
		||||
 | 
			
		||||
	type IssueCount struct {
 | 
			
		||||
		Count    int64
 | 
			
		||||
		IsClosed bool
 | 
			
		||||
	}
 | 
			
		||||
	issueCounts := []IssueCount{}
 | 
			
		||||
 | 
			
		||||
	_ = x.Select("COUNT(*) AS count, is_closed").Table("issue").GroupBy("is_closed").Find(&issueCounts)
 | 
			
		||||
	for _, c := range issueCounts {
 | 
			
		||||
		if c.IsClosed {
 | 
			
		||||
			stats.Counter.IssueClosed = c.Count
 | 
			
		||||
		} else {
 | 
			
		||||
			stats.Counter.IssueOpen = c.Count
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	stats.Counter.Issue = stats.Counter.IssueClosed + stats.Counter.IssueOpen
 | 
			
		||||
 | 
			
		||||
	stats.Counter.Comment, _ = x.Count(new(Comment))
 | 
			
		||||
	stats.Counter.Oauth = 0
 | 
			
		||||
	stats.Counter.Follow, _ = x.Count(new(Follow))
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										24
									
								
								modules/metrics/collector.go
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										24
									
								
								modules/metrics/collector.go
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -22,6 +22,8 @@ type Collector struct {
 | 
			
		||||
	Follows       *prometheus.Desc
 | 
			
		||||
	HookTasks     *prometheus.Desc
 | 
			
		||||
	Issues        *prometheus.Desc
 | 
			
		||||
	IssuesOpen    *prometheus.Desc
 | 
			
		||||
	IssuesClosed  *prometheus.Desc
 | 
			
		||||
	Labels        *prometheus.Desc
 | 
			
		||||
	LoginSources  *prometheus.Desc
 | 
			
		||||
	Milestones    *prometheus.Desc
 | 
			
		||||
@@ -77,6 +79,16 @@ func NewCollector() Collector {
 | 
			
		||||
			"Number of Issues",
 | 
			
		||||
			nil, nil,
 | 
			
		||||
		),
 | 
			
		||||
		IssuesOpen: prometheus.NewDesc(
 | 
			
		||||
			namespace+"issues_open",
 | 
			
		||||
			"Number of open Issues",
 | 
			
		||||
			nil, nil,
 | 
			
		||||
		),
 | 
			
		||||
		IssuesClosed: prometheus.NewDesc(
 | 
			
		||||
			namespace+"issues_closed",
 | 
			
		||||
			"Number of closed Issues",
 | 
			
		||||
			nil, nil,
 | 
			
		||||
		),
 | 
			
		||||
		Labels: prometheus.NewDesc(
 | 
			
		||||
			namespace+"labels",
 | 
			
		||||
			"Number of Labels",
 | 
			
		||||
@@ -165,6 +177,8 @@ func (c Collector) Describe(ch chan<- *prometheus.Desc) {
 | 
			
		||||
	ch <- c.Follows
 | 
			
		||||
	ch <- c.HookTasks
 | 
			
		||||
	ch <- c.Issues
 | 
			
		||||
	ch <- c.IssuesOpen
 | 
			
		||||
	ch <- c.IssuesClosed
 | 
			
		||||
	ch <- c.Labels
 | 
			
		||||
	ch <- c.LoginSources
 | 
			
		||||
	ch <- c.Milestones
 | 
			
		||||
@@ -221,6 +235,16 @@ func (c Collector) Collect(ch chan<- prometheus.Metric) {
 | 
			
		||||
		prometheus.GaugeValue,
 | 
			
		||||
		float64(stats.Counter.Issue),
 | 
			
		||||
	)
 | 
			
		||||
	ch <- prometheus.MustNewConstMetric(
 | 
			
		||||
		c.IssuesClosed,
 | 
			
		||||
		prometheus.GaugeValue,
 | 
			
		||||
		float64(stats.Counter.IssueClosed),
 | 
			
		||||
	)
 | 
			
		||||
	ch <- prometheus.MustNewConstMetric(
 | 
			
		||||
		c.IssuesOpen,
 | 
			
		||||
		prometheus.GaugeValue,
 | 
			
		||||
		float64(stats.Counter.IssueOpen),
 | 
			
		||||
	)
 | 
			
		||||
	ch <- prometheus.MustNewConstMetric(
 | 
			
		||||
		c.Labels,
 | 
			
		||||
		prometheus.GaugeValue,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user