forked from kevadesu/forgejo
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
This commit is contained in:
parent
92fb89f6e1
commit
078c404c3b
112 changed files with 24693 additions and 3011 deletions
299
modules/metrics/collector.go
Normal file
299
modules/metrics/collector.go
Normal file
|
@ -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),
|
||||
)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue