gitech

Форк
0
/
collector.go 
388 строк · 8.6 Кб
1
// Copyright 2018 The Gitea Authors. All rights reserved.
2
// SPDX-License-Identifier: MIT
3

4
package metrics
5

6
import (
7
	"runtime"
8

9
	activities_model "code.gitea.io/gitea/models/activities"
10
	"code.gitea.io/gitea/models/db"
11
	"code.gitea.io/gitea/modules/setting"
12

13
	"github.com/prometheus/client_golang/prometheus"
14
)
15

16
const namespace = "gitea_"
17

18
// Collector implements the prometheus.Collector interface and
19
// exposes gitea metrics for prometheus
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
49
}
50

51
// NewCollector returns a new Collector with all prometheus.Desc initialized
52
func NewCollector() Collector {
53
	return Collector{
54
		Accesses: prometheus.NewDesc(
55
			namespace+"accesses",
56
			"Number of Accesses",
57
			nil, nil,
58
		),
59
		Attachments: prometheus.NewDesc(
60
			namespace+"attachments",
61
			"Number of Attachments",
62
			nil, nil,
63
		),
64
		BuildInfo: prometheus.NewDesc(
65
			namespace+"build_info",
66
			"Build information",
67
			[]string{
68
				"goarch",
69
				"goos",
70
				"goversion",
71
				"version",
72
			}, nil,
73
		),
74
		Comments: prometheus.NewDesc(
75
			namespace+"comments",
76
			"Number of Comments",
77
			nil, nil,
78
		),
79
		Follows: prometheus.NewDesc(
80
			namespace+"follows",
81
			"Number of Follows",
82
			nil, nil,
83
		),
84
		HookTasks: prometheus.NewDesc(
85
			namespace+"hooktasks",
86
			"Number of HookTasks",
87
			nil, nil,
88
		),
89
		Issues: prometheus.NewDesc(
90
			namespace+"issues",
91
			"Number of Issues",
92
			nil, nil,
93
		),
94
		IssuesByLabel: prometheus.NewDesc(
95
			namespace+"issues_by_label",
96
			"Number of Issues",
97
			[]string{"label"}, nil,
98
		),
99
		IssuesByRepository: prometheus.NewDesc(
100
			namespace+"issues_by_repository",
101
			"Number of Issues",
102
			[]string{"repository"}, nil,
103
		),
104
		IssuesOpen: prometheus.NewDesc(
105
			namespace+"issues_open",
106
			"Number of open Issues",
107
			nil, nil,
108
		),
109
		IssuesClosed: prometheus.NewDesc(
110
			namespace+"issues_closed",
111
			"Number of closed Issues",
112
			nil, nil,
113
		),
114
		Labels: prometheus.NewDesc(
115
			namespace+"labels",
116
			"Number of Labels",
117
			nil, nil,
118
		),
119
		LoginSources: prometheus.NewDesc(
120
			namespace+"loginsources",
121
			"Number of LoginSources",
122
			nil, nil,
123
		),
124
		Milestones: prometheus.NewDesc(
125
			namespace+"milestones",
126
			"Number of Milestones",
127
			nil, nil,
128
		),
129
		Mirrors: prometheus.NewDesc(
130
			namespace+"mirrors",
131
			"Number of Mirrors",
132
			nil, nil,
133
		),
134
		Oauths: prometheus.NewDesc(
135
			namespace+"oauths",
136
			"Number of Oauths",
137
			nil, nil,
138
		),
139
		Organizations: prometheus.NewDesc(
140
			namespace+"organizations",
141
			"Number of Organizations",
142
			nil, nil,
143
		),
144
		Projects: prometheus.NewDesc(
145
			namespace+"projects",
146
			"Number of projects",
147
			nil, nil,
148
		),
149
		ProjectBoards: prometheus.NewDesc(
150
			namespace+"projects_boards",
151
			"Number of project boards",
152
			nil, nil,
153
		),
154
		PublicKeys: prometheus.NewDesc(
155
			namespace+"publickeys",
156
			"Number of PublicKeys",
157
			nil, nil,
158
		),
159
		Releases: prometheus.NewDesc(
160
			namespace+"releases",
161
			"Number of Releases",
162
			nil, nil,
163
		),
164
		Repositories: prometheus.NewDesc(
165
			namespace+"repositories",
166
			"Number of Repositories",
167
			nil, nil,
168
		),
169
		Stars: prometheus.NewDesc(
170
			namespace+"stars",
171
			"Number of Stars",
172
			nil, nil,
173
		),
174
		Teams: prometheus.NewDesc(
175
			namespace+"teams",
176
			"Number of Teams",
177
			nil, nil,
178
		),
179
		UpdateTasks: prometheus.NewDesc(
180
			namespace+"updatetasks",
181
			"Number of UpdateTasks",
182
			nil, nil,
183
		),
184
		Users: prometheus.NewDesc(
185
			namespace+"users",
186
			"Number of Users",
187
			nil, nil,
188
		),
189
		Watches: prometheus.NewDesc(
190
			namespace+"watches",
191
			"Number of Watches",
192
			nil, nil,
193
		),
194
		Webhooks: prometheus.NewDesc(
195
			namespace+"webhooks",
196
			"Number of Webhooks",
197
			nil, nil,
198
		),
199
	}
200
}
201

