mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-26 17:08:25 +00:00 
			
		
		
		
	* 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
		
			
				
	
	
		
			300 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			300 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // 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),
 | |
| 	)
 | |
| }
 |