From f66927965dd319e05160d1fc040af2bfa8ae2965 Mon Sep 17 00:00:00 2001 From: Malte Bauch <malte.bauch@stud.h-da.de> Date: Wed, 30 Sep 2020 15:09:37 +0200 Subject: [PATCH] database updated for current mock - added StoreLinks() for the new GetLinks() function in our RESTCONF client. - updated the queries for the new json format - removed the function for error handling -> not really go like - added Shutdown() function --- database/database.go | 62 ++++++++++++++++++++++----------- restconf/client/ciena/client.go | 2 +- 2 files changed, 43 insertions(+), 21 deletions(-) diff --git a/database/database.go b/database/database.go index 8186ad873..11e3a543d 100644 --- a/database/database.go +++ b/database/database.go @@ -67,7 +67,7 @@ func (d Database) StorePND(pnd *PND) { ON CREATE SET pnd.description = $description, pnd.southboundInterfaces = $southboundInterfaces ` - + //refactor map[string]interface... in own function _, err := d.session.Run( query, map[string]interface{}{ "name": pnd.name, @@ -75,15 +75,15 @@ func (d Database) StorePND(pnd *PND) { "southboundInterfaces": pnd.southboundInterfaces, }) - logError("failed storing PND into database", err) + if err != nil { + log.Info("failed storing PND into database:", err) + } log.Info("successfully added PND into database") } //RemovePND removes the given principle network domain by id. -func (d Database) RemovePND(id string) { - -} +func (d Database) RemovePND(id string) {} //StoreNodes stores the given nodes to the database and adds them to a //principle networt domain (PND). It is required for a node to belong to a PND. @@ -98,11 +98,11 @@ func (d Database) StoreNodes(json string) { AS value UNWIND value.data as d MERGE (device:Device {id: d.object_id}) - ON CREATE SET device.nativeName = d.object_data.name[0].value, - device.deviceType = d.object_data.name[1].value, - device.serialNumber = d.object_data.name[2].value, - device.softwareVersion = d.object_data.name[3].value, - device.` + "`operational-state` = d.object_data.`operational-state`" + ` + ON CREATE SET device.nativeName = d.object_data.` + "`tapi-object-data`.name[0].value," + ` + device.deviceType = d.object_data.` + "`tapi-object-data`.name[1].value," + ` + device.serialNumber = d.object_data.` + "`tapi-object-data`.name[2].value," + ` + device.softwareVersion = d.object_data.` + "`tapi-object-data`.name[3].value," + ` + device.` + "`operational-state` = d.object_data.`tapi-object-data`.`operational-state`" + ` WITH device MATCH (pnd:PND) WHERE pnd.name = $pnd @@ -128,21 +128,48 @@ func (d Database) RemoveNodes(json string) {} //RemoveSingleNode removes the given node and their relationship by id. func (d Database) RemoveSingleNode(id string) {} +//StoreLinks stores the links between nodes +func (d Database) StoreLinks(json string) { + query := + ` + WITH apoc.convert.fromJsonMap($stringToAdd) + AS value + UNWIND value.data as l + MATCH (d:Device), (d2:Device) + WHERE d.id = l.object_data.` + "`tapi-object-data`.`node-edge-point`[0].`node-uuid`" + ` + AND d2.id = l.object_data.` + "`tapi-object-data`.`node-edge-point`[1].`node-uuid`" + ` + CALL apoc.merge.relationship(d,l.object_data.` + "`tapi-object-data`.`layer-qualifier`,{},{}, d2,{})" + ` + YIELD rel + RETURN rel + ` + + _, err := d.session.Run( + query, map[string]interface{}{ + "stringToAdd": json, + }) + + if err != nil { + log.Info("failed storing Links into database:", err) + } + + log.Info("successfully added Links into database") +} + //StoreNodeEdgePoints stores the given node edge points (interfaces) func (d Database) StoreNodeEdgePoints(json string) { - queryEdgePoints := + query := ` WITH apoc.convert.fromJsonMap($stringToAdd) AS value UNWIND value.data as i MERGE (interface:Interface {id: i.object_id}) ON CREATE SET interface.object_type =i.object_type, - interface.localId = i.object_data.name[0].value, - interface.location = i.object_data.name[1].value, - interface.` + "`containing-node` = i.object_data.`containing-node`" + interface.localId = i.object_data.` + "`tapi-object-data`.name[0].value," + ` + interface.location = i.object_data.` + "`tapi-object-data`.name[1].value," + ` + interface.` + "`containing-node` = i.object_data.`tapi-object-data`.`containing-node`" _, err := d.session.Run( - queryEdgePoints, map[string]interface{}{ + query, map[string]interface{}{ "stringToAdd": json, }) @@ -186,9 +213,4 @@ func (d Database) Shutdown() { if err := d.driver.Close(); err != nil { } - -} - -//logError logs error with custom and error message -func logError(message string, err error) { } diff --git a/restconf/client/ciena/client.go b/restconf/client/ciena/client.go index a4d09fd94..bb47bbd38 100644 --- a/restconf/client/ciena/client.go +++ b/restconf/client/ciena/client.go @@ -60,7 +60,7 @@ func (c *MCPClient) GetConnections() error { func (c *MCPClient) GetLinks() error { defer c.buffer.Reset() _, err := c.client.TapiTopologyCore.GetTapiCoreContextTopologyMcpBaseTopologyLink(nil) - c.database.StoreConnections(c.buffer.String()) + c.database.StoreLinks(c.buffer.String()) log.Debug(c.buffer.Next(25)) return err } -- GitLab