Example #1
0
 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
Example #2
0
 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
Example #3
0
 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
Example #4
0
 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
Example #5
0
    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()
Example #6
0
    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()
Example #7
0
    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()
Example #8
0
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
Example #9
0
    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()
Example #10
0
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
Example #11
0
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