* Get the issue counts in one query Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: Andrew Thornton <art27@cantab.net>tags/v1.16.0-rc1
@@ -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)) |
@@ -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, |