202
// Describe returns all possible prometheus.Desc
203
func (c Collector) Describe(ch chan<- *prometheus.Desc) {
204
	ch <- c.Accesses
205
	ch <- c.Attachments
206
	ch <- c.BuildInfo
207
	ch <- c.Comments
208
	ch <- c.Follows
209
	ch <- c.HookTasks
210
	ch <- c.Issues
211
	ch <- c.IssuesByLabel
212
	ch <- c.IssuesByRepository
213
	ch <- c.IssuesOpen
214
	ch <- c.IssuesClosed
215
	ch <- c.Labels
216
	ch <- c.LoginSources
217
	ch <- c.Milestones
218
	ch <- c.Mirrors
219
	ch <- c.Oauths
220
	ch <- c.Organizations
221
	ch <- c.Projects
222
	ch <- c.ProjectBoards
223
	ch <- c.PublicKeys
224
	ch <- c.Releases
225
	ch <- c.Repositories
226
	ch <- c.Stars
227
	ch <- c.Teams
228
	ch <- c.UpdateTasks
229
	ch <- c.Users
230
	ch <- c.Watches
231
	ch <- c.Webhooks
232
}
233

234
// Collect returns the metrics with values
235
func (c Collector) Collect(ch chan<- prometheus.Metric) {
236
	stats := activities_model.GetStatistic(db.DefaultContext)
237

238
	ch <- prometheus.MustNewConstMetric(
239
		c.Accesses,
240
		prometheus.GaugeValue,
241
		float64(stats.Counter.Access),
242
	)
243
	ch <- prometheus.MustNewConstMetric(
244
		c.Attachments,
245
		prometheus.GaugeValue,
246
		float64(stats.Counter.Attachment),
247
	)
248
	ch <- prometheus.MustNewConstMetric(
249
		c.BuildInfo,
250
		prometheus.GaugeValue,
251
		1,
252
		runtime.GOARCH,
253
		runtime.GOOS,
254
		runtime.Version(),
255
		setting.AppVer,
256
	)
257
	ch <- prometheus.MustNewConstMetric(
258
		c.Comments,
259
		prometheus.GaugeValue,
260
		float64(stats.Counter.Comment),
261
	)
262
	ch <- prometheus.MustNewConstMetric(
263
		c.Follows,
264
		prometheus.GaugeValue,
265
		float64(stats.Counter.Follow),
266
	)
267
	ch <- prometheus.MustNewConstMetric(
268
		c.HookTasks,
269
		prometheus.GaugeValue,
270
		float64(stats.Counter.HookTask),
271
	)
272
	ch <- prometheus.MustNewConstMetric(
273
		c.Issues,
274
		prometheus.GaugeValue,
275
		float64(stats.Counter.Issue),
276
	)
277
	for _, il := range stats.Counter.IssueByLabel {
278
		ch <- prometheus.MustNewConstMetric(
279
			c.IssuesByLabel,
280
			prometheus.GaugeValue,
281
			float64(il.Count),
282
			il.Label,
283
		)
284
	}
285
	for _, ir := range stats.Counter.IssueByRepository {
286
		ch <- prometheus.MustNewConstMetric(
287
			c.IssuesByRepository,
288
			prometheus.GaugeValue,
289
			float64(ir.Count),
290
			ir.OwnerName+"/"+ir.Repository,
291
		)
292
	}
293
	ch <- prometheus.MustNewConstMetric(
294
		c.IssuesClosed,
295
		prometheus.GaugeValue,
296
		float64(stats.Counter.IssueClosed),
297
	)
298
	ch <- prometheus.MustNewConstMetric(
299
		c.IssuesOpen,
300
		prometheus.GaugeValue,
301
		float64(stats.Counter.IssueOpen),
302
	)
303
	ch <- prometheus.MustNewConstMetric(
304
		c.Labels,
305
		prometheus.GaugeValue,
306
		float64(stats.Counter.Label),
307
	)
308
	ch <- prometheus.MustNewConstMetric(
309
		c.LoginSources,
310
		prometheus.GaugeValue,
311
		float64(stats.Counter.AuthSource),
312
	)
313
	ch <- prometheus.MustNewConstMetric(
314
		c.Milestones,
315
		prometheus.GaugeValue,
316
		float64(stats.Counter.Milestone),
317
	)
318
	ch <- prometheus.MustNewConstMetric(
319
		c.Mirrors,
320
		prometheus.GaugeValue,
321
		float64(stats.Counter.Mirror),
322
	)
323
	ch <- prometheus.MustNewConstMetric(
324
		c.Oauths,
325
		prometheus.GaugeValue,
326
		float64(stats.Counter.Oauth),
327
	)
328
	ch <- prometheus.MustNewConstMetric(
329
		c.Organizations,
330
		prometheus.GaugeValue,
331
		float64(stats.Counter.Org),
332
	)
333
	ch <- prometheus.MustNewConstMetric(
334
		c.Projects,
335
		prometheus.GaugeValue,
336
		float64(stats.Counter.Project),
337
	)
338
	ch <- prometheus.MustNewConstMetric(
339
		c.ProjectBoards,
340
		prometheus.GaugeValue,
341
		float64(stats.Counter.ProjectBoard),
342
	)
343
	ch <- prometheus.MustNewConstMetric(
344
		c.PublicKeys,
345
		prometheus.GaugeValue,
346
		float64(stats.Counter.PublicKey),
347
	)
348
	ch <- prometheus.MustNewConstMetric(
349
		c.Releases,
350
		prometheus.GaugeValue,
351
		float64(stats.Counter.Release),
352
	)
353
	ch <- prometheus.MustNewConstMetric(
354
		c.Repositories,
355
		prometheus.GaugeValue,
356
		float64(stats.Counter.Repo),
357
	)
358
	ch <- prometheus.MustNewConstMetric(
359
		c.Stars,
360
		prometheus.GaugeValue,
361
		float64(stats.Counter.Star),
362
	)
363
	ch <- prometheus.MustNewConstMetric(
364
		c.Teams,
365
		prometheus.GaugeValue,
366
		float64(stats.Counter.Team),
367
	)
368
	ch <- prometheus.MustNewConstMetric(
369
		c.UpdateTasks,
370
		prometheus.GaugeValue,
371
		float64(stats.Counter.UpdateTask),
372
	)
373
	ch <- prometheus.MustNewConstMetric(
374
		c.Users,
375
		prometheus.GaugeValue,
376
		float64(stats.Counter.User),
377
	)
378
	ch <- prometheus.MustNewConstMetric(
379
		c.Watches,
380
		prometheus.GaugeValue,
381
		float64(stats.Counter.Watch),
382
	)
383
	ch <- prometheus.MustNewConstMetric(
384
		c.Webhooks,
385
		prometheus.GaugeValue,
386
		float64(stats.Counter.Webhook),
387
	)
388
}
389

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.