diff options
Diffstat (limited to 'esds/debug.py')
| -rw-r--r-- | esds/debug.py | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/esds/debug.py b/esds/debug.py new file mode 100644 index 0000000..168033a --- /dev/null +++ b/esds/debug.py @@ -0,0 +1,100 @@ +import sys,time,json +import numpy as np + +def serialize_int64(obj): + if isinstance(obj, np.int64): + return int(obj) + raise TypeError ("Type %s is not serializable" % type(obj)) + +class Debug: + def __init__(self, simulator, file_path, breakpoints,breakpoints_every,interferences): + self.simulator=simulator + self.file_path=file_path + self.loop_count=0 + header={ + "python_version" : sys.version, + "simulation_started_at": simulator.startat, + "number_of_nodes": len(simulator.nodes), + "manual_breakpoints": breakpoints, + "auto_breakpoint": breakpoints_every + } + self.write(header,append=False) + + def write(self,data, append=True): + mode="a" if append else "w" + with open(self.file_path, mode) as f: + f.write(json.dumps(data,default=serialize_int64)) + f.write("\n") + + def get_network_interfaces(self): + data=dict() + for interface in self.simulator.netmat: + data[interface]={ + "is_wired":self.simulator.netmat[interface]["is_wired"], + "bandwidth": self.simulator.netmat[interface]["bandwidth"].tolist(), + "latency": self.simulator.netmat[interface]["latency"].tolist(), + } + if self.simulator.netmat[interface]["is_wired"]: + data[interface]["sharing"]=self.simulator.sharing[interface].tolist() + + return(data) + + def get_events_list(self): + events=list() + for event_numpy in self.simulator.events: + event_id=event_numpy[0] + content=event_numpy[2].tolist() + final_content=dict() + if event_id == 0: + final_content={ + "src": content[0], + "dst": content[1], + "interface": content[2], + "datasize":content[4], + "duration":content[5], + "datasize_remaining": content[6], + "start_timestamp":content[7], + "perform_delivery":content[8], + "receiver_required":content[9] + } + elif event_id == 1: + final_content={ + "node": content + } + elif event_id == 4: + final_content={ + "node": content + } + event={ + "id": event_id, + "ts": event_numpy[1], + "priority": event_numpy[3], + "content": final_content, + } + events.append(event) + return(events) + + def get_nodes_infos(self): + nodes_infos=list() + for node in self.simulator.nodes: + node_info = { + "turned_on": node["turned_on"] + } + nodes_infos.append(node_info) + return(nodes_infos) + + def debug(self): + """ + Log all the informations for debugging + """ + self.loop_count+=1 + loop_data={ + "loop_count": self.loop_count, + "started_since": round(time.time()-self.simulator.startat,2), + "simulated_time": float(self.simulator.time_truncated), + "simulated_time_accurate": self.simulator.time, + "network_interfaces": self.get_network_interfaces(), + "events_list": self.get_events_list(), + "nodes_infos": self.get_nodes_infos() + } + self.write(loop_data) |
