Skip to content
Snippets Groups Projects
Commit b053fc90 authored by Fabio Farina's avatar Fabio Farina
Browse files

Update init script with Telegraf configuration split

parent da9c4d52
Branches
Tags v0.9.1
No related merge requests found
......@@ -270,7 +270,7 @@ commands and parse data in JSON format, that Telegraf can parse and forward to I
[you@host <repo location>]$cp telegraf_configs/twping_json.py /opt/twping_json.py
```
Copy Telegraf configuation template, edit and adapt to you deployment as needed.
Copy Telegraf configuration template, edit and adapt to you deployment as needed.
```
[you@host <repo location>]$sudo mv /etc/telegraf/telegraf.conf /etc/telegraf/telegraf.conf.orig
......@@ -278,6 +278,10 @@ Copy Telegraf configuation template, edit and adapt to you deployment as needed.
[you@host <repo location>]$sudo nano /etc/telegraf/telegraf.conf
```
Copy Telegraf testlist generated by the init script in the telegraf config fragments locations
[you@host <repo location>]$sudo cp testlist.conf /etc/telegraf/telegraf.d/geant_tests.conf
Once done test the data acquisition process works without errors
```
......
......@@ -21,74 +21,3 @@
data_format = "json"
#
# TWAMP script runner - TWAMP server-client running on network devices
#
[[inputs.exec]]
commands = [
"/opt/rpm_twamp_snmp.py 62.40.96.47 62.40.97.7 TWAMP 3VfrNKak rt1.pra.cz--mx1.vie.at mx1.vie.at",
"/opt/rpm_twamp_snmp.py 62.40.96.47 62.40.97.12 TWAMP 3VfrNKak rt1.pra.cz--mx1.fra.de mx1.fra.de",
"/opt/rpm_twamp_snmp.py 62.40.97.7 62.40.97.10 TWAMP 3VfrNKak mx1.vie.at--mx1.poz.pl mx1.poz.pl",
"/opt/rpm_twamp_snmp.py 62.40.97.7 62.40.97.1 TWAMP 3VfrNKak mx1.vie.at--mx1.bud.hu mx1.bud.hu",
"/opt/rpm_twamp_snmp.py 62.40.97.7 62.40.97.15 TWAMP 3VfrNKak mx1.vie.at--mx1.mil2.it mx1.mil2.it",
"/opt/rpm_twamp_snmp.py 62.40.97.7 62.40.96.39 TWAMP 3VfrNKak mx1.vie.at--mx1.ath2.gr mx1.ath2.gr",
"/opt/rpm_twamp_snmp.py 62.40.97.7 62.40.96.21 TWAMP 3VfrNKak mx1.vie.at--mx1.sof.bg mx1.sof.bg",
"/opt/rpm_twamp_snmp.py 62.40.97.12 62.40.96.19 TWAMP 3VfrNKak mx1.fra.de--mx1.buc.ro mx1.buc.ro",
"/opt/rpm_twamp_snmp.py 62.40.97.12 62.40.97.11 TWAMP 3VfrNKak mx1.fra.de--mx1.ams.nl mx1.ams.nl",
"/opt/rpm_twamp_snmp.py 62.40.97.10 62.40.97.12 TWAMP 3VfrNKak mx1.poz.pl--mx1.fra.de mx1.fra.de",
"/opt/rpm_twamp_snmp.py 62.40.97.15 62.40.97.14 TWAMP 3VfrNKak mx1.mil2.it--mx1.gen.ch mx1.gen.ch",
"/opt/rpm_twamp_snmp.py 62.40.96.21 62.40.96.19 TWAMP 3VfrNKak mx1.sof.bg--mx1.buc.ro mx1.buc.ro",
"/opt/rpm_twamp_snmp.py 62.40.96.19 62.40.97.1 TWAMP 3VfrNKak mx1.buc.ro--mx1.bud.hu mx1.bud.hu",
"/opt/rpm_twamp_snmp.py 62.40.96.5 62.40.96.6 TWAMP 3VfrNKak rt1.mar.fr--rt1.mil2.it rt1.mil2.it",
"/opt/rpm_twamp_snmp.py 62.40.96.5 62.40.97.16 TWAMP 3VfrNKak rt1.mar.fr--mx1.mad.es mx1.mad.es",
"/opt/rpm_twamp_snmp.py 62.40.96.5 62.40.97.14 TWAMP 3VfrNKak rt1.mar.fr--mx1.gen.ch mx1.gen.ch",
"/opt/rpm_twamp_snmp.py 62.40.96.6 62.40.97.7 TWAMP 3VfrNKak rt1.mil2.it--mx1.vie.at mx1.vie.at",
"/opt/rpm_twamp_snmp.py 62.40.96.6 62.40.97.14 TWAMP 3VfrNKak rt1.mil2.it--mx1.gen.ch mx1.gen.ch",
"/opt/rpm_twamp_snmp.py 62.40.97.14 62.40.97.12 TWAMP 3VfrNKak mx1.gen.ch--mx1.fra.de mx1.fra.de",
"/opt/rpm_twamp_snmp.py 62.40.96.54 62.40.97.4 TWAMP 3VfrNKak rt1.bra.sk--mx2.bra.sk mx2.bra.sk",
"/opt/rpm_twamp_snmp.py 62.40.97.4 62.40.97.7 TWAMP 3VfrNKak mx2.bra.sk--mx1.vie.at mx1.vie.at",
"/opt/rpm_twamp_snmp.py 62.40.97.4 62.40.97.1 TWAMP 3VfrNKak mx2.bra.sk--mx1.bud.hu mx1.bud.hu",
"/opt/rpm_twamp_snmp.py 62.40.96.4 62.40.96.2 TWAMP 3VfrNKak rt2.chi.md--rt1.chi.md rt1.chi.md",
"/opt/rpm_twamp_snmp.py 62.40.96.4 62.40.96.68 TWAMP 3VfrNKak rt2.chi.md--rt2.kie.ua rt2.kie.ua",
"/opt/rpm_twamp_snmp.py 62.40.96.2 62.40.96.19 TWAMP 3VfrNKak rt1.chi.md--mx1.buc.ro mx1.buc.ro",
"/opt/rpm_twamp_snmp.py 62.40.96.68 62.40.96.1 TWAMP 3VfrNKak rt2.kie.ua--rt1.kie.ua rt1.kie.ua",
"/opt/rpm_twamp_snmp.py 62.40.96.1 62.40.97.10 TWAMP 3VfrNKak rt1.kie.ua--mx1.poz.pl mx1.poz.pl",
"/opt/rpm_twamp_snmp.py 62.40.96.60 62.40.96.51 TWAMP 3VfrNKak rt2.tal.ee--rt1.tal.ee rt1.tal.ee",
"/opt/rpm_twamp_snmp.py 62.40.96.60 62.40.96.26 TWAMP 3VfrNKak rt2.tal.ee--mx1.ham.de mx1.ham.de",
"/opt/rpm_twamp_snmp.py 62.40.96.51 62.40.96.59 TWAMP 3VfrNKak rt1.tal.ee--rt2.rig.lv rt2.rig.lv",
"/opt/rpm_twamp_snmp.py 62.40.96.26 62.40.97.12 TWAMP 3VfrNKak mx1.ham.de--mx1.fra.de mx1.fra.de",
"/opt/rpm_twamp_snmp.py 62.40.96.26 62.40.97.11 TWAMP 3VfrNKak mx1.ham.de--mx1.ams.nl mx1.ams.nl",
"/opt/rpm_twamp_snmp.py 62.40.96.59 62.40.96.58 TWAMP 3VfrNKak rt2.rig.lv--rt1.rig.lv rt1.rig.lv",
"/opt/rpm_twamp_snmp.py 62.40.96.58 62.40.96.52 TWAMP 3VfrNKak rt1.rig.lv--rt1.kau.lt rt1.kau.lt",
"/opt/rpm_twamp_snmp.py 62.40.96.36 62.40.96.42 TWAMP 3VfrNKak rt1.por.pt--rt1.bil.es rt1.bil.es",
"/opt/rpm_twamp_snmp.py 62.40.96.36 62.40.96.17 TWAMP 3VfrNKak rt1.por.pt--mx2.lis.pt mx2.lis.pt",
"/opt/rpm_twamp_snmp.py 62.40.96.42 62.40.97.16 TWAMP 3VfrNKak rt1.bil.es--mx1.mad.es mx1.mad.es",
"/opt/rpm_twamp_snmp.py 62.40.96.42 62.40.97.13 TWAMP 3VfrNKak rt1.bil.es--mx1.par.fr mx1.par.fr",
"/opt/rpm_twamp_snmp.py 62.40.96.17 62.40.97.16 TWAMP 3VfrNKak mx2.lis.pt--mx1.mad.es mx1.mad.es",
"/opt/rpm_twamp_snmp.py 62.40.97.13 62.40.97.14 TWAMP 3VfrNKak mx1.par.fr--mx1.gen.ch mx1.gen.ch",
"/opt/rpm_twamp_snmp.py 62.40.97.13 62.40.96.15 TWAMP 3VfrNKak mx1.par.fr--mx1.lon2.uk mx1.lon2.uk",
"/opt/rpm_twamp_snmp.py 62.40.96.53 62.40.97.10 TWAMP 3VfrNKak rt2.kau.lt--mx1.poz.pl mx1.poz.pl",
"/opt/rpm_twamp_snmp.py 62.40.96.53 62.40.96.52 TWAMP 3VfrNKak rt2.kau.lt--rt1.kau.lt rt1.kau.lt",
"/opt/rpm_twamp_snmp.py 62.40.96.62 62.40.97.11 TWAMP 3VfrNKak rt2.ams.nl--mx1.ams.nl mx1.ams.nl",
"/opt/rpm_twamp_snmp.py 62.40.96.62 62.40.97.5 TWAMP 3VfrNKak rt2.ams.nl--mx1.lon.uk mx1.lon.uk",
"/opt/rpm_twamp_snmp.py 62.40.97.5 62.40.97.11 TWAMP 3VfrNKak mx1.lon.uk--mx1.ams.nl mx1.ams.nl",
"/opt/rpm_twamp_snmp.py 62.40.97.5 62.40.97.14 TWAMP 3VfrNKak mx1.lon.uk--mx1.gen.ch mx1.gen.ch",
"/opt/rpm_twamp_snmp.py 62.40.97.5 62.40.96.15 TWAMP 3VfrNKak mx1.lon.uk--mx1.lon2.uk mx1.lon2.uk",
"/opt/rpm_twamp_snmp.py 62.40.97.5 62.40.96.25 TWAMP 3VfrNKak mx1.lon.uk--mx1.dub2.ie mx1.dub2.ie",
"/opt/rpm_twamp_snmp.py 62.40.96.15 62.40.96.3 TWAMP 3VfrNKak mx1.lon2.uk--mx1.dub.ie mx1.dub.ie",
"/opt/rpm_twamp_snmp.py 62.40.96.25 62.40.96.3 TWAMP 3VfrNKak mx1.dub2.ie--mx1.dub.ie mx1.dub.ie",
"/opt/rpm_twamp_snmp.py 62.40.96.8 62.40.97.7 TWAMP 3VfrNKak mx2.zag.hr--mx1.vie.at mx1.vie.at",
"/opt/rpm_twamp_snmp.py 62.40.96.8 62.40.97.1 TWAMP 3VfrNKak mx2.zag.hr--mx1.bud.hu mx1.bud.hu",
"/opt/rpm_twamp_snmp.py 62.40.96.10 62.40.97.1 TWAMP 3VfrNKak mx2.lju.si--mx1.bud.hu mx1.bud.hu",
"/opt/rpm_twamp_snmp.py 62.40.96.10 62.40.97.15 TWAMP 3VfrNKak mx2.lju.si--mx1.mil2.it mx1.mil2.it",
"/opt/rpm_twamp_snmp.py 62.40.96.20 62.40.97.11 TWAMP 3VfrNKak mx2.bru.be--mx1.ams.nl mx1.ams.nl",
"/opt/rpm_twamp_snmp.py 62.40.96.20 62.40.97.5 TWAMP 3VfrNKak mx2.bru.be--mx1.lon.uk mx1.lon.uk",
"/opt/rpm_twamp_snmp.py 62.40.96.11 62.40.97.15 TWAMP 3VfrNKak mx2.ath.gr--mx1.mil2.it mx1.mil2.it",
"/opt/rpm_twamp_snmp.py 62.40.96.11 62.40.96.39 TWAMP 3VfrNKak mx2.ath.gr--mx1.ath2.gr mx1.ath2.gr",
]
name_suffix = "_twamp"
timeout = "2m"
data_format = "json"
tag_keys = ["src", "dst", "src_ip", "dst_ip"]
# fielddrop = ["sample_is_valid"]
\ No newline at end of file
......@@ -4,51 +4,57 @@ import json
import socket
import xml.etree.ElementTree as ET
def get_nodes(tree):
cy_nodes_list = []
addr_map = {}
svg_nodes = tree.findall(".//*[@class='node']/{http://www.w3.org/2000/svg}text")
for svg_node in svg_nodes:
nid = svg_node.text
x = svg_node.attrib.get('x', None)
y = svg_node.attrib.get('y', None)
x = svg_node.attrib.get("x", None)
y = svg_node.attrib.get("y", None)
if x is None or y is None:
print(f"WARN - Unable to get positions for {nid}: {x},{y}")
continue
try:
addr = socket.gethostbyname( nid+".geant.net" )
addr = socket.gethostbyname(nid + ".geant.net")
fqdn = socket.gethostbyaddr(addr)[0]
except:
fqdn = nid+".geant.net"
fqdn = nid + ".geant.net"
addr = ""
addr_map[nid] = addr
# Fill the data structure to plot the node on Timemap page with Cytoscape
cy_nodes_list.append( {
'data': {
'id': nid,
'name': nid,
'fqdn': fqdn,
'ip': addr,
},
'position': {
'x': int(float(x)),
'y': int(float(y)/2),
},
'locked': True,
})
cy_nodes_list.append(
{
"data": {
"id": nid,
"name": nid,
"fqdn": fqdn,
"ip": addr,
},
"position": {
"x": int(float(x)),
"y": int(float(y) / 2),
},
"locked": True,
}
)
return cy_nodes_list, addr_map
def get_edges(tree):
cy_edges_list = []
svg_edges = tree.findall(".//*[@class='edge']")
for svg_edge in svg_edges:
title = svg_edge.find("./{http://www.w3.org/2000/svg}title").text
att = svg_edge.find(".//{http://www.w3.org/2000/svg}a").attrib.get('{http://www.w3.org/1999/xlink}title', None)
att = svg_edge.find(".//{http://www.w3.org/2000/svg}a").attrib.get(
"{http://www.w3.org/1999/xlink}title", None
)
if not att:
print(f"WARN - Unable to get link attribute Element for {title}")
continue
......@@ -64,51 +70,80 @@ def get_edges(tree):
continue
# Fill the data structure to plot the link on the Timemap page wit Cytoscape
cy_edges_list.append( {
'data': {
'id': title,
'label': title.replace("--","-"), # G.edges.get(e)['label'].replace('"', ''),
'source': source,
'source_ip': source_ip,
'target': target,
'target_ip': target_ip,
},
'pannable': True,
})
cy_edges_list.append(
{
"data": {
"id": title,
"label": title.replace(
"--", "-"
), # G.edges.get(e)['label'].replace('"', ''),
"source": source,
"source_ip": source_ip,
"target": target,
"target_ip": target_ip,
},
"pannable": True,
}
)
return cy_edges_list
def generate_test_list(dyngraph, address_map):
testlist = []
for edge in dyngraph['elements']['edges']:
data = edge['data']
src, dst = data.get('id',"").split("--")
src = address_map.get(src,"")
dst = address_map.get(dst,"")
if not(src and dst):
# Telegraf testlist header
testlist = [
"# TWAMP script runner - TWAMP server-client running on network devices",
"[[inputs.exec]]",
"commands = [",
]
for edge in dyngraph["elements"]["edges"]:
data = edge["data"]
src, dst = data.get("id", "").split("--")
src = address_map.get(src, "")
dst = address_map.get(dst, "")
if not (src and dst):
continue
# Prepare the entry for the test list
testlist.append(
# "/opt/rpm_twamp_snmp.py 62.40.97.7 62.40.97.1 TWAMP 3VfrNKak mx1.vie.at--mx1.bud.hu mx1.bud.hu"
f"\"/opt/rpm_twamp_snmp.py {src} {dst} TWAMP 3VfrNKak {data['id']} {data['source']}\","
f" \"/opt/rpm_twamp_snmp.py {src} {dst} TWAMP 3VfrNKak {data['id']} {data['source']}\","
)
# Telegraf testlist footer
testlist.append("]")
testlist.append(' name_suffix = "_twamp"')
testlist.append(' timeout = "2m"')
testlist.append(' data_format = "json"')
testlist.append(' tag_keys = ["src", "dst", "src_ip", "dst_ip"]')
return testlist
# Main
# Usage example: python3 init_timemap_v2.py -s ./dotfiles/geantISIS_latest.svg -o ./dotfiles/latest_graph.json -t ./dotfiles/tests.txt
parser = argparse.ArgumentParser()
parser.add_argument("-s", "--svgfile", help="topology SVG input file")
parser.add_argument("-o", "--output", default="latest_graph.json", help="output json file (default latest_graph.json)")
parser.add_argument("-t", "--testlist", default="testlist.conf", help="test list config file to simplofy Telegraf setup (default testlist.conf)")
parser.add_argument("-s", "--svgfile", help="topology SVG input file")
parser.add_argument(
"-o",
"--output",
default="latest_graph.json",
help="output json file (default latest_graph.json)",
)
parser.add_argument(
"-t",
"--testlist",
default="testlist.conf",
help="test list config file to simplofy Telegraf setup (default testlist.conf)",
)
args = parser.parse_args()
# Parse input file
dyngraph = {
'elements': {
'nodes': [],
'edges': [],
dyngraph = {
"elements": {
"nodes": [],
"edges": [],
},
}
......@@ -117,21 +152,20 @@ tree = ET.parse(args.svgfile)
# Add nodes from dot graph
nodes, address_map = get_nodes(tree)
if nodes:
dyngraph['elements']['nodes'] = nodes
dyngraph["elements"]["nodes"] = nodes
# Add edges from ISIS dynamic topology
edges = get_edges(tree)
if nodes:
dyngraph['elements']['edges'] = edges
dyngraph["elements"]["edges"] = edges
# Write JSON topology used in Timemap GUI
json.dump(dyngraph, open(args.output, 'w'), indent=2)
json.dump(dyngraph, open(args.output, "w"), indent=2)
# Create testlist to be used in Telegraf configurations
testlist = generate_test_list(dyngraph, address_map)
outF = open(args.testlist, "w")
for t in testlist:
outF.write( t+"\n" )
outF.write(t + "\n")
outF.close()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment