Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added domain metric #128

Merged
merged 3 commits into from
Jun 12, 2024
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Added more info to domain_info metric
  • Loading branch information
adamspd committed May 27, 2024
commit 5c618165ac7f819977630423a58dee37879f3bd2
111 changes: 99 additions & 12 deletions collectors/domains.go
Original file line number Diff line number Diff line change
@@ -1,15 +1,22 @@
package collectors

import (
"time"

"github.com/bosh-prometheus/cf_exporter/models"
"github.com/prometheus/client_golang/prometheus"
)

type DomainsCollector struct {
namespace string
environment string
deployment string
domainInfoMetric *prometheus.GaugeVec
namespace string
environment string
deployment string
domainInfoMetric *prometheus.GaugeVec
domainInfoScrapesTotalMetric prometheus.Counter
domainInfoScrapeErrorsTotalMetric prometheus.Counter
lastDomainInfoScrapeErrorMetric prometheus.Gauge
lastDomainInfoScrapeTimestampMetric prometheus.Gauge
lastDomainInfoScrapeDurationSecondsMetric prometheus.Gauge
}

func NewDomainsCollector(namespace string, environment string, deployment string) *DomainsCollector {
@@ -24,15 +31,99 @@ func NewDomainsCollector(namespace string, environment string, deployment string
[]string{"domain_id", "domain_name", "internal", "protocol"},
)

domainInfoScrapesTotalMetric := prometheus.NewCounter(
prometheus.CounterOpts{
Namespace: namespace,
Subsystem: "domain_info_scrapes",
Name: "total",
Help: "Total number of scrapes for Cloud Foundry Domains.",
ConstLabels: prometheus.Labels{"environment": environment, "deployment": deployment},
},
)

domainInfoScrapeErrorsTotalMetric := prometheus.NewCounter(
prometheus.CounterOpts{
Namespace: namespace,
Subsystem: "domain_info_scrape_errors",
Name: "total",
Help: "Total number of scrape errors of Cloud Foundry Domains.",
ConstLabels: prometheus.Labels{"environment": environment, "deployment": deployment},
},
)

lastDomainInfoScrapeErrorMetric := prometheus.NewGauge(
prometheus.GaugeOpts{
Namespace: namespace,
Subsystem: "",
Name: "last_domain_info_scrape_error",
Help: "Whether the last scrape of Domains metrics from Cloud Foundry resulted in an error (1 for error, 0 for success).",
ConstLabels: prometheus.Labels{"environment": environment, "deployment": deployment},
},
)

lastDomainInfoScrapeTimestampMetric := prometheus.NewGauge(
prometheus.GaugeOpts{
Namespace: namespace,
Subsystem: "",
Name: "last_domain_info_scrape_timestamp",
Help: "Number of seconds since 1970 since last scrape of Domains metrics from Cloud Foundry.",
ConstLabels: prometheus.Labels{"environment": environment, "deployment": deployment},
},
)

lastDomainInfoScrapeDurationSecondsMetric := prometheus.NewGauge(
prometheus.GaugeOpts{
Namespace: namespace,
Subsystem: "",
Name: "last_domain_info_scrape_duration_seconds",
Help: "Duration of the last scrape of Domains metrics from Cloud Foundry.",
ConstLabels: prometheus.Labels{"environment": environment, "deployment": deployment},
},
)

return &DomainsCollector{
namespace: namespace,
environment: environment,
deployment: deployment,
domainInfoMetric: domainInfoMetric,
namespace: namespace,
environment: environment,
deployment: deployment,
domainInfoMetric: domainInfoMetric,
domainInfoScrapesTotalMetric: domainInfoScrapesTotalMetric,
domainInfoScrapeErrorsTotalMetric: domainInfoScrapeErrorsTotalMetric,
lastDomainInfoScrapeErrorMetric: lastDomainInfoScrapeErrorMetric,
lastDomainInfoScrapeTimestampMetric: lastDomainInfoScrapeTimestampMetric,
lastDomainInfoScrapeDurationSecondsMetric: lastDomainInfoScrapeDurationSecondsMetric,
}
}

func (c *DomainsCollector) Collect(objs *models.CFObjects, ch chan<- prometheus.Metric) {
errorMetric := float64(0)
if objs.Error != nil {
errorMetric = float64(1)
c.domainInfoScrapeErrorsTotalMetric.Inc()
} else {
c.reportDomainsMetrics(objs, ch)
}

c.domainInfoScrapeErrorsTotalMetric.Collect(ch)
c.domainInfoScrapesTotalMetric.Inc()
c.domainInfoScrapesTotalMetric.Collect(ch)
c.lastDomainInfoScrapeErrorMetric.Set(errorMetric)
c.lastDomainInfoScrapeErrorMetric.Collect(ch)
c.lastDomainInfoScrapeTimestampMetric.Set(float64(time.Now().Unix()))
c.lastDomainInfoScrapeTimestampMetric.Collect(ch)
c.lastDomainInfoScrapeDurationSecondsMetric.Set(objs.Took)
c.lastDomainInfoScrapeDurationSecondsMetric.Collect(ch)
}

func (c *DomainsCollector) Describe(ch chan<- *prometheus.Desc) {
c.domainInfoMetric.Describe(ch)
c.domainInfoScrapesTotalMetric.Describe(ch)
c.domainInfoScrapeErrorsTotalMetric.Describe(ch)
c.lastDomainInfoScrapeErrorMetric.Describe(ch)
c.lastDomainInfoScrapeTimestampMetric.Describe(ch)
c.lastDomainInfoScrapeDurationSecondsMetric.Describe(ch)
}

func (c *DomainsCollector) reportDomainsMetrics(objs *models.CFObjects, ch chan<- prometheus.Metric) {
c.domainInfoMetric.Reset()

for _, domain := range objs.Domains {
@@ -53,7 +144,3 @@ func (c *DomainsCollector) Collect(objs *models.CFObjects, ch chan<- prometheus.

c.domainInfoMetric.Collect(ch)
}

func (c *DomainsCollector) Describe(ch chan<- *prometheus.Desc) {
c.domainInfoMetric.Describe(ch)
}