mirror of
https://github.com/goharbor/harbor
synced 2025-04-26 09:53:37 +00:00
82 lines
1.9 KiB
Go
82 lines
1.9 KiB
Go
package exporter
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strconv"
|
|
|
|
"github.com/goharbor/harbor/src/lib/log"
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
)
|
|
|
|
// SystemInfoCollectorName ...
|
|
const (
|
|
systemInfoCollectorName = "SystemInfoCollector"
|
|
sysInfoURL = "/api/v2.0/systeminfo"
|
|
)
|
|
|
|
var (
|
|
harborSysInfo = typedDesc{
|
|
desc: newDescWithLables("", "system_info", "Information of Harbor system",
|
|
"auth_mode",
|
|
"harbor_version",
|
|
"self_registration"),
|
|
valueType: prometheus.GaugeValue,
|
|
}
|
|
)
|
|
|
|
// NewSystemInfoCollector ...
|
|
func NewSystemInfoCollector(hbrCli *HarborClient) *SystemInfoCollector {
|
|
return &SystemInfoCollector{
|
|
HarborClient: hbrCli,
|
|
}
|
|
}
|
|
|
|
// SystemInfoCollector ...
|
|
type SystemInfoCollector struct {
|
|
*HarborClient
|
|
}
|
|
|
|
// Describe implements prometheus.Collector
|
|
func (hc *SystemInfoCollector) Describe(c chan<- *prometheus.Desc) {
|
|
c <- harborSysInfo.Desc()
|
|
}
|
|
|
|
// Collect implements prometheus.Collector
|
|
func (hc *SystemInfoCollector) Collect(c chan<- prometheus.Metric) {
|
|
for _, m := range hc.getSysInfo() {
|
|
c <- m
|
|
}
|
|
}
|
|
|
|
func (hc *SystemInfoCollector) getSysInfo() []prometheus.Metric {
|
|
if CacheEnabled() {
|
|
value, ok := CacheGet(systemInfoCollectorName)
|
|
if ok {
|
|
return value.([]prometheus.Metric)
|
|
}
|
|
}
|
|
result := []prometheus.Metric{}
|
|
res, err := hbrCli.Get(sysInfoURL)
|
|
if err != nil {
|
|
log.Errorf("request health info failed with err: %v", err)
|
|
return result
|
|
}
|
|
defer res.Body.Close()
|
|
var sysInfoResponse responseSysInfo
|
|
json.NewDecoder(res.Body).Decode(&sysInfoResponse)
|
|
result = append(result, harborSysInfo.MustNewConstMetric(1,
|
|
sysInfoResponse.AuthMode,
|
|
sysInfoResponse.HarborVersion,
|
|
strconv.FormatBool(sysInfoResponse.SelfRegistration)))
|
|
if CacheEnabled() {
|
|
CachePut(systemInfoCollectorName, result)
|
|
}
|
|
return result
|
|
}
|
|
|
|
type responseSysInfo struct {
|
|
AuthMode string `json:"auth_mode"`
|
|
HarborVersion string `json:"harbor_version"`
|
|
SelfRegistration bool `json:"self_registration"`
|
|
}
|