def load_files(self, filenames): added = 0 for f in filenames: if self.add_extra(ResultSet.load_file(unicode(f))): added += 1 if added > 0: self.update() return added
def load_files(self, filenames): added = 0 for f in filenames: if self.add_extra(ResultSet.load_file(unicode(f))): self.update(False) added += 1 self.redraw() return added
def __init__(self, parent, filename, settings): super(ResultWidget, self).__init__(parent) self.filename = unicode(filename) self.settings = settings.copy() self.dirty = True self.settings.OUTPUT = "-" self.results = ResultSet.load_file(self.filename) self.extra_results = [] self.settings.update(self.results.meta()) self.settings.load_test(informational=True) self.settings.compute_missing_results(self.results) try: self.formatter = PlotFormatter(self.settings) except Exception as e: traceback.print_exc() if isinstance(e, RuntimeError): err = "%s" % e else: typ,val,tra = sys.exc_info() err = "".join(traceback.format_exception_only(typ,val)) QMessageBox.warning(self, "Error loading plot", "Error while loading plot:\n\n%s\nFalling back to default plot. Full traceback output to console." % err) self.settings.PLOT = self.settings.DEFAULTS['PLOT'] self.formatter = PlotFormatter(self.settings) self.canvas = FigureCanvas(self.formatter.figure) self.canvas.setParent(self.graphDisplay) self.toolbar = NavigationToolbar(self.canvas, self.graphDisplay) vbl = QVBoxLayout() vbl.addWidget(self.canvas) vbl.addWidget(self.toolbar) self.graphDisplay.setLayout(vbl) self.plotModel = PlotModel(self, self.settings) self.plotSelectionModel = QItemSelectionModel(self.plotModel) self.plotSelectionModel.setCurrentIndex(self.plotModel.index_of(self.settings.PLOT), QItemSelectionModel.SelectCurrent) self.plotSelectionModel.currentChanged.connect(self.change_plot) self.metadataModel = MetadataModel(self, self.results.meta()) self.metadataSelectionModel = QItemSelectionModel(self.metadataModel) if self.settings.TITLE: self.title = "%s - %s" % (self.settings.NAME, self.settings.TITLE) self.long_title = "%s - %s" % (self.title, self.settings.TIME.strftime("%Y-%m-%d %H:%M:%S")) else: self.title = "%s - %s" % (self.settings.NAME, self.settings.TIME.strftime("%Y-%m-%d %H:%M:%S")) self.long_title = self.title if self.settings.GUI_NO_DEFER: self.redraw()
def __init__(self, parent, filename, settings): super(ResultWidget, self).__init__(parent) self.filename = unicode(filename) self.settings = settings.copy() self.settings.OUTPUT = "-" self.results = ResultSet.load_file(self.filename) self.extra_results = [] self.settings.update(self.results.meta()) self.settings.load_test() self.formatter = PlotFormatter(self.settings) self.canvas = FigureCanvas(self.formatter.figure) self.canvas.setParent(self.graphDisplay) self.toolbar = NavigationToolbar(self.canvas, self.graphDisplay) vbl = QVBoxLayout() vbl.addWidget(self.canvas) vbl.addWidget(self.toolbar) self.graphDisplay.setLayout(vbl) self.plotModel = PlotModel(self, self.settings) self.plotSelectionModel = QItemSelectionModel(self.plotModel) self.plotSelectionModel.setCurrentIndex( self.plotModel.index_of(self.settings.PLOT), QItemSelectionModel.SelectCurrent ) self.plotSelectionModel.currentChanged.connect(self.change_plot) self.metadataModel = MetadataModel(self, self.results.meta()) self.metadataSelectionModel = QItemSelectionModel(self.metadataModel) if self.settings.TITLE: self.title = "%s - %s - %s" % ( self.settings.NAME, self.settings.TITLE, self.settings.TIME.strftime("%Y-%m-%d %H:%M:%S"), ) else: self.title = "%s - %s" % (self.settings.NAME, self.settings.TIME.strftime("%Y-%m-%d %H:%M:%S")) self.update()
def __init__(self, parent, filename, settings): super(ResultWidget, self).__init__(parent) self.filename = unicode(filename) self.settings = settings.copy() self.settings.OUTPUT = "-" self.results = ResultSet.load_file(self.filename) self.extra_results = [] self.settings.update(self.results.meta()) self.settings.load_test() self.formatter = PlotFormatter(self.settings) self.canvas = FigureCanvas(self.formatter.figure) self.canvas.setParent(self.graphDisplay) self.toolbar = NavigationToolbar(self.canvas, self.graphDisplay) vbl = QVBoxLayout() vbl.addWidget(self.canvas) vbl.addWidget(self.toolbar) self.graphDisplay.setLayout(vbl) self.plotModel = PlotModel(self, self.settings) self.plotSelectionModel = QItemSelectionModel(self.plotModel) self.plotSelectionModel.setCurrentIndex( self.plotModel.index_of(self.settings.PLOT), QItemSelectionModel.SelectCurrent) self.plotSelectionModel.currentChanged.connect(self.change_plot) self.metadataModel = MetadataModel(self, self.results.meta()) self.metadataSelectionModel = QItemSelectionModel(self.metadataModel) if self.settings.TITLE: self.title = "%s - %s - %s" % ( self.settings.NAME, self.settings.TITLE, self.settings.TIME.strftime("%Y-%m-%d %H:%M:%S")) else: self.title = "%s - %s" % ( self.settings.NAME, self.settings.TIME.strftime("%Y-%m-%d %H:%M:%S")) self.update()
def load(): (dummy,args) = parser.parse_args(values=settings) if hasattr(settings, 'LIST_TESTS') and settings.LIST_TESTS: list_tests() if hasattr(settings, 'PLOT'): settings.FORMAT = 'plot' for a in args: if os.path.exists(a): if settings.SCALE_MODE and settings.INPUT: settings.SCALE_DATA.append(a) else: settings.INPUT.append(a) else: settings.check_testname(a) if settings.INPUT: results = [] test_name = None for filename in settings.INPUT: r = ResultSet.load_file(filename) if test_name is not None and test_name != r.meta("NAME"): raise RuntimeError("Result sets must be from same test (found %s/%s)" % (test_name, r.meta("NAME"))) test_name = r.meta("NAME") results.append(r) settings.update(results[0].meta()) settings.load_test() else: settings.load_test() results = [ResultSet(NAME=settings.NAME, HOST=settings.HOST, HOSTS=settings.HOSTS, TIME=settings.TIME, LOCAL_HOST=settings.LOCAL_HOST, TITLE=settings.TITLE, NOTE=settings.NOTE, LENGTH=settings.LENGTH, TOTAL_LENGTH=settings.TOTAL_LENGTH, STEP_SIZE=settings.STEP_SIZE,)] if settings.SCALE_DATA: scale_data = [] for filename in settings.SCALE_DATA: if filename == settings.INPUT: # Do not load input file twice - makes it easier to select a set # of files for plot scaling and supply each one to -i without # having to change the other command line options each time. continue r = ResultSet.load_file(filename) if r.meta("NAME") != settings.NAME: raise RuntimeError("Setting name mismatch between test " "data and scale file %s" % filename) scale_data.append(r) settings.SCALE_DATA = scale_data if hasattr(settings, 'LIST_PLOTS') and settings.LIST_PLOTS: list_plots() if not settings.HOSTS and not results: raise RuntimeError("Must specify host (-H option).") return settings, results
def __init__(self, parent, filename, settings): super(ResultWidget, self).__init__(parent) self.filename = unicode(filename) self.settings = settings.copy() self.dirty = True self.settings.OUTPUT = "-" self.results = ResultSet.load_file(self.filename) self.extra_results = [] self.settings.update(self.results.meta()) self.settings.load_test(informational=True) self.settings.compute_missing_results(self.results) try: self.formatter = PlotFormatter(self.settings) except Exception as e: traceback.print_exc() if isinstance(e, RuntimeError): err = "%s" % e else: typ, val, tra = sys.exc_info() err = "".join(traceback.format_exception_only(typ, val)) QMessageBox.warning( self, "Error loading plot", "Error while loading plot:\n\n%s\nFalling back to default plot. Full traceback output to console." % err) self.settings.PLOT = self.settings.DEFAULTS['PLOT'] self.formatter = PlotFormatter(self.settings) self.canvas = FigureCanvas(self.formatter.figure) self.canvas.setParent(self.graphDisplay) self.toolbar = NavigationToolbar(self.canvas, self.graphDisplay) vbl = QVBoxLayout() vbl.addWidget(self.canvas) vbl.addWidget(self.toolbar) self.graphDisplay.setLayout(vbl) self.plotModel = PlotModel(self, self.settings) self.plotSelectionModel = QItemSelectionModel(self.plotModel) self.plotSelectionModel.setCurrentIndex( self.plotModel.index_of(self.settings.PLOT), QItemSelectionModel.SelectCurrent) self.plotSelectionModel.currentChanged.connect(self.change_plot) self.metadataModel = MetadataModel(self, self.results.meta()) self.metadataSelectionModel = QItemSelectionModel(self.metadataModel) if self.settings.TITLE: self.title = "%s - %s" % (self.settings.NAME, self.settings.TITLE) self.long_title = "%s - %s" % ( self.title, self.settings.TIME.strftime("%Y-%m-%d %H:%M:%S")) else: self.title = "%s - %s" % ( self.settings.NAME, self.settings.TIME.strftime("%Y-%m-%d %H:%M:%S")) self.long_title = self.title if self.settings.GUI_NO_DEFER: self.redraw()
def load(): (dummy,args) = parser.parse_args(values=settings) # If run with no args and no controlling TTY, launch the GUI by default if not sys.stdin.isatty() and not sys.stdout.isatty() and not sys.stderr.isatty() \ and len(sys.argv) < 2: settings.GUI = True if hasattr(settings, 'LIST_TESTS') and settings.LIST_TESTS: list_tests() if hasattr(settings, 'PLOT'): settings.FORMAT = 'plot' for a in args: if os.path.exists(a): if settings.SCALE_MODE and settings.INPUT: settings.SCALE_DATA.append(a) else: settings.INPUT.append(a) else: settings.load_test_or_host(a) settings.load_rcfile() if settings.INPUT: results = [] test_name = None for filename in settings.INPUT: r = ResultSet.load_file(filename) if test_name is not None and test_name != r.meta("NAME"): raise RuntimeError("Result sets must be from same test (found %s/%s)" % (test_name, r.meta("NAME"))) test_name = r.meta("NAME") results.append(r) if settings.GUI: load_gui(settings) settings.update(results[0].meta()) settings.load_test() elif settings.GUI: load_gui(settings) else: settings.load_test() results = [ResultSet(NAME=settings.NAME, HOST=settings.HOST, HOSTS=settings.HOSTS, TIME=settings.TIME, LOCAL_HOST=settings.LOCAL_HOST, TITLE=settings.TITLE, NOTE=settings.NOTE, LENGTH=settings.LENGTH, TOTAL_LENGTH=settings.TOTAL_LENGTH, STEP_SIZE=settings.STEP_SIZE, NETPERF_WRAPPER_VERSION=VERSION, IP_VERSION=settings.IP_VERSION)] if settings.EXTENDED_METADATA: record_extended_metadata(results[0], settings.REMOTE_METADATA) if settings.SCALE_DATA: scale_data = [] for filename in settings.SCALE_DATA: if filename == settings.INPUT: # Do not load input file twice - makes it easier to select a set # of files for plot scaling and supply each one to -i without # having to change the other command line options each time. continue r = ResultSet.load_file(filename) if r.meta("NAME") != settings.NAME: raise RuntimeError("Setting name mismatch between test " "data and scale file %s" % filename) scale_data.append(r) settings.SCALE_DATA = scale_data if hasattr(settings, 'LIST_PLOTS') and settings.LIST_PLOTS: list_plots() if not settings.HOSTS and not results[0]: raise RuntimeError("Must specify host (-H option).") return settings, results
def load(): global LOGFILE_HANDLE (dummy,args) = parser.parse_args(values=settings) if settings.LOG_FILE: LOGFILE_HANDLE = open(settings.LOG_FILE, "a") writeLog("logfile opened") # If run with no args and no controlling TTY, launch the GUI by default if not sys.stdin.isatty() and not sys.stdout.isatty() and not sys.stderr.isatty() \ and len(sys.argv) < 2: settings.GUI = True if hasattr(settings, 'LIST_TESTS') and settings.LIST_TESTS: list_tests() if hasattr(settings, 'PLOT'): settings.FORMAT = 'plot' for a in args: if os.path.exists(a): if settings.SCALE_MODE and settings.INPUT: settings.SCALE_DATA.append(a) else: settings.INPUT.append(a) else: settings.load_test_or_host(a) settings.load_rcfile() if settings.INPUT: results = [] test_name = None for filename in settings.INPUT: r = ResultSet.load_file(filename) if test_name is not None and test_name != r.meta("NAME"): raise RuntimeError("Result sets must be from same test (found %s/%s)" % (test_name, r.meta("NAME"))) test_name = r.meta("NAME") #print "Appending results for test %s" % (test_name) results.append(r) if settings.GUI: load_gui(settings) settings.update(results[0].meta()) settings.load_test() elif settings.GUI: load_gui(settings) else: settings.RESULT_LOCATION_BASE2 = '${HOME}/tempResult%s' % (timeStamped(t=settings.TIME).strip().replace(' ', '')) settings.SERVERS = settings.HOSTS if settings.TOTAL_CLIENTS > 0 : if len(settings.CLIENTS) >= settings.TOTAL_CLIENTS: settings.CLIENTS = settings.CLIENTS[:settings.TOTAL_CLIENTS] else: client_count = len(settings.CLIENTS) for i in range(0, (settings.TOTAL_CLIENTS - client_count)) : settings.CLIENTS.append(settings.CLIENTS[i % client_count]) else : settings.TOTAL_CLIENTS = len(settings.CLIENTS) print "Final client list is %s" % (settings.CLIENTS) for m in settings.SERVERS: settings.MINFO_SERVER[m] = record_machine_metadata(m, settings.TARGET) settings.SERVERS_IF[m] = settings.MINFO_SERVER[m]["EGRESS_INFO"]["iface"] settings.SERVERS_DRV[m] = settings.MINFO_SERVER[m]["EGRESS_INFO"]["driver"] settings.SERVERS_CORECOUNT[m] = int(settings.MINFO_SERVER[m]['CORECOUNT']) for m in settings.CLIENTS: settings.MINFO_CLIENT[m] = record_machine_metadata(m, settings.TARGET) settings.CLIENTS_IF[m] = settings.MINFO_CLIENT[m]["EGRESS_INFO"]["iface"] settings.CLIENTS_CORECOUNT[m] = int(settings.MINFO_CLIENT[m]['CORECOUNT']) if settings.SERVER_ONLOAD_LATENCY: settings.SERVER_ONLOAD_CMDLINE = "onload --profile=latency --preload=/usr/lib64/libonload.so" elif settings.SERVER_ONLOAD_ENABLED : settings.SERVER_ONLOAD_CMDLINE = "onload --preload=/usr/lib64/libonload.so" else : settings.SERVER_ONLOAD_CMDLINE = "" if len(settings.SERVERS) > 1 : print "ERROR: More than one server specified. This is not supporte d yet" sys.exit(1) srvname = settings.SERVERS[0] for i in range(0, settings.SERVERS_INSTANCES): settings.RUN_CONF[0] = {} settings.RUN_CONF[0]['SERVER'] = {} settings.BRUST_SIZE = settings.CONCURRENCY settings.TCONCURRENCY = (settings.CONCURRENCY * settings.CLIENT_CORES * (len(settings.CLIENTS) - settings.SPECIAL_CLIENTS_COUNT)) settings.load_test() results = [ResultSet(NAME=settings.NAME, HOST=settings.HOST, HOSTS=settings.HOSTS, SERVERS=settings.SERVERS, MINFO_SERVER=settings.MINFO_SERVER, MINFO_CLIENT=settings.MINFO_CLIENT, RESULT_LOCATION_BASE2=settings.RESULT_LOCATION_BASE2, TOOLS_LOCATION=settings.TOOLS_LOCATION, PKT_SIZE=settings.PKT_SIZE, TARGET=settings.TARGET, USE_TCP=settings.USE_TCP, SERVER_CORES=settings.SERVER_CORES, HWQUEUES=settings.HWQUEUES, SPECIAL_CLIENTS_COUNT = settings.SPECIAL_CLIENTS_COUNT, SPECIAL_SERVERS_COUNT = settings.SPECIAL_SERVERS_COUNT, BRUST_SIZE=settings.BRUST_SIZE, CONCURRENCY = settings.CONCURRENCY, TCONCURRENCY = settings.TCONCURRENCY, CLIENT_CORES=settings.CLIENT_CORES, CLIENT_PORTS_SHIFT=settings.CLIENT_PORTS_SHIFT, CLIENTS=settings.CLIENTS, TOTAL_CLIENTS=settings.TOTAL_CLIENTS, CLIENTS_IF=settings.CLIENTS_IF, CLIENTS_CORECOUNT=settings.CLIENTS_CORECOUNT, SERVERS_IF=settings.SERVERS_IF, SERVERS_DRV=settings.SERVERS_DRV, SERVERS_CORECOUNT=settings.SERVERS_CORECOUNT, SERVERS_INSTANCES=settings.SERVERS_INSTANCES, SERVER_CORESHIFT=settings.SERVER_CORESHIFT, TIME=settings.TIME, LOCAL_HOST=settings.LOCAL_HOST, TITLE=settings.TITLE, NOTE=settings.NOTE, SERVER_ONLOAD_LATENCY=settings.SERVER_ONLOAD_LATENCY, DRAGONET_COST_FUNCTION=settings.DRAGONET_COST_FUNCTION, SERVER_ONLOAD_ENABLED=settings.SERVER_ONLOAD_ENABLED, SERVER_ONLOAD_CMDLINE=settings.SERVER_ONLOAD_CMDLINE, LENGTH=settings.LENGTH, TOTAL_LENGTH=settings.TOTAL_LENGTH, DELAY=settings.DELAY, STEP_SIZE=settings.STEP_SIZE, ITERATIONS=settings.ITERATIONS, ECHO_SERVER=settings.ECHO_SERVER, NETPERF_WRAPPER_VERSION=VERSION, IP_VERSION=settings.IP_VERSION)] if settings.EXTENDED_METADATA: record_extended_metadata(results[0], settings.REMOTE_METADATA) if settings.SCALE_DATA: scale_data = [] for filename in settings.SCALE_DATA: if filename == settings.INPUT: # Do not load input file twice - makes it easier to select a set # of files for plot scaling and supply each one to -i without # having to change the other command line options each time. continue r = ResultSet.load_file(filename) if r.meta("NAME") != settings.NAME: raise RuntimeError("Setting name mismatch between test " "data and scale file %s" % filename) scale_data.append(r) settings.SCALE_DATA = scale_data if hasattr(settings, 'LIST_PLOTS') and settings.LIST_PLOTS: list_plots() if not settings.HOSTS and not results[0]: raise RuntimeError("Must specify host (-H option).") print "Running experiment for time of %d" % (settings.TOTAL_LENGTH) return settings, results