2018-11-05 06:20:00 +03:00
// Copyright 2018 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2018-11-05 06:20:00 +03:00
package metrics
import (
include build info in Prometheus metrics (#22819)
Related to: https://github.com/go-gitea/gitea/issues/18061
This PR adds build info to the Prometheus metrics. This includes:
- goarch: https://pkg.go.dev/runtime#GOARCH
- goos: https://pkg.go.dev/runtime#pkg-constants
- goversion: https://pkg.go.dev/runtime#Version
- gitea version: just exposes the existing
code.gitea.io/gitea/modules/setting.AppVer
It's a similar approach to what some other Golang projects are doing,
e.g. Prometheus:
https://github.com/prometheus/common/blob/main/version/info.go
example /metrics response from Prometheus:
```
# HELP prometheus_build_info A metric with a constant '1' value labeled by version, revision, branch, goversion from which prometheus was built, and the goos and goarch for the build.
# TYPE prometheus_build_info gauge
prometheus_build_info{branch="HEAD",goarch="amd64",goos="linux",goversion="go1.19.4",revision="c0d8a56c69014279464c0e15d8bfb0e153af0dab",version="2.41.0"} 1
```
/metrics response from gitea with this PR:
```
# HELP gitea_build_info Build information
# TYPE gitea_build_info gauge
gitea_build_info{goarch="amd64",goos="linux",goversion="go1.20",version="2c6cc0b8c"} 1
```
Signed-off-by: Michal Wasilewski <mwasilewski@gmx.com>
<!--
Please check the following:
1. Make sure you are targeting the `main` branch, pull requests on
release branches are only allowed for bug fixes.
2. Read contributing guidelines:
https://github.com/go-gitea/gitea/blob/main/CONTRIBUTING.md
3. Describe what your pull request does and which issue you're targeting
(if any)
-->
Signed-off-by: Michal Wasilewski <mwasilewski@gmx.com>
2023-02-08 20:54:01 +03:00
"runtime"
2022-08-25 05:31:57 +03:00
activities_model "code.gitea.io/gitea/models/activities"
2023-09-14 20:09:32 +03:00
"code.gitea.io/gitea/models/db"
include build info in Prometheus metrics (#22819)
Related to: https://github.com/go-gitea/gitea/issues/18061
This PR adds build info to the Prometheus metrics. This includes:
- goarch: https://pkg.go.dev/runtime#GOARCH
- goos: https://pkg.go.dev/runtime#pkg-constants
- goversion: https://pkg.go.dev/runtime#Version
- gitea version: just exposes the existing
code.gitea.io/gitea/modules/setting.AppVer
It's a similar approach to what some other Golang projects are doing,
e.g. Prometheus:
https://github.com/prometheus/common/blob/main/version/info.go
example /metrics response from Prometheus:
```
# HELP prometheus_build_info A metric with a constant '1' value labeled by version, revision, branch, goversion from which prometheus was built, and the goos and goarch for the build.
# TYPE prometheus_build_info gauge
prometheus_build_info{branch="HEAD",goarch="amd64",goos="linux",goversion="go1.19.4",revision="c0d8a56c69014279464c0e15d8bfb0e153af0dab",version="2.41.0"} 1
```
/metrics response from gitea with this PR:
```
# HELP gitea_build_info Build information
# TYPE gitea_build_info gauge
gitea_build_info{goarch="amd64",goos="linux",goversion="go1.20",version="2c6cc0b8c"} 1
```
Signed-off-by: Michal Wasilewski <mwasilewski@gmx.com>
<!--
Please check the following:
1. Make sure you are targeting the `main` branch, pull requests on
release branches are only allowed for bug fixes.
2. Read contributing guidelines:
https://github.com/go-gitea/gitea/blob/main/CONTRIBUTING.md
3. Describe what your pull request does and which issue you're targeting
(if any)
-->
Signed-off-by: Michal Wasilewski <mwasilewski@gmx.com>
2023-02-08 20:54:01 +03:00
"code.gitea.io/gitea/modules/setting"
2018-11-05 06:20:00 +03:00
"github.com/prometheus/client_golang/prometheus"
)
const namespace = "gitea_"
// Collector implements the prometheus.Collector interface and
// exposes gitea metrics for prometheus
type Collector struct {
2021-10-05 21:39:37 +03:00
Accesses * prometheus . Desc
Attachments * prometheus . Desc
include build info in Prometheus metrics (#22819)
Related to: https://github.com/go-gitea/gitea/issues/18061
This PR adds build info to the Prometheus metrics. This includes:
- goarch: https://pkg.go.dev/runtime#GOARCH
- goos: https://pkg.go.dev/runtime#pkg-constants
- goversion: https://pkg.go.dev/runtime#Version
- gitea version: just exposes the existing
code.gitea.io/gitea/modules/setting.AppVer
It's a similar approach to what some other Golang projects are doing,
e.g. Prometheus:
https://github.com/prometheus/common/blob/main/version/info.go
example /metrics response from Prometheus:
```
# HELP prometheus_build_info A metric with a constant '1' value labeled by version, revision, branch, goversion from which prometheus was built, and the goos and goarch for the build.
# TYPE prometheus_build_info gauge
prometheus_build_info{branch="HEAD",goarch="amd64",goos="linux",goversion="go1.19.4",revision="c0d8a56c69014279464c0e15d8bfb0e153af0dab",version="2.41.0"} 1
```
/metrics response from gitea with this PR:
```
# HELP gitea_build_info Build information
# TYPE gitea_build_info gauge
gitea_build_info{goarch="amd64",goos="linux",goversion="go1.20",version="2c6cc0b8c"} 1
```
Signed-off-by: Michal Wasilewski <mwasilewski@gmx.com>
<!--
Please check the following:
1. Make sure you are targeting the `main` branch, pull requests on
release branches are only allowed for bug fixes.
2. Read contributing guidelines:
https://github.com/go-gitea/gitea/blob/main/CONTRIBUTING.md
3. Describe what your pull request does and which issue you're targeting
(if any)
-->
Signed-off-by: Michal Wasilewski <mwasilewski@gmx.com>
2023-02-08 20:54:01 +03:00
BuildInfo * prometheus . Desc
2021-10-05 21:39:37 +03:00
Comments * prometheus . Desc
Follows * prometheus . Desc
HookTasks * prometheus . Desc
Issues * prometheus . Desc
IssuesOpen * prometheus . Desc
IssuesClosed * prometheus . Desc
IssuesByLabel * prometheus . Desc
IssuesByRepository * prometheus . Desc
Labels * prometheus . Desc
LoginSources * prometheus . Desc
Milestones * prometheus . Desc
Mirrors * prometheus . Desc
Oauths * prometheus . Desc
Organizations * prometheus . Desc
Projects * prometheus . Desc
2024-05-27 11:59:54 +03:00
ProjectColumns * prometheus . Desc
2021-10-05 21:39:37 +03:00
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
2018-11-05 06:20:00 +03:00
}
// 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 ,
) ,
Attachments : prometheus . NewDesc (
namespace + "attachments" ,
"Number of Attachments" ,
nil , nil ,
) ,
include build info in Prometheus metrics (#22819)
Related to: https://github.com/go-gitea/gitea/issues/18061
This PR adds build info to the Prometheus metrics. This includes:
- goarch: https://pkg.go.dev/runtime#GOARCH
- goos: https://pkg.go.dev/runtime#pkg-constants
- goversion: https://pkg.go.dev/runtime#Version
- gitea version: just exposes the existing
code.gitea.io/gitea/modules/setting.AppVer
It's a similar approach to what some other Golang projects are doing,
e.g. Prometheus:
https://github.com/prometheus/common/blob/main/version/info.go
example /metrics response from Prometheus:
```
# HELP prometheus_build_info A metric with a constant '1' value labeled by version, revision, branch, goversion from which prometheus was built, and the goos and goarch for the build.
# TYPE prometheus_build_info gauge
prometheus_build_info{branch="HEAD",goarch="amd64",goos="linux",goversion="go1.19.4",revision="c0d8a56c69014279464c0e15d8bfb0e153af0dab",version="2.41.0"} 1
```
/metrics response from gitea with this PR:
```
# HELP gitea_build_info Build information
# TYPE gitea_build_info gauge
gitea_build_info{goarch="amd64",goos="linux",goversion="go1.20",version="2c6cc0b8c"} 1
```
Signed-off-by: Michal Wasilewski <mwasilewski@gmx.com>
<!--
Please check the following:
1. Make sure you are targeting the `main` branch, pull requests on
release branches are only allowed for bug fixes.
2. Read contributing guidelines:
https://github.com/go-gitea/gitea/blob/main/CONTRIBUTING.md
3. Describe what your pull request does and which issue you're targeting
(if any)
-->
Signed-off-by: Michal Wasilewski <mwasilewski@gmx.com>
2023-02-08 20:54:01 +03:00
BuildInfo : prometheus . NewDesc (
namespace + "build_info" ,
"Build information" ,
[ ] string {
"goarch" ,
"goos" ,
"goversion" ,
"version" ,
} , nil ,
) ,
2018-11-05 06:20:00 +03:00
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 ,
) ,
2021-10-04 01:46:44 +03:00
IssuesByLabel : prometheus . NewDesc (
namespace + "issues_by_label" ,
"Number of Issues" ,
[ ] string { "label" } , nil ,
) ,
2021-10-05 21:39:37 +03:00
IssuesByRepository : prometheus . NewDesc (
namespace + "issues_by_repository" ,
"Number of Issues" ,
[ ] string { "repository" } , nil ,
) ,
2021-08-07 12:43:50 +03:00
IssuesOpen : prometheus . NewDesc (
namespace + "issues_open" ,
"Number of open Issues" ,
nil , nil ,
) ,
IssuesClosed : prometheus . NewDesc (
namespace + "issues_closed" ,
"Number of closed Issues" ,
nil , nil ,
) ,
2018-11-05 06:20:00 +03:00
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 ,
) ,
2021-10-02 04:32:15 +03:00
Projects : prometheus . NewDesc (
namespace + "projects" ,
"Number of projects" ,
nil , nil ,
) ,
2024-05-27 11:59:54 +03:00
ProjectColumns : prometheus . NewDesc (
namespace + "projects_boards" , // TODO: change the key name will affect the consume's result history
"Number of project columns" ,
2021-10-02 04:32:15 +03:00
nil , nil ,
) ,
2018-11-05 06:20:00 +03:00
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 . Attachments
include build info in Prometheus metrics (#22819)
Related to: https://github.com/go-gitea/gitea/issues/18061
This PR adds build info to the Prometheus metrics. This includes:
- goarch: https://pkg.go.dev/runtime#GOARCH
- goos: https://pkg.go.dev/runtime#pkg-constants
- goversion: https://pkg.go.dev/runtime#Version
- gitea version: just exposes the existing
code.gitea.io/gitea/modules/setting.AppVer
It's a similar approach to what some other Golang projects are doing,
e.g. Prometheus:
https://github.com/prometheus/common/blob/main/version/info.go
example /metrics response from Prometheus:
```
# HELP prometheus_build_info A metric with a constant '1' value labeled by version, revision, branch, goversion from which prometheus was built, and the goos and goarch for the build.
# TYPE prometheus_build_info gauge
prometheus_build_info{branch="HEAD",goarch="amd64",goos="linux",goversion="go1.19.4",revision="c0d8a56c69014279464c0e15d8bfb0e153af0dab",version="2.41.0"} 1
```
/metrics response from gitea with this PR:
```
# HELP gitea_build_info Build information
# TYPE gitea_build_info gauge
gitea_build_info{goarch="amd64",goos="linux",goversion="go1.20",version="2c6cc0b8c"} 1
```
Signed-off-by: Michal Wasilewski <mwasilewski@gmx.com>
<!--
Please check the following:
1. Make sure you are targeting the `main` branch, pull requests on
release branches are only allowed for bug fixes.
2. Read contributing guidelines:
https://github.com/go-gitea/gitea/blob/main/CONTRIBUTING.md
3. Describe what your pull request does and which issue you're targeting
(if any)
-->
Signed-off-by: Michal Wasilewski <mwasilewski@gmx.com>
2023-02-08 20:54:01 +03:00
ch <- c . BuildInfo
2018-11-05 06:20:00 +03:00
ch <- c . Comments
ch <- c . Follows
ch <- c . HookTasks
ch <- c . Issues
2021-10-04 01:46:44 +03:00
ch <- c . IssuesByLabel
2021-10-05 21:39:37 +03:00
ch <- c . IssuesByRepository
2021-08-07 12:43:50 +03:00
ch <- c . IssuesOpen
ch <- c . IssuesClosed
2018-11-05 06:20:00 +03:00
ch <- c . Labels
ch <- c . LoginSources
ch <- c . Milestones
ch <- c . Mirrors
ch <- c . Oauths
ch <- c . Organizations
2021-10-02 04:32:15 +03:00
ch <- c . Projects
2024-05-27 11:59:54 +03:00
ch <- c . ProjectColumns
2018-11-05 06:20:00 +03:00
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 ) {
2023-09-14 20:09:32 +03:00
stats := activities_model . GetStatistic ( db . DefaultContext )
2018-11-05 06:20:00 +03:00
ch <- prometheus . MustNewConstMetric (
c . Accesses ,
prometheus . GaugeValue ,
float64 ( stats . Counter . Access ) ,
)
ch <- prometheus . MustNewConstMetric (
c . Attachments ,
prometheus . GaugeValue ,
float64 ( stats . Counter . Attachment ) ,
)
include build info in Prometheus metrics (#22819)
Related to: https://github.com/go-gitea/gitea/issues/18061
This PR adds build info to the Prometheus metrics. This includes:
- goarch: https://pkg.go.dev/runtime#GOARCH
- goos: https://pkg.go.dev/runtime#pkg-constants
- goversion: https://pkg.go.dev/runtime#Version
- gitea version: just exposes the existing
code.gitea.io/gitea/modules/setting.AppVer
It's a similar approach to what some other Golang projects are doing,
e.g. Prometheus:
https://github.com/prometheus/common/blob/main/version/info.go
example /metrics response from Prometheus:
```
# HELP prometheus_build_info A metric with a constant '1' value labeled by version, revision, branch, goversion from which prometheus was built, and the goos and goarch for the build.
# TYPE prometheus_build_info gauge
prometheus_build_info{branch="HEAD",goarch="amd64",goos="linux",goversion="go1.19.4",revision="c0d8a56c69014279464c0e15d8bfb0e153af0dab",version="2.41.0"} 1
```
/metrics response from gitea with this PR:
```
# HELP gitea_build_info Build information
# TYPE gitea_build_info gauge
gitea_build_info{goarch="amd64",goos="linux",goversion="go1.20",version="2c6cc0b8c"} 1
```
Signed-off-by: Michal Wasilewski <mwasilewski@gmx.com>
<!--
Please check the following:
1. Make sure you are targeting the `main` branch, pull requests on
release branches are only allowed for bug fixes.
2. Read contributing guidelines:
https://github.com/go-gitea/gitea/blob/main/CONTRIBUTING.md
3. Describe what your pull request does and which issue you're targeting
(if any)
-->
Signed-off-by: Michal Wasilewski <mwasilewski@gmx.com>
2023-02-08 20:54:01 +03:00
ch <- prometheus . MustNewConstMetric (
c . BuildInfo ,
prometheus . GaugeValue ,
1 ,
runtime . GOARCH ,
runtime . GOOS ,
runtime . Version ( ) ,
setting . AppVer ,
)
2018-11-05 06:20:00 +03:00
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 ) ,
)
2021-10-04 01:46:44 +03:00
for _ , il := range stats . Counter . IssueByLabel {
ch <- prometheus . MustNewConstMetric (
c . IssuesByLabel ,
prometheus . GaugeValue ,
float64 ( il . Count ) ,
il . Label ,
)
}
2021-10-05 21:39:37 +03:00
for _ , ir := range stats . Counter . IssueByRepository {
ch <- prometheus . MustNewConstMetric (
c . IssuesByRepository ,
prometheus . GaugeValue ,
float64 ( ir . Count ) ,
ir . OwnerName + "/" + ir . Repository ,
)
}
2021-08-07 12:43:50 +03:00
ch <- prometheus . MustNewConstMetric (
c . IssuesClosed ,
prometheus . GaugeValue ,
float64 ( stats . Counter . IssueClosed ) ,
)
ch <- prometheus . MustNewConstMetric (
c . IssuesOpen ,
prometheus . GaugeValue ,
float64 ( stats . Counter . IssueOpen ) ,
)
2018-11-05 06:20:00 +03:00
ch <- prometheus . MustNewConstMetric (
c . Labels ,
prometheus . GaugeValue ,
float64 ( stats . Counter . Label ) ,
)
ch <- prometheus . MustNewConstMetric (
c . LoginSources ,
prometheus . GaugeValue ,
2022-01-02 16:12:35 +03:00
float64 ( stats . Counter . AuthSource ) ,
2018-11-05 06:20:00 +03:00
)
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 ) ,
2021-10-02 04:32:15 +03:00
)
ch <- prometheus . MustNewConstMetric (
c . Projects ,
prometheus . GaugeValue ,
float64 ( stats . Counter . Project ) ,
)
ch <- prometheus . MustNewConstMetric (
2024-05-27 11:59:54 +03:00
c . ProjectColumns ,
2021-10-02 04:32:15 +03:00
prometheus . GaugeValue ,
2024-05-27 11:59:54 +03:00
float64 ( stats . Counter . ProjectColumn ) ,
2018-11-05 06:20:00 +03:00
)
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 ) ,
)
}