9
activities_model "code.gitea.io/gitea/models/activities"
10
"code.gitea.io/gitea/models/db"
11
"code.gitea.io/gitea/modules/setting"
13
"github.com/prometheus/client_golang/prometheus"
16
const namespace = "gitea_"
20
type Collector struct {
21
Accesses *prometheus.Desc
22
Attachments *prometheus.Desc
23
BuildInfo *prometheus.Desc
24
Comments *prometheus.Desc
25
Follows *prometheus.Desc
26
HookTasks *prometheus.Desc
27
Issues *prometheus.Desc
28
IssuesOpen *prometheus.Desc
29
IssuesClosed *prometheus.Desc
30
IssuesByLabel *prometheus.Desc
31
IssuesByRepository *prometheus.Desc
32
Labels *prometheus.Desc
33
LoginSources *prometheus.Desc
34
Milestones *prometheus.Desc
35
Mirrors *prometheus.Desc
36
Oauths *prometheus.Desc
37
Organizations *prometheus.Desc
38
Projects *prometheus.Desc
39
ProjectBoards *prometheus.Desc
40
PublicKeys *prometheus.Desc
41
Releases *prometheus.Desc
42
Repositories *prometheus.Desc
43
Stars *prometheus.Desc
44
Teams *prometheus.Desc
45
UpdateTasks *prometheus.Desc
46
Users *prometheus.Desc
47
Watches *prometheus.Desc
48
Webhooks *prometheus.Desc
52
func NewCollector() Collector {
54
Accesses: prometheus.NewDesc(
59
Attachments: prometheus.NewDesc(
60
namespace+"attachments",
61
"Number of Attachments",
64
BuildInfo: prometheus.NewDesc(
65
namespace+"build_info",
74
Comments: prometheus.NewDesc(
79
Follows: prometheus.NewDesc(
84
HookTasks: prometheus.NewDesc(
85
namespace+"hooktasks",
86
"Number of HookTasks",
89
Issues: prometheus.NewDesc(
94
IssuesByLabel: prometheus.NewDesc(
95
namespace+"issues_by_label",
97
[]string{"label"}, nil,
99
IssuesByRepository: prometheus.NewDesc(
100
namespace+"issues_by_repository",
102
[]string{"repository"}, nil,
104
IssuesOpen: prometheus.NewDesc(
105
namespace+"issues_open",
106
"Number of open Issues",
109
IssuesClosed: prometheus.NewDesc(
110
namespace+"issues_closed",
111
"Number of closed Issues",
114
Labels: prometheus.NewDesc(
119
LoginSources: prometheus.NewDesc(
120
namespace+"loginsources",
121
"Number of LoginSources",
124
Milestones: prometheus.NewDesc(
125
namespace+"milestones",
126
"Number of Milestones",
129
Mirrors: prometheus.NewDesc(
134
Oauths: prometheus.NewDesc(
139
Organizations: prometheus.NewDesc(
140
namespace+"organizations",
141
"Number of Organizations",
144
Projects: prometheus.NewDesc(
145
namespace+"projects",
146
"Number of projects",
149
ProjectBoards: prometheus.NewDesc(
150
namespace+"projects_boards",
151
"Number of project boards",
154
PublicKeys: prometheus.NewDesc(
155
namespace+"publickeys",
156
"Number of PublicKeys",
159
Releases: prometheus.NewDesc(
160
namespace+"releases",
161
"Number of Releases",
164
Repositories: prometheus.NewDesc(
165
namespace+"repositories",
166
"Number of Repositories",
169
Stars: prometheus.NewDesc(
174
Teams: prometheus.NewDesc(
179
UpdateTasks: prometheus.NewDesc(
180
namespace+"updatetasks",
181
"Number of UpdateTasks",
184
Users: prometheus.NewDesc(
189
Watches: prometheus.NewDesc(
194
Webhooks: prometheus.NewDesc(
195
namespace+"webhooks",
196
"Number of Webhooks",
203
func (c Collector) Describe(ch chan<- *prometheus.Desc) {
211
ch <- c.IssuesByLabel
212
ch <- c.IssuesByRepository
220
ch <- c.Organizations
222
ch <- c.ProjectBoards
235
func (c Collector) Collect(ch chan<- prometheus.Metric) {
236
stats := activities_model.GetStatistic(db.DefaultContext)
238
ch <- prometheus.MustNewConstMetric(
240
prometheus.GaugeValue,
241
float64(stats.Counter.Access),
243
ch <- prometheus.MustNewConstMetric(
245
prometheus.GaugeValue,
246
float64(stats.Counter.Attachment),
248
ch <- prometheus.MustNewConstMetric(
250
prometheus.GaugeValue,
257
ch <- prometheus.MustNewConstMetric(
259
prometheus.GaugeValue,
260
float64(stats.Counter.Comment),
262
ch <- prometheus.MustNewConstMetric(
264
prometheus.GaugeValue,
265
float64(stats.Counter.Follow),
267
ch <- prometheus.MustNewConstMetric(
269
prometheus.GaugeValue,
270
float64(stats.Counter.HookTask),
272
ch <- prometheus.MustNewConstMetric(
274
prometheus.GaugeValue,
275
float64(stats.Counter.Issue),
277
for _, il := range stats.Counter.IssueByLabel {
278
ch <- prometheus.MustNewConstMetric(
280
prometheus.GaugeValue,
285
for _, ir := range stats.Counter.IssueByRepository {
286
ch <- prometheus.MustNewConstMetric(
287
c.IssuesByRepository,
288
prometheus.GaugeValue,
290
ir.OwnerName+"/"+ir.Repository,
293
ch <- prometheus.MustNewConstMetric(
295
prometheus.GaugeValue,
296
float64(stats.Counter.IssueClosed),
298
ch <- prometheus.MustNewConstMetric(
300
prometheus.GaugeValue,
301
float64(stats.Counter.IssueOpen),
303
ch <- prometheus.MustNewConstMetric(
305
prometheus.GaugeValue,
306
float64(stats.Counter.Label),
308
ch <- prometheus.MustNewConstMetric(
310
prometheus.GaugeValue,
311
float64(stats.Counter.AuthSource),
313
ch <- prometheus.MustNewConstMetric(
315
prometheus.GaugeValue,
316
float64(stats.Counter.Milestone),
318
ch <- prometheus.MustNewConstMetric(
320
prometheus.GaugeValue,
321
float64(stats.Counter.Mirror),
323
ch <- prometheus.MustNewConstMetric(
325
prometheus.GaugeValue,
326
float64(stats.Counter.Oauth),
328
ch <- prometheus.MustNewConstMetric(
330
prometheus.GaugeValue,
331
float64(stats.Counter.Org),
333
ch <- prometheus.MustNewConstMetric(
335
prometheus.GaugeValue,
336
float64(stats.Counter.Project),
338
ch <- prometheus.MustNewConstMetric(
340
prometheus.GaugeValue,
341
float64(stats.Counter.ProjectBoard),
343
ch <- prometheus.MustNewConstMetric(
345
prometheus.GaugeValue,
346
float64(stats.Counter.PublicKey),
348
ch <- prometheus.MustNewConstMetric(
350
prometheus.GaugeValue,
351
float64(stats.Counter.Release),
353
ch <- prometheus.MustNewConstMetric(
355
prometheus.GaugeValue,
356
float64(stats.Counter.Repo),
358
ch <- prometheus.MustNewConstMetric(
360
prometheus.GaugeValue,
361
float64(stats.Counter.Star),
363
ch <- prometheus.MustNewConstMetric(
365
prometheus.GaugeValue,
366
float64(stats.Counter.Team),
368
ch <- prometheus.MustNewConstMetric(
370
prometheus.GaugeValue,
371
float64(stats.Counter.UpdateTask),
373
ch <- prometheus.MustNewConstMetric(
375
prometheus.GaugeValue,
376
float64(stats.Counter.User),
378
ch <- prometheus.MustNewConstMetric(
380
prometheus.GaugeValue,
381
float64(stats.Counter.Watch),
383
ch <- prometheus.MustNewConstMetric(
385
prometheus.GaugeValue,
386
float64(stats.Counter.Webhook),