Bug 1474 - clarifier la configuration électrique du rack3

From now on, the servers power diagram is available on http://intranet.ipr.univ-rennes1.fr/simpaweb/itteam/PowerDiagram/

- note : I initially thought I would use the jit (JavaScript InfoVis Toolkit) to display sexy interactive diagrams but I finally decided not to (although I managed to run an example) because:
  - svg is more printer-friendly, and could be saved as a file
  - generating jit data would have required more work, which doesn't add much value
  So, in a further commit, I will clean up the jit-related mess
This commit is contained in:
Guillaume Raffy 2016-09-21 13:24:19 +00:00
parent 8770bd488a
commit 95e3f4a3ed
1 changed files with 12 additions and 10 deletions

View File

@ -14,6 +14,7 @@ import re
import sys import sys
import pygraphviz import pygraphviz
def add_capacity_constraints(capacity1, capacity2): def add_capacity_constraints(capacity1, capacity2):
""" """
combines 2 capacity constraints (max amperes) together combines 2 capacity constraints (max amperes) together
@ -63,8 +64,8 @@ def mysql_to_sqlite( mysql_sql_code ):
def insertvals_replacer(match): def insertvals_replacer(match):
insert, values = match.groups() insert, values = match.groups()
#print("insert=%s"%insert) # print("insert=%s"%insert)
#print("values=%s"%values) # print("values=%s"%values)
values = re.sub('^\s*\(' ,'', values) values = re.sub('^\s*\(' ,'', values)
values = re.sub('\)\s*$' ,'', values) values = re.sub('\)\s*$' ,'', values)
replacement = '' replacement = ''
@ -112,7 +113,7 @@ class Machine(object):
power_consumption = self.power_consumption power_consumption = self.power_consumption
for conn in self.get_outgoing_connections(): for conn in self.get_outgoing_connections():
power_consumption += conn.get_power_consumption() power_consumption += conn.get_power_consumption()
print("machine %s : power_consumption += %f" % (self.name, conn.get_power_consumption())) # print("machine %s : power_consumption += %f" % (self.name, conn.get_power_consumption()))
return power_consumption return power_consumption
@ -242,15 +243,16 @@ class PowerConfig(object):
rows = cur.fetchall() rows = cur.fetchall()
if len(rows) > 0: if len(rows) > 0:
plug_type = rows[0][0] plug_type = rows[0][0]
print('plug_type : %s' % plug_type) # print('plug_type : %s' % plug_type)
plug_capacity = get_plug_type_attr(cur, plug_type, 'max_amps') plug_capacity = get_plug_type_attr(cur, plug_type, 'max_amps')
if plug_capacity: #if plug_capacity:
print('plug_capacity : %f A' % plug_capacity) # print('plug_capacity : %f A' % plug_capacity)
return plug_capacity return plug_capacity
sqliteDbPath=':memory:' # sqlite-specific special name for a file stored in memory. We could use something like '/tmp/simpadb.sqlite' here but this would make parsing really slow (1 minute instead of 1s), unless either :
sqliteDbPath='./simpa.db' # - proper fix : group of INSERT statements are surrounded by BEGIN and COMMIT (see http://stackoverflow.com/questions/4719836/python-and-sqlite3-adding-thousands-of-rows)
# - the file is stored on a solid state disk
try: try:
os.remove(sqliteDbPath) os.remove(sqliteDbPath)
except: except:
@ -293,7 +295,7 @@ class PowerConfig(object):
if re.match('simpatix.._..', machine_name): if re.match('simpatix.._..', machine_name):
machine_name = '_'.join(machine_name.split('_')[0:-1]) machine_name = '_'.join(machine_name.split('_')[0:-1])
print(machine_name) # print(machine_name)
machine_spec_id = machine_name_toMachine_spec_id(cur, machine_name) machine_spec_id = machine_name_toMachine_spec_id(cur, machine_name)
if machine_spec_id is not None: if machine_spec_id is not None:
@ -364,7 +366,7 @@ def power_config_to_svg( power_config, svg_file_path ):
#graph.add_edge(u'a',u'b',color='blue') #graph.add_edge(u'a',u'b',color='blue')
#graph.add_edge(u'b',u'a',color='blue') #graph.add_edge(u'b',u'a',color='blue')
for con in power_config.connections: for con in power_config.connections:
print(con.from_plug.machine.name, con.to_plug.machine.name) # print(con.from_plug.machine.name, con.to_plug.machine.name)
if not con.is_redundancy_cable(): # don't display redundancy cables, as they might overlap and hide the main one if not con.is_redundancy_cable(): # don't display redundancy cables, as they might overlap and hide the main one
power_consumption = con.get_power_consumption() power_consumption = con.get_power_consumption()
amperes = power_consumption/220.0 amperes = power_consumption/220.0