mirror of
https://gitlab.com/manzerbredes/esds.git
synced 2025-04-07 02:26:28 +02:00
Cleaning
This commit is contained in:
parent
da78abb61c
commit
11966e96ee
2 changed files with 57 additions and 51 deletions
|
@ -2,6 +2,43 @@
|
||||||
import yaml, os
|
import yaml, os
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
class UnitsParser:
|
||||||
|
def range(r,limit):
|
||||||
|
if r == "all":
|
||||||
|
return(range(0,limit))
|
||||||
|
elt=r.replace("@",str(limit-1)).split("-")
|
||||||
|
if len(elt) == 2:
|
||||||
|
min = int(elt[0])
|
||||||
|
max = int(elt[1])
|
||||||
|
# TODO: Check min/max
|
||||||
|
return(range(min,max))
|
||||||
|
else:
|
||||||
|
return([int(elt[0])])
|
||||||
|
|
||||||
|
def bandwidth(bw):
|
||||||
|
for i,c in enumerate(bw):
|
||||||
|
if not c.isdigit() and c != ".":
|
||||||
|
break
|
||||||
|
number=float(bw[:i])
|
||||||
|
unit=bw[i:]
|
||||||
|
number=number*1000 if unit == "Mbps" else number
|
||||||
|
number=number*1000*8 if unit == "MBps" else number
|
||||||
|
number=number*100 if unit == "kbps" else number
|
||||||
|
number=number*100*8 if unit == "kBps" else number
|
||||||
|
number=number*8 if unit == "Bps" else number
|
||||||
|
return(number)
|
||||||
|
|
||||||
|
def latency(lat):
|
||||||
|
for i,c in enumerate(lat):
|
||||||
|
if not c.isdigit() and c != ".":
|
||||||
|
break
|
||||||
|
number=float(lat[:i])
|
||||||
|
unit=lat[i:]
|
||||||
|
number=number*60 if unit in ["m","M"] else number
|
||||||
|
number=number*3600 if unit in ["h","H"] else number
|
||||||
|
number=number/1000 if unit in ["ms","MS"] else number
|
||||||
|
return(number)
|
||||||
|
|
||||||
class YAMLPlatformFile:
|
class YAMLPlatformFile:
|
||||||
|
|
||||||
def __init__(self, file_path):
|
def __init__(self, file_path):
|
||||||
|
@ -26,66 +63,35 @@ class YAMLPlatformFile:
|
||||||
if "nodes" in self.platform:
|
if "nodes" in self.platform:
|
||||||
self.parse_nodes()
|
self.parse_nodes()
|
||||||
else:
|
else:
|
||||||
self.parse_error("platform file has no nodes section")
|
self.parsing_error("platform file has no nodes section")
|
||||||
##### Interfaces
|
##### Interfaces
|
||||||
if "interfaces" in self.platform:
|
if "interfaces" in self.platform:
|
||||||
self.parse_interfaces()
|
self.parse_interfaces()
|
||||||
else:
|
else:
|
||||||
self.parse_error("platform file has no interfaces section")
|
self.parsing_error("platform file has no interfaces section")
|
||||||
|
|
||||||
def parse_error(self,msg):
|
def parsing_error(self,msg):
|
||||||
raise Exception("Fail to parse platform file \""+self.file_path+"\": "+msg)
|
raise Exception("Fail to parse platform file \""+self.file_path+"\": "+msg)
|
||||||
|
|
||||||
def parse_link_range(self,r):
|
|
||||||
elt=r.split("-")
|
|
||||||
if len(elt) == 2:
|
|
||||||
return(range(int(elt[0]),int(elt[1])))
|
|
||||||
else:
|
|
||||||
return([int(elt[0])])
|
|
||||||
|
|
||||||
def parse_bw(self,bw):
|
|
||||||
for i,c in enumerate(bw):
|
|
||||||
if not c.isdigit() and c != ".":
|
|
||||||
break
|
|
||||||
number=float(bw[:i])
|
|
||||||
unit=bw[i:]
|
|
||||||
number=number*1000 if unit == "Mbps" else number
|
|
||||||
number=number*1000*8 if unit == "MBps" else number
|
|
||||||
number=number*100 if unit == "kbps" else number
|
|
||||||
number=number*100*8 if unit == "kBps" else number
|
|
||||||
number=number*8 if unit == "Bps" else number
|
|
||||||
return(number)
|
|
||||||
|
|
||||||
def parse_lat(self,lat):
|
|
||||||
for i,c in enumerate(lat):
|
|
||||||
if not c.isdigit() and c != ".":
|
|
||||||
break
|
|
||||||
number=float(lat[:i])
|
|
||||||
unit=lat[i:]
|
|
||||||
number=number*60 if unit in ["m","M"] else number
|
|
||||||
number=number*3600 if unit in ["h","H"] else number
|
|
||||||
number=number/1000 if unit in ["ms","MS"] else number
|
|
||||||
return(number)
|
|
||||||
|
|
||||||
def parse_link(self,link):
|
def parse_link(self,link):
|
||||||
words=link.split()
|
words=link.split()
|
||||||
if len(words) == 4:
|
if len(words) == 4:
|
||||||
return((
|
return((
|
||||||
self.parse_link_range(words[0]),
|
UnitsParser.range(words[0],self.default["node_count"]),
|
||||||
self.parse_bw(words[1]),
|
UnitsParser.bandwidth(words[1]),
|
||||||
self.parse_lat(words[2]),
|
UnitsParser.latency(words[2]),
|
||||||
self.parse_link_range(words[3])))
|
UnitsParser.range(words[3],self.default["node_count"])))
|
||||||
elif len(words) == 2:
|
elif len(words) == 2:
|
||||||
return((
|
return((
|
||||||
range(0,self.default["node_count"]),
|
range(0,self.default["node_count"]),
|
||||||
self.parse_bw(words[0]),
|
UnitsParser.bandwidth(words[0]),
|
||||||
self.parse_lat(words[1]),
|
UnitsParser.latency(words[1]),
|
||||||
range(0,self.default["node_count"])))
|
range(0,self.default["node_count"])))
|
||||||
return(None)
|
return(None)
|
||||||
|
|
||||||
def parse_txperf(self,txperf):
|
def parse_txperf(self,txperf):
|
||||||
elts=txperf.split()
|
elts=txperf.split()
|
||||||
return((self.parse_bw(elts[0]),self.parse_lat(elts[1])))
|
return((UnitsParser.bandwidth(elts[0]),UnitsParser.latency(elts[1])))
|
||||||
|
|
||||||
def parse_interfaces(self):
|
def parse_interfaces(self):
|
||||||
interfaces=self.platform["interfaces"]
|
interfaces=self.platform["interfaces"]
|
||||||
|
@ -126,38 +132,38 @@ class YAMLPlatformFile:
|
||||||
nodes=self.platform["nodes"]
|
nodes=self.platform["nodes"]
|
||||||
if "count" in nodes:
|
if "count" in nodes:
|
||||||
if not str(nodes["count"]).isnumeric():
|
if not str(nodes["count"]).isnumeric():
|
||||||
self.parse_error("node count should be a number")
|
self.parsing_error("node count should be a number")
|
||||||
self.default["node_count"]=nodes["count"]
|
self.default["node_count"]=nodes["count"]
|
||||||
if "implementations" in nodes:
|
if "implementations" in nodes:
|
||||||
if type(nodes["implementations"]) != list:
|
if type(nodes["implementations"]) != list:
|
||||||
self.parse_error("nodes implementations should be a list of file path")
|
self.parsing_error("nodes implementations should be a list of file path")
|
||||||
for file in nodes["implementations"]:
|
for file in nodes["implementations"]:
|
||||||
if not os.path.exists(file):
|
if not os.path.exists(file):
|
||||||
self.parse_error("File "+file+ " not found")
|
self.parsing_error("File "+file+ " not found")
|
||||||
path, extension = os.path.splitext(file)
|
path, extension = os.path.splitext(file)
|
||||||
if extension != ".py":
|
if extension != ".py":
|
||||||
self.parse_error("File "+file+" must be a python file")
|
self.parsing_error("File "+file+" must be a python file")
|
||||||
self.default["implementations"].append(path)
|
self.default["implementations"].append(path)
|
||||||
count = len(nodes["implementations"])
|
count = len(nodes["implementations"])
|
||||||
if count > 1 and count != self.default["node_count"]:
|
if count > 1 and count != self.default["node_count"]:
|
||||||
self.parse_error("If more than one implementation is specified, each node implementation should be provided ("+str(self.default["node_count"])+" in total)")
|
self.parsing_error("If more than one implementation is specified, each node implementation should be provided ("+str(self.default["node_count"])+" in total)")
|
||||||
|
|
||||||
|
|
||||||
def parse_general(self):
|
def parse_general(self):
|
||||||
general=self.platform["general"]
|
general=self.platform["general"]
|
||||||
if "breakpoints" in general:
|
if "breakpoints" in general:
|
||||||
if type(general["breakpoints"]) != list:
|
if type(general["breakpoints"]) != list:
|
||||||
self.parse_error("breakpoints should be a list of number")
|
self.parsing_error("breakpoints should be a list of number")
|
||||||
self.default["breakpoints"]=general["breakpoints"]
|
self.default["breakpoints"]=general["breakpoints"]
|
||||||
if "breakpoints_every" in general:
|
if "breakpoints_every" in general:
|
||||||
if not str(general["breakpoints_every"]).isnumeric():
|
if not str(general["breakpoints_every"]).isnumeric():
|
||||||
self.parse_error("breakpoints_every should be a number")
|
self.parsing_error("breakpoints_every should be a number")
|
||||||
self.default["breakpoints_every"]=general["breakpoints_every"]
|
self.default["breakpoints_every"]=general["breakpoints_every"]
|
||||||
if "debug" in general:
|
if "debug" in general:
|
||||||
if type(general["debug"]) != bool:
|
if type(general["debug"]) != bool:
|
||||||
self.parse_error("debug should be on or off")
|
self.parsing_error("debug should be on or off")
|
||||||
self.default["debug"]=general["debug"]
|
self.default["debug"]=general["debug"]
|
||||||
if "interferences" in general:
|
if "interferences" in general:
|
||||||
if type(general["interferences"]) != bool:
|
if type(general["interferences"]) != bool:
|
||||||
self.parse_error("interferences should be on or off")
|
self.parsing_error("interferences should be on or off")
|
||||||
self.default["interferences"]=general["interferences"]
|
self.default["interferences"]=general["interferences"]
|
||||||
|
|
|
@ -13,7 +13,7 @@ interfaces:
|
||||||
wlan0:
|
wlan0:
|
||||||
wireless: yes
|
wireless: yes
|
||||||
links:
|
links:
|
||||||
- 0 1Bps 10s 0
|
- 0 1Bps 10s 0
|
||||||
txperfs:
|
txperfs:
|
||||||
- 1Bps 10s
|
- 1Bps 10s
|
||||||
eth0:
|
eth0:
|
||||||
|
|
Loading…
Add table
Reference in a new issue