pve-exporter/collector/version.go
Davíð Steinn Geirsson c8ae97d777 feat: add version collector (pve_version_info)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 11:31:06 +00:00

59 lines
1.2 KiB
Go

package collector
import (
"encoding/json"
"fmt"
"log/slog"
"github.com/prometheus/client_golang/prometheus"
)
func init() {
registerCollector("version", func(logger *slog.Logger) Collector {
return newVersionCollector(logger)
})
}
type versionCollector struct {
logger *slog.Logger
}
func newVersionCollector(logger *slog.Logger) *versionCollector {
return &versionCollector{logger: logger}
}
type versionResponse struct {
Data struct {
Version string `json:"version"`
Release string `json:"release"`
RepoID string `json:"repoid"`
} `json:"data"`
}
func (c *versionCollector) Update(client *Client, ch chan<- prometheus.Metric) error {
body, err := client.Get("/version")
if err != nil {
return fmt.Errorf("failed to get /version: %w", err)
}
var resp versionResponse
if err := json.Unmarshal(body, &resp); err != nil {
return fmt.Errorf("failed to parse /version response: %w", err)
}
ch <- prometheus.MustNewConstMetric(
prometheus.NewDesc(
prometheus.BuildFQName(namespace, "", "version_info"),
"Proxmox VE version information.",
[]string{"release", "repoid", "version"},
nil,
),
prometheus.GaugeValue,
1,
resp.Data.Release,
resp.Data.RepoID,
resp.Data.Version,
)
return nil
}