Skip to content

Releases: Vadims06/topolograph

v2.34 (20.07.2023)

19 Jul 23:24
b1d6499
Compare
Choose a tag to compare

New features

Multi LSDBs upload support #37, #39. Available via API.

Multi LSDBs upload via API

If a network has multiple areas, it is needed to get LSDB output from multiple devices and save it into separate files. Example below uses two LSDB outputs saved in the lsdb_samples folder.

import requests
TOPOLOGRAPH_HOST="127.0.0.1"
TOPOLOGRAPH_PORT=5000
TOPOLOGRAPH_WEB_API_USERNAME_EMAIL="your login"
TOPOLOGRAPH_WEB_API_PASSWORD="your password"
from pprint import pprint as pp

lsdbs_attr_ll = []
lsdb_dir = os.path.join(os.getcwd(), 'lsdb_samples')
for vendor_name, protocol_name in [('Cisco', 'ospf'), ('Juniper', 'ospf')]:
  f_name = os.path.join(lsdb_dir, f"{vendor_name}_{protocol_name}.txt")
  with open(f_name) as f:
    lsdbs_attr_ll.append({'lsdb_output': f.read(), 'vendor_device': vendor_name, 'igp_protocol': protocol_name})
r_post = requests.post(f'http://{TOPOLOGRAPH_HOST}:{TOPOLOGRAPH_PORT}/api/graphs', auth=(TOPOLOGRAPH_WEB_API_USERNAME_EMAIL, TOPOLOGRAPH_WEB_API_PASSWORD),  json=lsdbs_attr_ll, timeout=(5, 30))
pp(r_post.json())

v2.33 (11.07.2023)

11 Jul 21:43
74aeac9
Compare
Choose a tag to compare

New features

Basic graph analytic's algorithm were added:

  • Find central node/s in the network
  • Find the most N loaded/critical nodes in the network
  • Find the most N loaded/critical edges in the network
  • Find "single point of failure" nodes. If they fail, the network will lose the connection between nodes (become disjointed)
  • Find fault tolerant nodes. If they fail, the network will keep connected.

New features

Central nodes

The most 3 loaded/critical nodes

The most 3 loaded/critical edges

Single point of failure

Fault tolerant nodes

Enhancements

  • "-" Yaml syntax clashed with "zoom in" keyword hotkey of graph
  • Documentation. Cisco NX-OS commands for getting OSPF LSDB were added.

v2.32 (24.06.2023)

24 Jun 22:49
540d9b3
Compare
Choose a tag to compare

New features

  • Extreme OSPF support is added
  • Ericsson OSPF support is added
  • Yaml based topology. Network design mode.

Yaml based topology

Topolograph visualizes topologies based on OSPF/IS-IS LSDB files, but starting from v2.32 it accepts YAML to build a graph. It can be used for building arbitrary topologies (not exactly IGP domains), but moreover it can keep the topology updated via Rest API. It's the first version of Network Diagram as a Service (NDAS)!
OSPF/IS-IS LSDB <-> YAML is interchangeable now in both ways, so it allows to make a design of IGP domain from the scratch or based on uploaded a LSDB, add new links/edges between nodes or change igp's cost and then check network reaction based on our changes.

Basic YAML based topology.

Build a graph with defined nodes and edges.
https://user-images.githubusercontent.com/20796986/144145217-454c1442-ba6c-4337-a6f2-8dde5d337f1e.png

Node attributes

  • node's name is mandatory. Should be in IP-address format. To change it to any other value - use label
  • Tags of node are optional. Any key (type string): value (str, int, float, dictionary, list) pairs.
    image
    There is a graph with 6 nodes. Select all primary nodes (ha_role: primary) in the first DC (dc1)
import requests
from pprint import pprint as pp
query_params = {'location': 'dc1', 'ha_role': 'primary'}                                  
r_get = requests.get(f'http://{TOPOLOGRAPH_HOST}:{TOPOLOGRAPH_PORT}/api/diagram/{graph_time}/nodes', auth=('   ', '    '), params=query_params, timeout=(5, 30))

Reply

pp(r_get.json())
[{'ha_role': 'primary',
  'id': 1,
  'label': '10.10.10.2',
  'location': 'dc1',
  'name': '10.10.10.2',
  'size': 15}]

Edge attributes

  • src, dst is mandatory.
  • cost is optional. Default is 1. Equal to OSPF/IS-IS cost.
  • directed is optional. Default is false.
  • Tags of edge are optional. Any key (type string): value (str, int, float, dictionary, list) pairs.
    image
    Select all edges over verizon ISP between 10.10.10.2 and 10.10.10.4
query_params = {'src_node': '10.10.10.2', 'dst_node': '10.10.10.4', 'isp': 'verizon'}
r_get = requests.get(f'http://{TOPOLOGRAPH_HOST}:{TOPOLOGRAPH_PORT}/api/diagram/{graph_time}/edges', auth=('   ', '    '), params=query_params, timeout=(5, 30))

Reply

