All checks were successful
continuous-integration/drone/push Build is passing
78 lines
2.2 KiB
Go
78 lines
2.2 KiB
Go
package exporters
|
|
|
|
import (
|
|
"context"
|
|
"encoding/xml"
|
|
"log"
|
|
|
|
"github.com/dnaeon/go-ucs/api"
|
|
"github.com/dnaeon/go-ucs/mo"
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
)
|
|
|
|
type UcsmBladeCollector struct {
|
|
ucsClient *api.Client
|
|
ctx context.Context
|
|
}
|
|
|
|
/*
|
|
type ComputeMbTempStats struct {
|
|
XMLName xml.Name `xml:"computeMbTempStats"`
|
|
Dn string `xml:"dn,attr,omitempty"`
|
|
FmTempSenIo string `xml:"fmTempSenIo,attr,omitempty"`
|
|
FmTempSenRear string `xml:"fmTempSenRear,attr,omitempty"`
|
|
}
|
|
*/
|
|
func NewUcsmBladeCollector(client *api.Client, ctx context.Context) *UcsmTemperaturesCollector {
|
|
return &UcsmTemperaturesCollector{
|
|
ucsClient: client,
|
|
ctx: ctx,
|
|
}
|
|
}
|
|
|
|
// Describe prometheus describe
|
|
func (u *UcsmBladeCollector) Describe(ch chan<- *prometheus.Desc) {
|
|
log.Printf("Running Describe for UcsmTemperaturesCollector\n")
|
|
ch <- prometheus.NewDesc("ucsm_temperature_sensor",
|
|
"UCSM temperature sensor for motherboard/cpu/psu",
|
|
[]string{"server", "component", "description"}, nil,
|
|
)
|
|
ch <- prometheus.NewDesc("ucsm_temperature_sensor",
|
|
"UCSM temperature sensor for motherboard/cpu/psu",
|
|
[]string{"server", "component", "description"}, nil,
|
|
)
|
|
}
|
|
|
|
// Collect prometheus collect
|
|
func (u *UcsmBladeCollector) Collect(ch chan<- prometheus.Metric) {
|
|
// The type into which we unmarshal the result data
|
|
type blades struct {
|
|
XMLName xml.Name
|
|
Blades []mo.ComputeBlade `xml:"computeBlade"`
|
|
}
|
|
|
|
bladeRequest := api.ConfigResolveClassRequest{
|
|
Cookie: u.ucsClient.Cookie,
|
|
ClassId: "computeBlade",
|
|
InHierarchical: "false",
|
|
}
|
|
|
|
var bladeList blades
|
|
|
|
log.Println("Retrieving managed objects with class `computeBlade`")
|
|
|
|
if err := u.ucsClient.ConfigResolveClass(u.ctx, bladeRequest, &bladeList); err != nil {
|
|
log.Fatalf("Unable to retrieve `computeBlade` managed object: %s", err)
|
|
}
|
|
|
|
log.Printf("Retrieved %d compute blades\n", len(bladeList.Blades))
|
|
for _, blade := range bladeList.Blades {
|
|
log.Printf("%s:\n", blade.Dn)
|
|
log.Printf("\tNumber of CPUs: %d\n", blade.NumOfCpus)
|
|
log.Printf("\tTotal Memory: %d\n", blade.TotalMemory)
|
|
log.Printf("\tModel: %s\n", blade.Model)
|
|
log.Printf("\tVendor: %s\n", blade.Vendor)
|
|
}
|
|
|
|
}
|