This commit is contained in:
106
internal/exporters/UcsmTemperatures.go
Normal file
106
internal/exporters/UcsmTemperatures.go
Normal file
@@ -0,0 +1,106 @@
|
||||
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 UcsmTemperaturesCollector struct {
|
||||
ucsClient *api.Client
|
||||
ctx context.Context
|
||||
}
|
||||
|
||||
func NewUcsmTemperatureCollector(client *api.Client, ctx context.Context) *UcsmTemperaturesCollector {
|
||||
return &UcsmTemperaturesCollector{
|
||||
ucsClient: client,
|
||||
ctx: ctx,
|
||||
}
|
||||
}
|
||||
|
||||
// Describe prometheus describe
|
||||
func (u *UcsmTemperaturesCollector) 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 *UcsmTemperaturesCollector) 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"`
|
||||
}
|
||||
|
||||
req := api.ConfigResolveClassRequest{
|
||||
Cookie: u.ucsClient.Cookie,
|
||||
ClassId: "computeBlade",
|
||||
InHierarchical: "false",
|
||||
}
|
||||
|
||||
var out blades
|
||||
|
||||
log.Println("Retrieving managed objects with class `computeBlade`")
|
||||
if err := u.ucsClient.ConfigResolveClass(u.ctx, req, &out); err != nil {
|
||||
log.Fatalf("Unable to retrieve `computeBlade` managed object: %s", err)
|
||||
}
|
||||
|
||||
log.Printf("Retrieved %d compute blades\n", len(out.Blades))
|
||||
for _, blade := range out.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)
|
||||
log.Printf("\tThermal: %s\n", blade.ComputeBoard.Thermal)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
logger = logging.getLogger("UcsmTemperatureSensorCollector")
|
||||
|
||||
class UcsmTemperatureSensorCollector(BaseCollector):
|
||||
def get_metrics(self):
|
||||
return {
|
||||
"sensor": GaugeMetricFamily("ucsm_temperature_sensor",
|
||||
"UCSM temperature sensor for motherboard/cpu/psu",
|
||||
labels=['server', 'component',
|
||||
'description'])
|
||||
}
|
||||
|
||||
def collect_metrics(self, server, handle):
|
||||
logger.debug("Collecting Metrics ")
|
||||
g = self.get_metrics()['sensor']
|
||||
|
||||
mb_temp = handle.query_classid(NamingId.COMPUTE_MB_TEMP_STATS)
|
||||
for temp in mb_temp:
|
||||
value_rear = math.nan if temp.fm_temp_sen_rear == 'not-applicable' else temp.fm_temp_sen_rear
|
||||
g.add_metric(labels=[server, temp.dn, "motherboard_rear_temperature"],
|
||||
value=value_rear)
|
||||
value_io = math.nan if temp.fm_temp_sen_io == 'not-applicable' else temp.fm_temp_sen_io
|
||||
g.add_metric(labels=[server, temp.dn, "motherboard_front_temperature"],
|
||||
value=value_io)
|
||||
|
||||
cpu_temp = handle.query_classid(NamingId.PROCESSOR_ENV_STATS)
|
||||
for temp in cpu_temp:
|
||||
g.add_metric(labels=[server, temp.dn, "cpu_temperature"],
|
||||
value=temp.temperature)
|
||||
|
||||
psu_temp = handle.query_classid(NamingId.EQUIPMENT_PSU_STATS)
|
||||
for temp in psu_temp:
|
||||
g.add_metric(labels=[server, temp.dn, "psu_temperature"],
|
||||
value=temp.ambient_temp)
|
||||
yield g
|
||||
*/
|
Reference in New Issue
Block a user