pp(r_get.json())                                                                          
[{'bw': 1000,
  'cost': 1,
  'dst': '10.10.10.4',
  'id': 3,
  'isp': 'verizon',
  'media': 'fiber',

Network reaction on adding new link between devices.

Let's add a new link with cost 1 between R3 (10.10.10.3) and R4 (10.10.10.4) device and see how network will react on it.
image
Obviously, we see traffic increase on direct link R3<->R4 and traffic decrease to R2 (10.10.10.2) and R5 (10.10.10.5).

v2.31 (18.03.2023)

18 Mar 17:22
43f15c7
Compare
Choose a tag to compare

New features

  • ZTE IS-IS support is added

Enhancements

  • IS-IS template fix
  • Minor bugfixes

v2.30 (17.03.2023)

17 Mar 09:42
7c9f2f9
Compare
Choose a tag to compare

Enhancements

OSPF/IS-IS cost on edge labels

  • LabelFrom, LabelTo is available now on topolograph. Meanwhile it is possible to switch this view off.

  • OSPF/IS-IS cost on the shortest path

API reply code

v2.29.1 (08.02.2023)

08 Feb 22:26
e857606
Compare
Choose a tag to compare

Enhancements

  1. Metrics: -> Metric:
  2. network/subnet Number: -> Network/Subnet Number:

v2.29 (04.02.2023)

08 Feb 22:24
e857606
Compare
Choose a tag to compare

Enhancements

VRF (ospf vrf instances) support

  • A single node might have several OSPF instances in different VRFs and in order to remove duplicated nodes on the graph - it possible to create VRF, associate OSPF VRF instances with VRF and master node (the node which will be on the graph)
    VRF names can be imported via CSV file

v2.28 (30.12.2022)

30 Dec 09:31
a5c8262
Compare
Choose a tag to compare

Enhancements

The shortest path API

It allows to get the shortest path between two OSPF RID, or it also accepts IP address or IP Subnet as source/destination and returns the following:

  • path's cost
  • the shortest path
  • unbackuped parts of the shortest path (if these links go down, we will lose a connectivity between the source and destination).

get the shortest path

src_node and dst_node accepts OSPF RID as a value.

r_post = requests.post('https://topolograph.com/api/path', auth=('', ''), json={'graph_time': '27Dec2022_22h46m01s_7_hosts_ospfwatcher', 'src_node': '192.168.100.100', 'dst_node': '10.1.123.23'})    
r_post.json()


A '192.168.100.100' - '10.1.1.4' link is shown as nonbackuped
The visual path

get backup path

removedEdgesAsNodePairsFromSptPath_ll_in_ll accepts a list of edges which will be treated as down links

r_post = requests.post('https://topolograph.com/api/path', auth=('', ''), json={'graph_time': '27Dec2022_22h46m01s_7_hosts_ospfwatcher', 'src_node': '192.168.100.100', 'dst_node': '10.1.123.23', 'removedEdgesAsNodePairsFromSptPath_ll_in_ll': [['10.1.1.4', '10.1.1.2']]})    
r_post.json()


The visual path

get the shortest path for networks

There is a separate method for getting the shortest path, which accepts IP addresses/IP network as an input.
Let's build a path between 192.1.113.99 IP and 192.1.213.0/24 network.

r_post = requests.post('https://topolograph.com/api/path/network', auth=('', ''), json={'graph_time': '27Dec2022_22h46m01s_7_hosts_ospfwatcher', 'src_ip_or_network': '192.1.113.99', 'dst_ip_or_network': '192.1.213.0/24'})    
r_post.json()


The visual path

Full API schema is here

v2.27 (28.12.2022)

28 Dec 09:20
3393dab
Compare
Choose a tag to compare

OSPF Watcher is integrated into Topolograph

OSPF Monitoring page

The solution is available only on docker-based Topolograph. It requires launching topolograph-docker and ospfwatcher on your on-premise host. Right after it OSPF topology changes will be logged into Topolograph's DB and ELK. Topolograph's OSPFWatcher page provides the following options:

  • filter logs by start and end time
  • filter network event by new/old subnets, up/down links, cost changes events

Demo logs

OSPF Monitoring page is prefilled by demo logs.
Event on timeline dashboard is clickable - the historical event is shown on the graph too. For example if we choose the link down event between 10.1.1.2 and 10.1.1.4 on the timeline dashboard, we see an appropriate link on the graph. It means that this link went down at 8:26 AM UTC.
All logs are grouped by the detected device.

New subnet event shows where the subnet appeared

Filter any subnet-related events, select Change metric event

new and old metric is shown

up/down link events

Red timelines show link (~adjacency) down events, green one - up link (~adjacency).
Timeline 10.1.1.2-10.1.1.3 has been selected.

Enhancements

A favicon is added.

v2.26.4 (26.11.2022)

26 Nov 20:41
1801374
Compare
Choose a tag to compare

Enhancements

  • igp_protocol attribute in Graph POST API request is added. May include ospf or isis