Graph Topology
The Graph Topology Moobot module allows you to create, manage and query multiple named topologies, and their nodes and links.
If your topology .csv file is larger than 40 MB Moogsoft recommends using the Topology Loader utility. See Load a Topology for information on the loader utility.
Load the module
The Graph Topology module is available to load into any standard Moobot. To load it, define a new global variable at the top of the Moobot Javascript file. For example:
var graphtopo = MooBot.loadModule('GraphTopo');
Method reference
The Graph Topology module uses the following methods.
createTopologies
Creates one or more topologies.
Request arguments
The method takes the following arguments.
Name | Type | Required | Description |
---|---|---|---|
| Array of JSON objects | Yes | One or more |
Topology properties
The topology
objects can contain the following properties:
Name | Type | Required | Description |
---|---|---|---|
| String | Yes | Name of the topology. Must be less than 256 characters. |
| Boolean | No | Flag to set the topology to active ( |
| String | No | Description of the topology. Must be less than 1001 characters. |
Response
The method returns the following response.
Type | Description |
---|---|
Array of JSON objects | One or more objects containing the details of any topologies that could not be created. |
Example
Example function using the createTopologies
method to create two topologies named "host" and "location":
function createTopologies() { logger.warning("Creating topologies"); var topo1 = { name: "host", description: "Host-based topology", active: true }; var topo2 = { name: "location", description: "Location-based topology", active: true }; var topologiesNotCreated = graphtopo.createTopologies([topo1, topo2]); logger.warning("Returned object to string from createTopologies: " + JSON.stringify(topologiesNotCreated)); }
updateTopologies
Updates one or more topologies.
You can also use this function to create a topology. If name
does not exist the endpoint creates it.
Request arguments
The method takes the following arguments.
Name | Type | Required | Description |
---|---|---|---|
| Array of JSON objects | Yes | One or more |
Topology properties
The topology
objects can contain the following properties:
Name | Type | Required | Description |
---|---|---|---|
| String | Yes | Name of the topology. Must be less than 256 characters. You cannot update the topology name. To rename a topology use the |
| Boolean | No | Flag to set the topology to active ( |
| String | No | Description of the topology. Must be less than 1001 characters. |
Response
The method returns the following response.
Type | Description |
---|---|
Array of JSON objects | One or more objects containing the details of any topologies that could not be updated. |
The request fails if any of the following are true:
The topology you're trying to update does not exist.
The topology you're trying to update is being used to filter a Recipe and you are trying to make it inactive.
Example
Example function using the updateTopologies
method to update the descriptions of two topologies named "host" and "location":
function updateTopologies() { logger.warning("Updating topologies"); var topo1 = { name: "host", description: "Host-based network topology" }; var topo2 = { name: "location", description: "Location-based network topology" }; var topologiesNotUpdated = graphtopo.updateTopologies([topo1, topo2]); logger.warning("Returned object to string from updateTopologies: " + JSON.stringify(topologiesNotUpdated)); }
deleteTopology
Deletes a single topology. Note the following:
You cannot delete a topology if it's being used to filter a Recipe.
Deleting a topology will impact your ability to restore associated Recipes in future. In order to restore a Recipe that filters on a named topology, the topology must still exist in Moogsoft Onprem.
Request arguments
The method takes the following arguments.
Name | Type | Required | Description |
---|---|---|---|
| String | Yes | Name of the topology. |
Response
The method returns the following response.
Type | Description |
---|---|
Boolean |
|
The request fails if name
is being used to filter a Recipe, or does not exist.
Example
Example function using the deleteTopology
method to delete a topology named "host":
function deleteTopo(host) { var deleteTopoResult = graphtopo.deleteTopology(host); logger.warning("Returned object to string from deleteTopo: " + JSON.stringify(deleteTopoResult)); }
getTopology
Retrieves a single topology.
You can also use this function to determine whether a topology exists. If getTopology
returns null, the specified topology does not exist.
Request arguments
The method takes the following arguments.
Name | Type | Required | Description |
---|---|---|---|
| String | Yes | Name of the topology. |
Response
The method returns the following response.
Type | Description |
---|---|
JSON object | Object containing the topology details. |
Example
Example request using the getTopology
method to retrieve a topology named "host":
var topology = graphtopo.getTopology(host);
The response object contains details of the "host" topology:
{ name: "host", description: "Host-based topology", active: true }
getActiveTopologies
Retrieves all active topologies.
Request arguments
The method takes no request arguments.
Response
The method returns the following response.
Type | Description |
---|---|
Array of JSON objects | One or more objects containing the details of active topologies. |
Example
Example request using the getActiveTopologies
method to retrieve all active topologies:
var active = graphtopo.getActiveTopologies();
The response object contains details of all active topologies:
[ { name: "host", description: "Host-based topology", active: true }, { name: "location", description: "Location-based topology", active: true } ]
getInactiveTopologies
Retrieves all inactive topologies.
Request arguments
The method takes no request arguments.
Response
The method returns the following response.
Type | Description |
---|---|
JSON object | Object containing the details of all inactive topologies. |
Example
Example request using the getInactiveTopologies
method to retrieve all inactive topologies:
var inactive = graphtopo.getInactiveTopologies();
The response object contains details of all inactive topologies:
[ { name: "virtual", description: "Virtual topology", active: false }, { name: "physical", description: "Physical topology", active: false } ]
getTopologiesForSituation
Retrieves all topologies linked to a specified Situation.
Request arguments
The method takes the following arguments.
Name | Type | Required | Description |
---|---|---|---|
| Number | Yes | ID of the Situation for which to retrieve topologies. |
Response
The method returns the following response.
Type | Description |
---|---|
Array of JSON objects | One or more objects containing the details of topologies linked to the Situation, including topology name and a flag indicating whether this topology caused the Situation to be created. |
Example
Example request using the getTopologiesForSituation
method to retrieve all topologies linked to Situation 12:
var situationtopos = graphtopo.getTopologiesForSituation(12);
The response object contains details of all linked topologies and their causal flags:
[ { "name" : "host", "causal" : true }, { "name" : "location", "causal" : false } ]
cloneTopology
Clones an existing topology and sets the clone to inactive.
Request arguments
The method takes the following arguments.
Name | Type | Required | Description |
---|---|---|---|
| String | Yes | Name of the topology to clone. |
| String | Yes | Name for the cloned topology. Must be less than 256 characters. |
Response
The method returns the following response.
Type | Description |
---|---|
JSON object | Object containing details of the cloned topology. |
Example
Example function using the cloneTopology
method to clone the "host" topology and name the clone "host_new":
function cloneTopology(host, host_new) { logger.warning("Calling function cloneTopology for topo: [" + host + "] - new name will be: [" + host_new + "]"); var clonedTopology = graphtopo.cloneTopology(host, host_new); logger.warning("Returned object to string from cloneTopology: " + JSON.stringify(clonedTopology)); }
The response contains details of the "host_new" topology:
{ "name" : "host_new", "description" : "host-based topology", "active": false }
replaceTopology
Replaces an existing topology with another topology. This process deletes the original topology. You can use the clone and replace Graph Topology methods to update a copy of an existing topology and then replace a topology with the updated version.
You can also use this method to rename a topology.
When a topology is replaced:
The original topology and its nodes and links are deleted.
Alerts that reference the original topology are updated to reference the replacement topology.
If the replacement topology is active, its processing state in the database is set to outdated. This triggers the graph analyser process to run as part of the Housekeeper Moolet to calculate Vertex Entropy for the topology nodes. See Topology Overview for more information.
Request arguments
The method takes the following arguments.
Name | Type | Required | Description |
---|---|---|---|
| String | Yes | Replace: The name of the existing topology to replace. Rename: The new topology name. |
| JSON object | Yes | Object containing properties of the replacing topology, or the topology to rename. |
Topology properties
The topology
object contains the following properties:
Name | Type | Required | Description |
---|---|---|---|
| String | Yes | Replace: Name of the replacing topology. Rename: The topology to rename. |
| Boolean | No | Sets the replaced or renamed topology to active ( |
Response
The method returns the following response.
Type | Description |
---|---|
JSON object | Object containing details of the newly replaced or renamed topology. |
The request fails if any of the following are true:
name
is being used to filter a Recipe, or does not exist.topoName
is being used to filter a Recipe and you are trying to make it inactive.
Example
Example function using the replaceTopology
method to replace the "host" topology with the "host_new" topology and set its status to active:
function replaceTopology(host, host_new) { logger.warning("Calling function replaceTopology - topology to replace: [" + host + "], replacing topology: [" + host_new + "]"); var replacingTopology = { name: host_new, active: true }; var replacedTopology = graphtopo.replaceTopology(host, replacing_topology); logger.warning("Returned object to string from replaceTopology: " + JSON.stringify(replacedTopology)); }
In this example, if there is no topology named "host" the "host_new" topology is renamed "host".
createNodes
Creates nodes in a specified topology.
Request arguments
The method takes the following arguments.
Name | Type | Required | Description |
---|---|---|---|
| String | Yes | Name of the topology in which to create the nodes. |
| Array of JSON objects | Yes | One or more |
Node properties
The node
objects can contain the following properties:
Name | Type | Required | Description |
---|---|---|---|
| String | Yes | Name of the node. Must be less than 256 characters. |
| String | No | Description of the node. Must be less than 1001 characters. |
Response
The method returns the following response.
Type | Description |
---|---|
Array of JSON objects | One or more objects containing the details of any nodes that could not be created. |
Example
Example function using the createNodes
method to create two nodes in the "host" topology named "node1" and "node2":
function createNodes() { logger.warning("Creating nodes"); var node1 = { name: "node1", description: "First node" }; var node2 = { name: "node2", description: "Second node" }; var nodesNotCreated = graphtopo.createNodes(host, [node1, node2]); logger.warning("Returned object to string from createNodes: " + JSON.stringify(nodesNotCreated)); }
updateNodes
Updates specified nodes in a specified topology.
Request arguments
The method takes the following arguments.
Name | Type | Required | Description |
---|---|---|---|
| String | Yes | Name of the topology in which to create the nodes. |
| Array of JSON objects | Yes | One or more |
Node properties
The nodes
objects can contain the following properties:
Name | Type | Required | Description |
---|---|---|---|
| String | Yes | Name of the node. You cannot update the node name. To rename a node delete it and recreate it with a new name. |
| String | No | Description of the node. Must be less than 1001 characters. |
Response
The method returns the following response.
Type | Description |
---|---|
Array of JSON objects | One or more objects containing the details of any nodes that could not be updated. |
Example
Example function using the updateNodes
method to update two nodes in the "host" topology named "node1" and "node2":
function updateNodes() { logger.warning("Updating nodes"); var node1 = { name: "node1", description: "Primary node" }; var node2 = { name: "node2", description: "Secondary node" }; var nodesNotUpdated = graphtopo.updateNodes(host, [node1, node2]); logger.warning("Returned object to string from updateNodes: " + JSON.stringify(nodesNotUpdated)); }
deleteNodes
Deletes specified nodes in a specified topology.
Request arguments
The method takes the following arguments.
Name | Type | Required | Description |
---|---|---|---|
| String | Yes | Name of the topology that contains the nodes to delete. |
| Array of Strings | Yes | Names of one or more nodes to delete. |
Response
The method returns the following response.
Type | Description |
---|---|
Array of Strings | Names of one or more nodes that could not be deleted. |
Example
Example function using the deleteNodes
method to delete two nodes in the "host" topology named "node1" and "node2":
function deleteNodes() { logger.warning("Deleting nodes"); var nodesNotDeleted = graphtopo.deleteNodes(host, ["node1", "node2"]); logger.warning("Returned object to string from deleteNodes: " + JSON.stringify(nodesNotDeleted)); }
getNode
Retrieves details of a single node in a specified topology.
You can also use this function to determine whether a node exists. If getNode
returns null, the specified node does not exist.
Request arguments
The method takes the following arguments.
Name | Type | Required | Description |
---|---|---|---|
| String | Yes | Name of the topology containing the node. |
| String | Yes | Name of the node. |
Response
The method returns the following response.
Type | Description |
---|---|
JSON object | Object containing the node details. |
Example
Example using the getNode
method to return details of "node1" in the "host" topology.
var node1 = graphtopo.getNode("host", "node1");
The response object contains the node details:
{ name: "node1", description: "First node" }
getAllNodes
Retrieves details of all nodes in a specified topology.
Request arguments
The method takes the following arguments.
Name | Type | Required | Description |
---|---|---|---|
| String | Yes | Name of the topology containing the nodes. |
Response
The method returns the following response.
Type | Description |
---|---|
JSON object | Object containing details of the nodes. |
Example
Example using the getAllNodes
method to return details of all nodes in the "host" topology:
var allNodes = graphtopo.getAllNodes("host");
The response object contains details of the nodes in the "host" topology:
[ { name: "node1", description: First node }, { name: "node2", description: Second node } ]
isConnected
Checks whether a specified node is part of a topology.
Request arguments
The method takes the following arguments.
Name | Type | Required | Description |
---|---|---|---|
| String | Yes | Name of the topology that contains the node. |
| String | Yes | Name of the node. |
Response
The method returns the following response.
Type | Description |
---|---|
Boolean |
|
Example
Example using the isConnected
method to check whether the "node1" node is in the "host" topology.
var isNodeInTopo = graphtopo.isConnected("host", "node1");
numberOfConnections
Counts the number of links from a specified node in a specified topology.
Request arguments
The method takes the following arguments.
Name | Type | Required | Description |
---|---|---|---|
| String | Yes | Name of the topology that contains the node. |
| String | Yes | Name of the node for which to count the links. |
Response
The method returns the following response.
Type | Description |
---|---|
Number | The number of connections from the node. Returns |
Example
Example using the numberOfConnections
method to return the number of connections from node "node1" in the "host" topology:
var return = topo.numberOfConnections("host", "node1"); logger.warning("numberOfConnections -> " + return);
This example logs the following message:
WARN : ... [CLogModule.java]:99 +|numberOfConnections -> 3|+
distance(topoName, sourceNode, sinkNode)
Calculates the number of hops between two specified nodes in a specified topology.
Request arguments
The method takes the following arguments.
Name | Type | Required | Description |
---|---|---|---|
| String | Yes | Name of the topology that contains the nodes. |
| String | Yes | Name of the source node. Must be less than 256 characters. Note that topology links in Moogsoft Onprem are bidirectional. If the node does not exist, the endpoint will create it. |
| String | Yes | Name of the sink node. Must be less than 256 characters. Note that topology links in Moogsoft Onprem are bidirectional. If the node does not exist, the endpoint will create it. |
Response
The method returns the following response.
Type | Description |
---|---|
Double | The number of hops between the nodes. Returns |
Example
Example function using the distance
method to calculate the number of hops between nodes "node1" and "node2" in the "host" topology:
function distance(host, node1, node2) { logger.warning("Calling function distance for topo: [" + host + "] and nodes: [" + node1 + "], [" + node2 + "]"); var distance = graphtopo.distance(host, nost1, node2); logger.warning("Returned object to string from distance: " + JSON.stringify(distance)); }
distance(topoName, sourceNode, sinkNode, radius)
Calculates the number of hops between two specified nodes in a specified topology, up to a maximum number of hops.
Request arguments
The method takes the following arguments.
Name | Type | Required | Description |
---|---|---|---|
| String | Yes | Name of the topology that contains the nodes. |
| String | Yes | Name of the source node. Note that topology links in Moogsoft Onprem are bidirectional. |
| String | Yes | Name of the sink node. Note that topology links in Moogsoft Onprem are bidirectional. |
| Double | Yes | Maximum number of hops to count. |
Response
The method returns the following response.
Type | Description |
---|---|
Double | The number of hops between the nodes. Returns |
Example
Example function using the distance
method to calculate the distance between nodes "node1" and "node2" in the "host" topology, where the number of hops is 5 or less:
function distance(host, node1, node2, 5.0) { logger.warning("Calling function distance (with max hops) for topo: [" + host + "] and nodes: [" + node1 + "], [" + node2 + "] and radius: [5.0]"); var distanceWithMaxHops = graphtopo.distance(host, node1, node2, 5.0); logger.warning("Returned object to string from distance (with max hops): " + JSON.stringify(distance)); }
createLinks
Creates links between specified nodes in a specified topology.
Request arguments
The method takes the following arguments.
Name | Type | Required | Description |
---|---|---|---|
| String | Yes | Name of the topology in which to create the links. |
| Array of JSON objects | Yes | One or more |
Link properties
The link
objects can contain the following properties:
Name | Type | Required | Description |
---|---|---|---|
| String | Yes | Name of the source node. Note that topology links in Moogsoft Onprem are bidirectional. |
| String | Yes | Name of the sink node. Note that topology links in Moogsoft Onprem are bidirectional. |
| String | No | Description of the link. Must be less than 1001 characters. |
Response
The method returns the following response.
Type | Description |
---|---|
Array of JSON objects | One or more objects containing the details of any links that could not be created. |
Example
Example function using the createLinks
method to create links "node1" > "node2" and "node2" > "node3" in the "host" topology:
function createLinks() { logger.warning("Creating links"); var link1 = { sourceNode: "node1", sinkNode: "node2", description: "link1" }; var link2 = { sourceNode: "node2", sinkNode: "node3", description: "link2" }; var linksNotCreated = graphtopo.createLinks(host, [link1, link2]); logger.warning("Returned object to string from createLinks: " + JSON.stringify(linksNotCreated)); }
getLink
Retrieves details of a link between specified nodes in a specified topology.
You can also use this function to determine whether a link exists. If getLink
returns null, the specified link does not exist.
Request arguments
The method takes the following arguments.
Name | Type | Required | Description |
---|---|---|---|
| String | Yes | Name of the topology containing the link. |
| String | Yes | Name of the source node. Note that topology links in Moogsoft Onprem are bidirectional. |
| String | Yes | Name of the sink node. Note that topology links in Moogsoft Onprem are bidirectional. |
Response
The method returns the following response.
Type | Description |
---|---|
JSON object | Object containing the link details. |
Example
Example using the getLink
method to return details of the link between "node1" and "node2" in the "host" topology.
var linkdetails = graphtopo.getLink("host", "node1", "node2");
The response object contains the link details:
{ description: "link1", sourceNode: "node1", sinkNode: "node2" }
getAllLinksForTopology
Retrieves all links for a specified topology.
Request arguments
The method takes the following arguments.
Name | Type | Required | Description |
---|---|---|---|
| String | Yes | Name of the topology containing the links. |
Response
The method returns the following response.
Type | Description |
---|---|
Array of JSON objects | One or more objects containing details of the links. |
Example
Example using the getAllLinksForTopology
method to retrieve details of all links in the "host" topology:
var linkDetails = graphtopo.getAllLinksForTopology("host");
The response object contains details of the links:
[ { description: "link1", sourceNode: "node1", sinkNode: "node2" }, { description: "link2", sourceNode: "node2", sinkNode: "node3" } ]
getAllLinksForNode
Retrieves all links for specified node in a specified topology.
Request arguments
The method takes the following arguments.
Name | Type | Required | Description |
---|---|---|---|
| String | Yes | Name of the topology containing the links. |
| String | Yes | Name of the node. |
Response
The method returns the following response.
Type | Description |
---|---|
Array of JSON objects | One or more objects containing details of the links. |
Example
Example using the getAllLinksForNode
method to retrieve link details for the "node2" node in the "host" topology:
var linksForNode = graphtopo.getAllLinksForNode("host", "node2");
The response object contains details of the links:
[ { description: "link1", sourceNode: "node2", sinkNode: "node1" }, { description: "link2", sourceNode: "node2", sinkNode: "node3" } ]
deleteAllLinksForNode
Deletes all links for a specified node in a specified topology.
Request arguments
The method takes the following arguments.
Name | Type | Required | Description |
---|---|---|---|
| String | Yes | Name of the topology containing the links. |
| String | Yes | Name of the node. |
Response
The method returns the following response.
Type | Description |
---|---|
Boolean |
|
Example
Example using the deleteAllLinksForNode
method to delete all links for the "node2" node in the "host" topology:
var deleteLinks = graphtopo.deleteAllLinksForNode("host", "node2");
deleteLinks
Deletes one or more links in a specified topology.
Request arguments
The method takes the following arguments.
Name | Type | Required | Description |
---|---|---|---|
| String | Yes | Name of the topology that contains the links to delete. |
| Array of JSON objects | Yes | One or more |
Link properties
The link
objects can contain the following properties:
Name | Type | Required | Description |
---|---|---|---|
| String | Yes | Name of the source node. Note that topology links in Moogsoft Onprem are bidirectional. |
| String | Yes | Name of the sink node. Note that topology links in Moogsoft Onprem are bidirectional. |
Response
The method returns the following response.
Type | Description |
---|---|
Array of JSON objects | One or more objects containing the details of any links that could not be deleted. |
Example
Example function using the deleteLinks
method to delete two links in the "host" topology between "node1" ands "node2", and "node2" and "node3":
function deleteLinks() { logger.warning("Deleting links"); var link1 = { sourceNode: "node1", sinkNode: "node2" }; var link2 = { sourceNode: "node2", sinkNode: "node3" }; var linksNotDeleted = graphtopo.deleteLinks("host", [link1, link2]); logger.warning("Returned object to string from deleteLinks: " + JSON.stringify(linksNotDeleted)); }
Deprecated methods
The following Topology methods are no longer supported.
loadTopology
Use getTopology.
isConnected(node)
Use getNode.
connected(node1, node2)
Use isConnected.
numberOfConnections(node)
Use numberOfConnections.
addEdge(node1, node2)
Use createLinks.
addEdge(node1, node2, weight)
Use createLinks.