def get_contacts(self): q = """ MATCH (c:Node:Contact)-[:Works_for]->(o:Node:Organization) WHERE o.handle_id = {handle_id} RETURN c.handle_id as handle_id, c.name as name """ return core.query_to_list(self.manager, q, handle_id=self.handle_id)
def get_ports(self): q = """ MATCH (node:Node {handle_id: {handle_id}})-[r:Connected_to|Depends_on]-(port:Port) WITH port, r OPTIONAL MATCH p=(port)<-[:Has*1..]-(parent) RETURN port, r as relationship, LAST(nodes(p)) as parent ORDER BY parent.name """ return core.query_to_list(self.manager, q, handle_id=self.handle_id)
def get_connected_equipment(self): q = """ MATCH (n:Node {handle_id: {handle_id}})-[rel:Connected_to]->(port) OPTIONAL MATCH (port)<-[:Has*1..10]-(end) WITH rel, port, last(collect(end)) as end OPTIONAL MATCH (end)-[:Located_in]->(location) OPTIONAL MATCH (location)<-[:Has]-(site) RETURN id(rel) as rel_id, rel, port, end, location, site ORDER BY end.name, port.name """ return core.query_to_list(self.manager, q, handle_id=self.handle_id)
def get_connections(self): q = """ MATCH (porta:Node {handle_id: {handle_id}})<-[r0:Connected_to]-(cable) OPTIONAL MATCH (porta)<-[r0:Connected_to]-(cable)-[r1:Connected_to]->(portb) OPTIONAL MATCH (portb)<-[:Has*1..10]-(end) WITH porta, r0, cable, portb, r1, last(collect(end)) as end OPTIONAL MATCH (end)-[:Located_in]->(location) OPTIONAL MATCH (location)<-[:Has]-(site) RETURN porta, r0, cable, r1, portb, end, location, site """ return core.query_to_list(self.manager, q, handle_id=self.handle_id)
def get_services(self): q = """ MATCH (n:Node {handle_id: {handle_id}}) MATCH (n)-[:Connected_to*1..20]-(equip) WITH equip MATCH (equip)<-[:Depends_on*1..10]-(service) WHERE service:Service WITH distinct service OPTIONAL MATCH (service)<-[:Uses]-(user) RETURN service, collect(user) as users """ return core.query_to_list(self.manager, q, handle_id=self.handle_id)
def get_child_form_data(self, node_type): type_filter = '' if node_type: type_filter = 'and (child):{node_type}'.format(node_type=node_type) q = """ MATCH (parent:Node {{handle_id:{{handle_id}}}}) MATCH (parent)--(child) WHERE (parent)-[:Has]->(child) or (parent)<-[:Located_in|Part_of]-(child) {type_filter} RETURN child.handle_id as handle_id, labels(child) as labels, child.name as name, child.description as description """.format(type_filter=type_filter) return core.query_to_list(self.manager, q, handle_id=self.handle_id)
def get_connection_path(self): q = """ MATCH (n:Cable {handle_id: {handle_id}})-[:Connected_to*1..10]-(port:Port) OPTIONAL MATCH path=(port)-[:Connected_to*]-() WITH nodes(path) AS parts, length(path) AS len ORDER BY len DESC LIMIT 1 UNWIND parts AS part OPTIONAL MATCH (part)<-[:Has*1..10]-(parent) WHERE NOT (parent)<-[:Has]-() RETURN part, parent """ return core.query_to_list(self.manager, q, handle_id=self.handle_id)
def get_child_form_data(self, node_type=None): if node_type: type_filter = ':{node_type}'.format(node_type=node_type) else: type_filter = ':Port' q = """ MATCH (parent:Node {{handle_id:{{handle_id}}}}) MATCH (parent)-[:Has*]->(child{type_filter}) RETURN child.handle_id as handle_id, labels(child) as labels, child.name as name, child.description as description ORDER BY child.name """.format(type_filter=type_filter) return core.query_to_list(self.manager, q, handle_id=self.handle_id)