Skip to content
Snippets Groups Projects
Commit a62e29b8 authored by Malte Bauch's avatar Malte Bauch
Browse files

added principle network domain to database

Store nodes sets a relation between the nodes that are added and a
principle network domain.
parent b56e16aa
No related branches found
No related tags found
2 merge requests!27Resolve "neo4j",!18Develop
...@@ -5,16 +5,21 @@ import ( ...@@ -5,16 +5,21 @@ import (
"github.com/neo4j/neo4j-go-driver/neo4j" "github.com/neo4j/neo4j-go-driver/neo4j"
) )
//Database //Database is a database
type Database struct { type Database struct {
driver neo4j.Driver driver neo4j.Driver
session neo4j.Session session neo4j.Session
} }
//PND is a principle network domain
type PND struct {
name string
description string
southboundInterfaces []string
}
//NewDatabaseClient creates a database client //NewDatabaseClient creates a database client
func NewDatabaseClient(uri, username, password string, encrypted bool) Database { func NewDatabaseClient(uri, username, password string, encrypted bool) Database {
//TODO: defer close()?
// probably pretty nasty since it creates copies
driver := createDriver(uri, username, password, encrypted) driver := createDriver(uri, username, password, encrypted)
session := createSession(driver) session := createSession(driver)
...@@ -50,10 +55,35 @@ func createSession(driver neo4j.Driver) neo4j.Session { ...@@ -50,10 +55,35 @@ func createSession(driver neo4j.Driver) neo4j.Session {
return session return session
} }
//StoreNodes stores the given nodes to the database //StorePND stores the given principle network domain
func (d Database) StoreNodes(json string) { func (d Database) StorePND(pnd *PND) {
session := d.session query :=
`
MERGE (pnd:PND {name: $name})
ON CREATE SET pnd.description = $description,
pnd.southboundInterfaces = $southboundInterfaces
`
_, err := d.session.Run(
query, map[string]interface{}{
"name": pnd.name,
"description": pnd.description,
"southboundInterfaces": pnd.southboundInterfaces,
})
logError("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) {
}
//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.
func (d Database) StoreNodes(json, pndID string) {
query := query :=
` `
WITH apoc.convert.fromJsonMap($stringToAdd) WITH apoc.convert.fromJsonMap($stringToAdd)
...@@ -64,11 +94,17 @@ func (d Database) StoreNodes(json string) { ...@@ -64,11 +94,17 @@ func (d Database) StoreNodes(json string) {
device.deviceType = d.object_data.name[1].value, device.deviceType = d.object_data.name[1].value,
device.serialNumber = d.object_data.name[2].value, device.serialNumber = d.object_data.name[2].value,
device.softwareVersion = d.object_data.name[3].value, device.softwareVersion = d.object_data.name[3].value,
device.` + "`operational-state` = d.object_data.`operational-state`" device.` + "`operational-state` = d.object_data.`operational-state`" + `
WITH device
MATCH (pnd:PND)
WHERE pnd.name = $pnd
MERGE (device)-[:BELONGS_TO]->(pnd)
`
_, err := session.Run( _, err := d.session.Run(
query, map[string]interface{}{ query, map[string]interface{}{
"stringToAdd": json, "stringToAdd": json,
"pnd": pndID,
}) })
logError("failed storing Nodes into database", err) logError("failed storing Nodes into database", err)
...@@ -76,10 +112,14 @@ func (d Database) StoreNodes(json string) { ...@@ -76,10 +112,14 @@ func (d Database) StoreNodes(json string) {
log.Info("successfully added Nodes into database") log.Info("successfully added Nodes into database")
} }
//RemoveNodes removes the given nodes and their relationships
func (d Database) RemoveNodes(json string) {}
//RemoveSingleNode removes the given node and their relationship by id.
func (d Database) RemoveSingleNode(id string) {}
//StoreNodeEdgePoints stores the given node edge points (interfaces) //StoreNodeEdgePoints stores the given node edge points (interfaces)
func (d Database) StoreNodeEdgePoints(json string) { func (d Database) StoreNodeEdgePoints(json string) {
session := d.session
queryEdgePoints := queryEdgePoints :=
` `
WITH apoc.convert.fromJsonMap($stringToAdd) WITH apoc.convert.fromJsonMap($stringToAdd)
...@@ -91,20 +131,21 @@ func (d Database) StoreNodeEdgePoints(json string) { ...@@ -91,20 +131,21 @@ func (d Database) StoreNodeEdgePoints(json string) {
interface.location = i.object_data.name[1].value, interface.location = i.object_data.name[1].value,
interface.` + "`containing-node` = i.object_data.`containing-node`" interface.` + "`containing-node` = i.object_data.`containing-node`"
_, err := session.Run( _, err := d.session.Run(
queryEdgePoints, map[string]interface{}{ queryEdgePoints, map[string]interface{}{
"stringToAdd": json, "stringToAdd": json,
}) })
logError("failed storing NodeEdgePoints into database", err) logError("failed storing NodeEdgePoints into database", err)
setNodeNodeEdgePointsRelation(session) setNodeNodeEdgePointsRelation(d.session)
log.Info("successfully added NodeEdgePoints into database") log.Info("successfully added NodeEdgePoints into database")
} }
func (d Database) StoreConnections(json string){} //StoreConnections stores relations between nodes
func (d Database) StoreConnections(json string) {}
//setNodeNodeEdgePointsRelation creates the database relations between "nodes" and "node edge points" //setNodeNodeEdgePointsRelation creates the database relations between "nodes" and "node edge points"
func setNodeNodeEdgePointsRelation(session neo4j.Session) { func setNodeNodeEdgePointsRelation(session neo4j.Session) {
...@@ -112,7 +153,7 @@ func setNodeNodeEdgePointsRelation(session neo4j.Session) { ...@@ -112,7 +153,7 @@ func setNodeNodeEdgePointsRelation(session neo4j.Session) {
` `
MATCH (d:Device), (i:Interface) MATCH (d:Device), (i:Interface)
WHERE d.id = i.` + "`containing-node`" + ` WHERE d.id = i.` + "`containing-node`" + `
CREATE (i)-[:BELONGS_TO]->(d) MERGE (i)-[:INTERFACE_OF]->(d)
` `
_, err := session.Run( _, err := session.Run(
...@@ -123,6 +164,17 @@ func setNodeNodeEdgePointsRelation(session neo4j.Session) { ...@@ -123,6 +164,17 @@ func setNodeNodeEdgePointsRelation(session neo4j.Session) {
log.Info("successfully stored NodeNodeEdgePointsRelation into database") log.Info("successfully stored NodeNodeEdgePointsRelation into database")
} }
//Shutdown closes the connection to the database
func (d Database) Shutdown() {
//TODO: add logger
if err := d.session.Close(); err != nil {
}
if err := d.driver.Close(); err != nil {
}
}
//logError logs error with custom and error message //logError logs error with custom and error message
func logError(message string, err error) { func logError(message string, err error) {
if err != nil { if err != nil {
......
...@@ -57,10 +57,10 @@ func (c *MCPClient) GetConnections() error { ...@@ -57,10 +57,10 @@ func (c *MCPClient) GetConnections() error {
return err return err
} }
func (c *MCPClient) GetNodes() error { func (c *MCPClient) GetNodes(pndName string) error {
defer c.buffer.Reset() defer c.buffer.Reset()
_, err := c.client.TapiTopologyCore.GetTapiCoreContextTopologyMcpBaseTopologyNode(nil) _, err := c.client.TapiTopologyCore.GetTapiCoreContextTopologyMcpBaseTopologyNode(nil)
c.database.StoreNodes(c.buffer.String()) c.database.StoreNodes(c.buffer.String(), pndName)
log.Debug(c.buffer.Next(25)) log.Debug(c.buffer.Next(25))
return err return err
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment