diff options
author | Stanislav <me@gaydin.io> | 2018-11-05 06:20:00 +0300 |
---|---|---|
committer | techknowlogick <hello@techknowlogick.com> | 2018-11-04 22:20:00 -0500 |
commit | 078c404c3b0f283a242ad93b6a2f4cabb2575410 (patch) | |
tree | f6ee03707e7c5938c63c692a1ba1a945d4d1d470 /modules/metrics/collector.go | |
parent | 92fb89f6e1a10d8431de536823a0680af417a04f (diff) | |
download | gitea-078c404c3b0f283a242ad93b6a2f4cabb2575410.tar.gz gitea-078c404c3b0f283a242ad93b6a2f4cabb2575410.zip |
Prometheus endpoint (#5256)
* Add prometheus collector and route
* dep ensure -add github.com/prometheus/client_golang/prometheus
* dep ensure -update github.com/golang/protobuf
* add metrics to reserved usernames
* add comment head in metrics package
* fix style imports
* add metrics settings
* add bearer token check
* mapping metrics configs
* fix lint
* update config cheat sheet
* update conf sample, typo fix
Diffstat (limited to 'modules/metrics/collector.go')
-rw-r--r-- | modules/metrics/collector.go | 299 |
1 files changed, 299 insertions, 0 deletions
diff --git a/modules/metrics/collector.go b/modules/metrics/collector.go new file mode 100644 index 0000000000..6f6cf7cb64 --- /dev/null +++ b/modules/metrics/collector.go @@ -0,0 +1,299 @@ +// Copyright 2018 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package metrics + +import ( + "code.gitea.io/gitea/models" + + "github.com/prometheus/client_golang/prometheus" +) + +const namespace = "gitea_" + +// Collector implements the prometheus.Collector interface and +// exposes gitea metrics for prometheus +type Collector struct { + Accesses *prometheus.Desc + Actions *prometheus.Desc + Attachments *prometheus.Desc + Comments *prometheus.Desc + Follows *prometheus.Desc + HookTasks *prometheus.Desc + Issues *prometheus.Desc + Labels *prometheus.Desc + LoginSources *prometheus.Desc + Milestones *prometheus.Desc + Mirrors *prometheus.Desc + Oauths *prometheus.Desc + Organizations *prometheus.Desc + PublicKeys *prometheus.Desc + Releases *prometheus.Desc + Repositories *prometheus.Desc + Stars *prometheus.Desc + Teams *prometheus.Desc + UpdateTasks *prometheus.Desc + Users *prometheus.Desc + Watches *prometheus.Desc + Webhooks *prometheus.Desc +} + +// NewCollector returns a new Collector with all prometheus.Desc initialized +func NewCollector() Collector { + return Collector{ + Accesses: prometheus.NewDesc( + namespace+"accesses", + "Number of Accesses", + nil, nil, + ), + Actions: prometheus.NewDesc( + namespace+"actions", + "Number of Actions", + nil, nil, + ), + Attachments: prometheus.NewDesc( + namespace+"attachments", + "Number of Attachments", + nil, nil, + ), + Comments: prometheus.NewDesc( + namespace+"comments", + "Number of Comments", + nil, nil, + ), + Follows: prometheus.NewDesc( + namespace+"follows", + "Number of Follows", + nil, nil, + ), + HookTasks: prometheus.NewDesc( + namespace+"hooktasks", + "Number of HookTasks", + nil, nil, + ), + Issues: prometheus.NewDesc( + namespace+"issues", + "Number of Issues", + nil, nil, + ), + Labels: prometheus.NewDesc( + namespace+"labels", + "Number of Labels", + nil, nil, + ), + LoginSources: prometheus.NewDesc( + namespace+"loginsources", + "Number of LoginSources", + nil, nil, + ), + Milestones: prometheus.NewDesc( + namespace+"milestones", + "Number of Milestones", + nil, nil, + ), + Mirrors: prometheus.NewDesc( + namespace+"mirrors", + "Number of Mirrors", + nil, nil, + ), + Oauths: prometheus.NewDesc( + namespace+"oauths", + "Number of Oauths", + nil, nil, + ), + Organizations: prometheus.NewDesc( + namespace+"organizations", + "Number of Organizations", + nil, nil, + ), + PublicKeys: prometheus.NewDesc( + namespace+"publickeys", + "Number of PublicKeys", + nil, nil, + ), + Releases: prometheus.NewDesc( + namespace+"releases", + "Number of Releases", + nil, nil, + ), + Repositories: prometheus.NewDesc( + namespace+"repositories", + "Number of Repositories", + nil, nil, + ), + Stars: prometheus.NewDesc( + namespace+"stars", + "Number of Stars", + nil, nil, + ), + Teams: prometheus.NewDesc( + namespace+"teams", + "Number of Teams", + nil, nil, + ), + UpdateTasks: prometheus.NewDesc( + namespace+"updatetasks", + "Number of UpdateTasks", + nil, nil, + ), + Users: prometheus.NewDesc( + namespace+"users", + "Number of Users", + nil, nil, + ), + Watches: prometheus.NewDesc( + namespace+"watches", + "Number of Watches", + nil, nil, + ), + Webhooks: prometheus.NewDesc( + namespace+"webhooks", + "Number of Webhooks", + nil, nil, + ), + } + +} + +// Describe returns all possible prometheus.Desc +func (c Collector) Describe(ch chan<- *prometheus.Desc) { + ch <- c.Accesses + ch <- c.Actions + ch <- c.Attachments + ch <- c.Comments + ch <- c.Follows + ch <- c.HookTasks + ch <- c.Issues + ch <- c.Labels + ch <- c.LoginSources + ch <- c.Milestones + ch <- c.Mirrors + ch <- c.Oauths + ch <- c.Organizations + ch <- c.PublicKeys + ch <- c.Releases + ch <- c.Repositories + ch <- c.Stars + ch <- c.Teams + ch <- c.UpdateTasks + ch <- c.Users + ch <- c.Watches + ch <- c.Webhooks +} + +// Collect returns the metrics with values +func (c Collector) Collect(ch chan<- prometheus.Metric) { + stats := models.GetStatistic() + + ch <- prometheus.MustNewConstMetric( + c.Accesses, + prometheus.GaugeValue, + float64(stats.Counter.Access), + ) + ch <- prometheus.MustNewConstMetric( + c.Actions, + prometheus.GaugeValue, + float64(stats.Counter.Action), + ) + ch <- prometheus.MustNewConstMetric( + c.Attachments, + prometheus.GaugeValue, + float64(stats.Counter.Attachment), + ) + ch <- prometheus.MustNewConstMetric( + c.Comments, + prometheus.GaugeValue, + float64(stats.Counter.Comment), + ) + ch <- prometheus.MustNewConstMetric( + c.Follows, + prometheus.GaugeValue, + float64(stats.Counter.Follow), + ) + ch <- prometheus.MustNewConstMetric( + c.HookTasks, + prometheus.GaugeValue, + float64(stats.Counter.HookTask), + ) + ch <- prometheus.MustNewConstMetric( + c.Issues, + prometheus.GaugeValue, + float64(stats.Counter.Issue), + ) + ch <- prometheus.MustNewConstMetric( + c.Labels, + prometheus.GaugeValue, + float64(stats.Counter.Label), + ) + ch <- prometheus.MustNewConstMetric( + c.LoginSources, + prometheus.GaugeValue, + float64(stats.Counter.LoginSource), + ) + ch <- prometheus.MustNewConstMetric( + c.Milestones, + prometheus.GaugeValue, + float64(stats.Counter.Milestone), + ) + ch <- prometheus.MustNewConstMetric( + c.Mirrors, + prometheus.GaugeValue, + float64(stats.Counter.Mirror), + ) + ch <- prometheus.MustNewConstMetric( + c.Oauths, + prometheus.GaugeValue, + float64(stats.Counter.Oauth), + ) + ch <- prometheus.MustNewConstMetric( + c.Organizations, + prometheus.GaugeValue, + float64(stats.Counter.Org), + ) + ch <- prometheus.MustNewConstMetric( + c.PublicKeys, + prometheus.GaugeValue, + float64(stats.Counter.PublicKey), + ) + ch <- prometheus.MustNewConstMetric( + c.Releases, + prometheus.GaugeValue, + float64(stats.Counter.Release), + ) + ch <- prometheus.MustNewConstMetric( + c.Repositories, + prometheus.GaugeValue, + float64(stats.Counter.Repo), + ) + ch <- prometheus.MustNewConstMetric( + c.Stars, + prometheus.GaugeValue, + float64(stats.Counter.Star), + ) + ch <- prometheus.MustNewConstMetric( + c.Teams, + prometheus.GaugeValue, + float64(stats.Counter.Team), + ) + ch <- prometheus.MustNewConstMetric( + c.UpdateTasks, + prometheus.GaugeValue, + float64(stats.Counter.UpdateTask), + ) + ch <- prometheus.MustNewConstMetric( + c.Users, + prometheus.GaugeValue, + float64(stats.Counter.User), + ) + ch <- prometheus.MustNewConstMetric( + c.Watches, + prometheus.GaugeValue, + float64(stats.Counter.Watch), + ) + ch <- prometheus.MustNewConstMetric( + c.Webhooks, + prometheus.GaugeValue, + float64(stats.Counter.Webhook), + ) +} |