report power consumption with dell
This commit is contained in:
parent
dc59bd78a2
commit
6e012c49ab
3 changed files with 69 additions and 3 deletions
|
|
@ -8,11 +8,11 @@ PSU_DMI_TYPE = 39
|
|||
class PowerSupply():
|
||||
def __init__(self, server=None):
|
||||
self.server = server
|
||||
netbox_server = self.server.get_netbox_server()
|
||||
self.netbox_server = self.server.get_netbox_server()
|
||||
if self.server.is_blade():
|
||||
self.device_id = netbox_server.parent_device.id if netbox_server else None
|
||||
self.device_id = self.netbox_server.parent_device.id if self.netbox_server else None
|
||||
else:
|
||||
self.device_id = netbox_server.id if netbox_server else None
|
||||
self.device_id = self.netbox_server.id if self.netbox_server else None
|
||||
|
||||
def get_power_supply(self):
|
||||
power_supply = []
|
||||
|
|
@ -81,3 +81,31 @@ class PowerSupply():
|
|||
)
|
||||
|
||||
return True
|
||||
|
||||
def report_power_consumption(self):
|
||||
psu_cons = self.server.get_power_consumption()
|
||||
nb_psus = self.get_netbox_power_supply()
|
||||
|
||||
if not len(nb_psus) or not len(psu_cons):
|
||||
return False
|
||||
|
||||
# find power feeds for rack or dc
|
||||
voltage = None
|
||||
pwr_feeds = None
|
||||
if self.netbox_server.rack:
|
||||
pwr_feeds = nb.dcim.power_feeds.filter(
|
||||
rack=self.netbox_server.rack.id
|
||||
)
|
||||
if pwr_feeds is None or not len(pwr_feeds):
|
||||
logging.info('Could not find power feeds for Rack, defaulting value to 230')
|
||||
voltage = 230
|
||||
|
||||
for i, nb_psu in enumerate(nb_psus):
|
||||
nb_psu.allocated_draw = float(psu_cons[i]) * voltage
|
||||
nb_psu.save()
|
||||
logging.info('Updated power consumption for PSU {}: {}W'.format(
|
||||
nb_psu.name,
|
||||
nb_psu.allocated_draw,
|
||||
))
|
||||
|
||||
return True
|
||||
|
|
|
|||
|
|
@ -108,6 +108,9 @@ class ServerBase():
|
|||
def get_bios_release_date(self):
|
||||
raise NotImplementedError
|
||||
|
||||
def get_power_consumption(self):
|
||||
raise NotImplementedError
|
||||
|
||||
def _netbox_create_blade_chassis(self, datacenter, rack):
|
||||
device_type = nb.dcim.device_types.get(
|
||||
model=self.get_chassis(),
|
||||
|
|
@ -322,6 +325,7 @@ class ServerBase():
|
|||
if config.update_all or config.update_psu:
|
||||
self.power = PowerSupply(server=self)
|
||||
self.power.create_or_update_power_supply()
|
||||
self.power.report_power_consumption()
|
||||
if update:
|
||||
server.save()
|
||||
logging.debug('Finished updating Server!')
|
||||
|
|
|
|||
34
netbox_agent/vendors/dell.py
vendored
34
netbox_agent/vendors/dell.py
vendored
|
|
@ -1,4 +1,8 @@
|
|||
import logging
|
||||
import subprocess
|
||||
|
||||
from netbox_agent.server import ServerBase
|
||||
from netbox_agent.misc import is_tool
|
||||
|
||||
|
||||
class DellHost(ServerBase):
|
||||
|
|
@ -33,3 +37,33 @@ class DellHost(ServerBase):
|
|||
if self.is_blade():
|
||||
return self.dmi.get_by_type('Chassis')[0]['Serial Number']
|
||||
return self.get_service_tag()
|
||||
|
||||
def get_power_consumption(self):
|
||||
'''
|
||||
Parse omreport output like this
|
||||
|
||||
Amperage
|
||||
PS1 Current 1 : 1.8 A
|
||||
PS2 Current 2 : 1.4 A
|
||||
'''
|
||||
value = []
|
||||
|
||||
if not is_tool('omreport'):
|
||||
logging.error('omreport does not seem to be installed, please debug')
|
||||
return value
|
||||
|
||||
data = subprocess.getoutput('omreport chassis pwrmonitoring')
|
||||
amperage = False
|
||||
for line in data.splitlines():
|
||||
if line.startswith('Amperage'):
|
||||
amperage = True
|
||||
continue
|
||||
|
||||
if amperage:
|
||||
if line.startswith('PS'):
|
||||
amp_value = line.split(':')[1].split()[0]
|
||||
value.append(amp_value)
|
||||
else:
|
||||
break
|
||||
|
||||
return value
|
||||
|
|
|
|||
Loading…
Add table
editor.link_modal.header
Reference in a new issue