Skip to content

Commit 9bbdbc4

Browse files
committed
UPS refactoring in progress
1 parent 7a45964 commit 9bbdbc4

2 files changed

Lines changed: 34 additions & 53 deletions

File tree

enginecore/enginecore/model/graph_reference.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from enginecore.state.utils import format_as_redis_key
66

77
class GraphReference():
8-
8+
"""Graph DB wrapper """
99
def __init__(self):
1010
self._driver = GraphDatabase.driver(
1111
'bolt://localhost',
@@ -117,7 +117,8 @@ def get_asset_oid_by_name(cls, session, asset_key, oid_name):
117117
asset_key(int): key of the asset OID belongs to
118118
oid_name(str): OID name
119119
Returns:
120-
tuple: str as SNMP OID that belongs to the asset, followed by an int as datatype, followed by optional state details;
120+
tuple: str as SNMP OID that belongs to the asset,
121+
followed by an int as datatype, followed by optional state details;
121122
returns None if there's no such OID
122123
"""
123124

@@ -135,10 +136,12 @@ def get_asset_oid_by_name(cls, session, asset_key, oid_name):
135136
details = record.get('oid') if record else None
136137

137138
oid_info = details['OID'] if details else None
138-
vendor_specs = {v:k for k, v in dict(record['oid_details']).items()} if (record and record['oid_details']) else None
139+
140+
# get vendor specific information
141+
v_specs = {v:k for k, v in dict(record['oid_details']).items()} if (record and record['oid_details']) else None
139142
oid_data_type = details['dataType'] if oid_info else None
140143

141-
return oid_info, oid_data_type, vendor_specs
144+
return oid_info, oid_data_type, v_specs
142145

143146
@classmethod
144147
def get_component_oid_by_name(cls, session, component_key, oid_name):
@@ -154,10 +157,10 @@ def get_component_oid_by_name(cls, session, component_key, oid_name):
154157

155158
result = session.run(
156159
"""
157-
MATCH (component:Component { key: $key})<-[:HAS_COMPONENT]-(p:Asset)-[:HAS_OID]->(oid:OID {OIDName: $oid_name})
160+
MATCH (component:Component { key: $key})<-[:HAS_COMPONENT]-(p:Asset)-[:HAS_OID]->(oid:OID {OIDName: $name})
158161
RETURN oid, p.key as parent_key
159162
""",
160-
oid_name=oid_name, key=component_key
163+
name=oid_name, key=component_key
161164
)
162165
record = result.single()
163166

@@ -233,8 +236,8 @@ def get_assets_and_connections(cls, session, flatten=True):
233236
)
234237

235238
asset['parent'] = []
236-
for r in presults:
237-
asset['parent'].append(dict(r['parent']))
239+
for presult in presults:
240+
asset['parent'].append(dict(presult['parent']))
238241

239242
## Set asset children
240243
# format asset children as list of child_key: { child_info }

enginecore/enginecore/model/system_modeler.py

Lines changed: 23 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ def _get_set_stm(attr, node_name="asset", supported_attr=[]):
3131
return ','.join(map(lambda k: "{}.{}={}".format(node_name, _to_camelcase(k), repr(existing[k])), existing))
3232

3333

34+
def _get_oid_desc_stm(oid_desc, oid_name):
35+
"""Format dict attributes as neo4j props"""
36+
return 'OIDName: "{}",'.format(oid_name) + ','.join(map(lambda k: '{}: "{}"'.format(oid_desc[k], k), oid_desc))
37+
38+
3439
def _add_psu(key, psu_index, attr):
3540
"""Add a PSU to an existing server
3641
@@ -277,45 +282,27 @@ def create_ups(key, attr, preset_file=os.path.join(os.path.dirname(__file__), 'p
277282
preset_file = attr['snmp_preset'] if 'snmp_preset' in attr and attr['snmp_preset'] else preset_file
278283

279284
with open(preset_file) as f, graph_ref.get_session() as session:
285+
286+
query = []
280287
data = json.load(f)
281288

282-
name = attr['name'] if 'name' in attr and attr['name'] else data['assetName']
283-
284-
session.run("\
285-
CREATE (:Asset:UPS:SNMPSim { \
286-
name: $name,\
287-
key: $key,\
288-
staticOidFile: $oid_file,\
289-
outputPowerCapacity: $pc,\
290-
minPowerOnBatteryLevel: $minbat,\
291-
fullRechargeTime: $rechargehrs, \
292-
type: 'ups',\
293-
runtime: $runtime,\
294-
port: $port \
295-
})",
296-
key=key,
297-
name=name,
298-
oid_file=data['staticOidFile'],
299-
pc=data['outputPowerCapacity'],
300-
minbat=data['minPowerOnBatteryLevel'],
301-
rechargehrs=data['fullRechargeTime'],
302-
runtime=json.dumps(data['modelRuntime'], sort_keys=True),
303-
port=attr['port']
304-
)
305-
306-
set_properties(key, attr)
289+
attr['name'] = attr['name'] if 'name' in attr and attr['name'] else data['assetName']
290+
attr['runtime'] = json.dumps(data['modelRuntime'], sort_keys=True)
291+
292+
s_attr = ["name", "type", "key", "off_delay", "on_delay", "staticOidFile", "port", "host",
293+
"outputPowerCapacity", "minPowerOnBatteryLevel", "fullRechargeTime", "runtime"]
294+
295+
props_stm = _get_props_stm({**attr, **data, **{'key': key, 'type': 'ups'}}, supported_attr=s_attr)
296+
297+
# create UPS asset
298+
query.append("CREATE (ups:Asset:UPS:SNMPSim {{ {} }})".format(props_stm))
307299

308-
# add batteries
309-
session.run("\
310-
MATCH (ups:UPS {key: $key})\
311-
CREATE (bat:UPSBattery:Battery { \
312-
name: $name,\
313-
type: 'battery'\
314-
})\
315-
CREATE (ups)-[:HAS_BATTERY]->(bat)\
316-
CREATE (ups)-[:POWERED_BY]->(bat)\
317-
",key=key, name='bat1'
318-
)
300+
# add batteries (only one for now)
301+
query.append("CREATE (bat:UPSBattery:Battery { name: 'bat1', type: 'battery' })")
302+
query.append("CREATE (ups)-[:HAS_BATTERY]->(bat)")
303+
query.append("CREATE (ups)-[:POWERED_BY]->(bat)")
304+
305+
session.run("\n".join(query))
319306

320307
for k, v in data["OIDs"].items():
321308
if k == 'SerialNumber':
@@ -490,15 +477,6 @@ def create_ups(key, attr, preset_file=os.path.join(os.path.dirname(__file__), 'p
490477
outkey=int("{}{}".format(key,str(i+1))))
491478

492479

493-
def _get_oid_desc_stm(oid_desc, oid_name):
494-
"""Format dict attributes as neo4j props"""
495-
496-
# existing = dict(
497-
# filter(lambda k: attr[k[0]] != None and (not supported_attr or k[0] in supported_attr), oid_desc.items())
498-
# )
499-
return 'OIDName: "{}",'.format(oid_name) + ','.join(map(lambda k: '{}: "{}"'.format(oid_desc[k], k), oid_desc))
500-
501-
502480
def create_pdu(key, attr, preset_file=os.path.join(os.path.dirname(__file__), 'presets/apc_pdu.json')):
503481
"""Add PDU to the model """
504482

0 commit comments

Comments
 (0)