Ejemplo n.º 1
0
    def __init__(self, SUFFIX=SUFFIX, **kwargs):
        self._x_values = []
        self._results = OrderedDict()
        self._filename = None
        self._loaded_from = None
        self._absolute = False
        self._raw_values = {}
        self._raw_keys = None
        self.metadata = SeparatorDict(kwargs, sep=":")
        self.SUFFIX = SUFFIX
        self.t0 = None
        if 'TIME' not in self.metadata or self.metadata['TIME'] is None:
            self.metadata['TIME'] = datetime.utcnow()
        if 'NAME' not in self.metadata or self.metadata['NAME'] is None:
            raise RuntimeError("Missing name for resultset")
        if 'DATA_FILENAME' not in self.metadata \
           or self.metadata['DATA_FILENAME'] is None:
            self.metadata['DATA_FILENAME'] = self.dump_filename
        if not self.metadata['DATA_FILENAME'].endswith(self.SUFFIX):
            self.metadata['DATA_FILENAME'] += self.SUFFIX
        self._filename = self.metadata['DATA_FILENAME']
        self._label = None

        if 'TITLE' in self.metadata and self.metadata['TITLE']:
            self.title = "%s - %s" % (self.metadata['NAME'],
                                      self.metadata['TITLE'])
            self.long_title = "%s - %s" % (
                self.title,
                format_date(self.metadata['TIME'], fmt="%Y-%m-%d %H:%M:%S"))
        else:
            self.title = "%s - %s" % (self.metadata['NAME'],
                                      format_date(self.metadata['TIME'],
                                                  fmt="%Y-%m-%d %H:%M:%S"))
            self.long_title = self.title
Ejemplo n.º 2
0
    def __init__(self, SUFFIX=SUFFIX, **kwargs):
        self._x_values = []
        self._results = OrderedDict()
        self._filename = None
        self._loaded_from = None
        self._absolute = False
        self._raw_values = {}
        self._raw_keys = None
        self.metadata = SeparatorDict(kwargs, sep=":")
        self.SUFFIX = SUFFIX
        self.t0 = None
        if 'TIME' not in self.metadata or self.metadata['TIME'] is None:
            self.metadata['TIME'] = datetime.utcnow()
        if 'NAME' not in self.metadata or self.metadata['NAME'] is None:
            raise RuntimeError("Missing name for resultset")
        if 'DATA_FILENAME' not in self.metadata \
           or self.metadata['DATA_FILENAME'] is None:
            self.metadata['DATA_FILENAME'] = self.dump_filename
        if not self.metadata['DATA_FILENAME'].endswith(self.SUFFIX):
            self.metadata['DATA_FILENAME'] += self.SUFFIX
        self._filename = self.metadata['DATA_FILENAME']
        self._label = None

        if 'TITLE' in self.metadata and self.metadata['TITLE']:
            self.title = "%s - %s" % (self.metadata['NAME'],
                                      self.metadata['TITLE'])
            self.long_title = "%s - %s" % (self.title, format_date(
                self.metadata['TIME'], fmt="%Y-%m-%d %H:%M:%S"))
        else:
            self.title = "%s - %s" % (self.metadata['NAME'],
                                      format_date(self.metadata['TIME'],
                                                  fmt="%Y-%m-%d %H:%M:%S"))
            self.long_title = self.title
Ejemplo n.º 3
0
Archivo: batch.py Proyecto: mmlb/flent
 def run(self):
     if self.settings.INPUT:
         return self.load_input(self.settings)
     elif self.settings.BATCH_NAMES:
         start_time = self.settings.TIME
         sys.stderr.write("Started batch sequence at %s.\n" % format_date(start_time, fmt="%Y-%m-%d %H:%M:%S"))
         if len(self.settings.BATCH_NAMES) == 1 and self.settings.BATCH_NAMES[0] == 'ALL':
             sys.stderr.write("Running all batches.\n")
             batches = self.batches.keys()
         else:
             batches = self.settings.BATCH_NAMES
         total_time = sum([self.get_batch_runtime(b) for b in batches])
         if total_time > 0:
             sys.stderr.write("Estimated total runtime: %s\n" % timedelta(seconds=total_time))
         for b in batches:
             try:
                 sys.stderr.write("Running batch '%s'.\n" % b)
                 self.run_batch(b)
             except RuntimeError:
                 raise
             except Exception as e:
                 if self.settings.DEBUG_ERROR:
                     raise
                 raise RuntimeError("Error while running batch '%s': %r." % (b, e))
         end_time = datetime.utcnow()
         sys.stderr.write("Ended batch sequence at %s. %s %d tests in %s.\n" % (format_date(end_time, fmt="%Y-%m-%d %H:%M:%S"),
                                                                                "Ran" if not self.settings.BATCH_DRY else 'Would have run',
                                                                                self.tests_run, (end_time - start_time)))
         return True
     else:
         return self.run_test(self.settings, self.settings.DATA_DIR, True)
Ejemplo n.º 4
0
 def _gen_filename(self):
     if self._filename is not None:
         return self._filename
     if 'TITLE' in self.metadata and self.metadata['TITLE']:
         return "%s-%s.%s%s" % (self.metadata['NAME'],
                                      format_date(self.metadata['TIME']).replace(":", ""),
                                      re.sub("[^A-Za-z0-9]", "_", self.metadata['TITLE'])[:50],
                                      self.SUFFIX)
     else:
         return "%s-%s%s" % (self.metadata['NAME'], format_date(self.metadata['TIME']).replace(":", ""), self.SUFFIX)
Ejemplo n.º 5
0
 def _gen_filename(self):
     if self._filename is not None:
         return self._filename
     if 'TITLE' in self.metadata and self.metadata['TITLE']:
         return "%s-%s.%s%s" % (self.metadata['NAME'],
                                      format_date(self.metadata['TIME']).replace(":", ""),
                                      re.sub("[^A-Za-z0-9]", "_", self.metadata['TITLE'])[:50],
                                      self.SUFFIX)
     else:
         return "%s-%s%s" % (self.metadata['NAME'], format_date(self.metadata['TIME']).replace(":", ""), self.SUFFIX)
Ejemplo n.º 6
0
    def _gen_filename(self):
        if self._filename is not None:
            return self._filename
        if 'TITLE' in self.metadata and self.metadata['TITLE']:
            name = "%s-%s.%%s%s" % (self.metadata['NAME'],
                                         format_date(self.metadata['TIME']).replace(":", ""),
                                         self.SUFFIX)
            title_len = MAX_FILENAME_LEN - len(name) + 2
            return name % re.sub("[^A-Za-z0-9]", "_", self.metadata['TITLE'])[:title_len]

        else:
            return "%s-%s%s" % (self.metadata['NAME'], format_date(self.metadata['TIME']).replace(":", ""), self.SUFFIX)
Ejemplo n.º 7
0
    def _gen_filename(self):
        if self._filename is not None:
            return self._filename
        if 'TITLE' in self.metadata and self.metadata['TITLE']:
            name = "%s-%s.%%s%s" % (self.metadata['NAME'],
                                    format_date(self.metadata['TIME']).replace(
                                        ":", ""), self.SUFFIX)
            title_len = MAX_FILENAME_LEN - len(name) + 2
            return name % re.sub("[^A-Za-z0-9-]", "_",
                                 self.metadata['TITLE'])[:title_len]

        else:
            return "%s-%s%s" % (self.metadata['NAME'],
                                format_date(self.metadata['TIME']).replace(
                                    ":", ""), self.SUFFIX)
Ejemplo n.º 8
0
    def _annotate_plot(self, skip_title=False):
        titles = []
        title_y=1
        if self.override_title:
            self.title_obj = self.figure.suptitle(self.override_title,
                                                  fontsize=14, y=title_y)
            titles.append(self.title_obj)
            self.title = self.override_title
        elif self.print_title:
            plot_title = self.description
            if 'description' in self.config:
                plot_title += "\n" + self.config['description']
            if self.metadata['TITLE'] and not skip_title:
                plot_title += "\n" + self.metadata['TITLE']
            if 'description' in self.config and self.metadata['TITLE'] and not skip_title:
                title_y=1.00
            self.title_obj = self.figure.suptitle(plot_title, fontsize=14, y=title_y)
            titles.append(self.title_obj)
            self.title = plot_title
        else:
                self.title_obj = None

        if self.annotate:
            annotation_string = "Local/remote: %s/%s - Time: %s - Length/step: %ds/%.2fs" % (
                self.metadata['LOCAL_HOST'], self.metadata['HOST'],
                format_date(self.metadata['TIME']),
                self.metadata['LENGTH'], self.metadata['STEP_SIZE'])
            self.annotation_obj = self.figure.text(0.5, 0.0, annotation_string,
                             horizontalalignment='center',
                             verticalalignment='bottom',
                             fontsize=8)
        else:
            self.annotation_obj = None
        return titles
Ejemplo n.º 9
0
    def run(self):
        if self.settings.INPUT:
            return self.load_input(self.settings)
        elif self.settings.BATCH_NAMES:
            start_time = self.settings.TIME
            self.settings.BATCH_UUID = str(uuid.uuid4())
            self.settings.LOG_FILE = None  # batch run will generate logs
            logger.info("Started batch run %s at %s.",
                        self.settings.BATCH_UUID,
                        format_date(start_time, fmt="%Y-%m-%d %H:%M:%S"))

            if len(self.settings.BATCH_NAMES) == 1 and \
               self.settings.BATCH_NAMES[0] == 'ALL':
                logger.info("Running all batches.")
                batches = self.batches.keys()
            else:
                batches = self.settings.BATCH_NAMES
            runtimes = [self.get_batch_runtime(b) for b in batches]
            total_time, total_n = map(sum, zip(*runtimes))
            if total_time > 0:
                logger.info("Estimated total runtime: %s (%d tests)",
                            timedelta(seconds=total_time), total_n)
            for b in batches:
                try:
                    logger.info("Running batch '%s'.", b)
                    self.run_batch(b)
                except RuntimeError:
                    raise
                except Exception as e:
                    if self.settings.DEBUG_ERROR:
                        raise
                    raise RuntimeError("Error while running batch '%s': %r." %
                                       (b, e))
            end_time = datetime.utcnow()
            logger.info(
                "Ended batch sequence at %s. %s %d tests in %s.",
                format_date(end_time, fmt="%Y-%m-%d %H:%M:%S"),
                "Ran" if not self.settings.BATCH_DRY else
                'Would have run',  # noqa: E501
                self.tests_run,
                (end_time - start_time))
            return True
        else:
            return self.run_test(self.settings, self.settings.DATA_DIR, True)
Ejemplo n.º 10
0
    def run(self):
        if self.settings.INPUT:
            return self.load_input(self.settings)
        elif self.settings.BATCH_NAMES:
            start_time = self.settings.TIME
            self.settings.BATCH_UUID = str(uuid.uuid4())
            self.settings.LOG_FILE = None  # batch run will generate logs
            logger.info("Started batch run %s at %s.",
                        self.settings.BATCH_UUID,
                        format_date(start_time, fmt="%Y-%m-%d %H:%M:%S"))

            if len(self.settings.BATCH_NAMES) == 1 and \
               self.settings.BATCH_NAMES[0] == 'ALL':
                logger.info("Running all batches.")
                batches = self.batches.keys()
            else:
                batches = self.settings.BATCH_NAMES
            runtimes = [self.get_batch_runtime(b) for b in batches]
            total_time, total_n = map(sum, zip(*runtimes))
            if total_time > 0:
                logger.info("Estimated total runtime: %s (%d tests)",
                            timedelta(seconds=total_time),
                            total_n)
            for b in batches:
                try:
                    logger.info("Running batch '%s'.", b)
                    self.run_batch(b)
                except RuntimeError:
                    raise
                except Exception as e:
                    if self.settings.DEBUG_ERROR:
                        raise
                    raise RuntimeError("Error while running batch '%s': %r."
                                       % (b, e))
            end_time = datetime.utcnow()
            logger.info("Ended batch sequence at %s. %s %d tests in %s.",
                        format_date(end_time, fmt="%Y-%m-%d %H:%M:%S"),
                        "Ran" if not self.settings.BATCH_DRY else 'Would have run',  # noqa: E501
                        self.tests_run,
                        (end_time - start_time))
            return True
        else:
            return self.run_test(self.settings, self.settings.DATA_DIR, True)
Ejemplo n.º 11
0
 def run(self):
     if self.settings.INPUT:
         return self.load_input(self.settings)
     elif self.settings.BATCH_NAMES:
         start_time = self.settings.TIME
         sys.stderr.write("Started batch sequence at %s.\n" %
                          format_date(start_time, fmt="%Y-%m-%d %H:%M:%S"))
         if len(self.settings.BATCH_NAMES
                ) == 1 and self.settings.BATCH_NAMES[0] == 'ALL':
             sys.stderr.write("Running all batches.\n")
             batches = self.batches.keys()
         else:
             batches = self.settings.BATCH_NAMES
         total_time = sum([self.get_batch_runtime(b) for b in batches])
         if total_time > 0:
             sys.stderr.write("Estimated total runtime: %s\n" %
                              timedelta(seconds=total_time))
         for b in batches:
             try:
                 sys.stderr.write("Running batch '%s'.\n" % b)
                 self.run_batch(b)
             except RuntimeError:
                 raise
             except Exception as e:
                 if self.settings.DEBUG_ERROR:
                     raise
                 raise RuntimeError("Error while running batch '%s': %r." %
                                    (b, e))
         end_time = datetime.utcnow()
         sys.stderr.write(
             "Ended batch sequence at %s. %s %d tests in %s.\n" %
             (format_date(end_time, fmt="%Y-%m-%d %H:%M:%S"),
              "Ran" if not self.settings.BATCH_DRY else 'Would have run',
              self.tests_run, (end_time - start_time)))
         return True
     else:
         return self.run_test(self.settings, self.settings.DATA_DIR, True)
Ejemplo n.º 12
0
    def expand_argsets(self,
                       batch,
                       argsets,
                       batch_time,
                       batch_name,
                       print_status=True,
                       no_shuffle=False):

        sets = itertools.product(*argsets)
        if self.settings.BATCH_SHUFFLE and not no_shuffle:
            sets = list(sets)
            random.shuffle(sets)

        for argset in sets:
            rep = argset[-1]
            argset = argset[:-1]
            settings = self.settings.copy()
            if print_status:
                logger.info(" args:%s rep:%02d%s", ",".join(argset), rep,
                            " (dry run)" if settings.BATCH_DRY else "")
            settings.FORMAT = 'null'
            settings.BATCH_NAME = batch_name
            settings.BATCH_TIME = batch_time
            settings.TIME = datetime.utcnow()

            expand_vars = {
                'repetition':
                "%02d" % rep,
                'batch_time':
                format_date(settings.BATCH_TIME, fmt="%Y-%m-%dT%H%M%S")
            }

            for arg in argset:
                if arg not in self.args:
                    raise RuntimeError("Invalid arg: '%s'." % arg)
                expand_vars.update(self.args[arg])

            b = self.apply_args(batch, expand_vars, settings)

            if 'test_name' not in b:
                raise RuntimeError("Missing test name.")

            settings.load_rcvalues(b.items(), override=True)
            settings.NAME = b['test_name']
            settings.load_test(informational=True)
            settings.DATA_FILENAME = self.gen_filename(settings, b, argset,
                                                       rep)

            yield b, settings
Ejemplo n.º 13
0
    def expand_argsets(self,
                       batch,
                       argsets,
                       batch_time,
                       batch_name,
                       print_status=True):

        for argset in itertools.product(*argsets):
            rep = argset[-1]
            argset = argset[:-1]
            settings = self.settings.copy()
            if print_status:
                sys.stderr.write(" args:%s rep:%02d" % (",".join(argset), rep))
                if settings.BATCH_DRY:
                    sys.stderr.write(" (dry run)")
                sys.stderr.write(".\n")
            settings.FORMAT = 'null'
            settings.BATCH_NAME = batch_name
            settings.BATCH_TIME = batch_time
            settings.TIME = datetime.utcnow()

            expand_vars = {
                'repetition':
                "%02d" % rep,
                'batch_time':
                format_date(settings.BATCH_TIME, fmt="%Y-%m-%dT%H%M%S")
            }

            for arg in argset:
                if not arg in self.args:
                    raise RuntimeError("Invalid arg: '%s'." % arg)
                expand_vars.update(self.args[arg])

            b = self.apply_args(batch, expand_vars, settings)

            if not 'test_name' in b:
                raise RuntimeError("Missing test name.")

            settings.load_rcvalues(b.items(), override=True)
            settings.NAME = b['test_name']
            settings.load_test(informational=settings.BATCH_DRY)
            settings.DATA_FILENAME = self.gen_filename(settings, b, argset,
                                                       rep)

            yield b, settings
Ejemplo n.º 14
0
 def save_intermediate(self, new_results, config, orig_meta):
     orig_meta = orig_meta.copy()
     del orig_meta['TITLE']
     if self.save_dir:
         t = datetime.utcnow()
         series = config['series']
         # Can't serialise 'source' Glob objects
         for s in series:
             if 'source' in s:
                 del s['source']
         for i, r in enumerate(new_results):
             r.meta().update(orig_meta)
             r.meta("FROM_COMBINER", self.__class__.__name__)
             r.meta("COMBINER_SERIES", series)
             r.meta("COMBINER_PLOT", config['plot_name'])
             r._filename = "%s-%s-%s-%02d%s" % (
                 config['plot_name'], self.__class__.__name__,
                 format_date(t).replace(":", ""), i, r.SUFFIX)
             r.dump_dir(self.save_dir)
Ejemplo n.º 15
0
    def expand_argsets(self, batch, argsets, batch_time, batch_name,
                       print_status=True, no_shuffle=False):

        sets = itertools.product(*argsets)
        if self.settings.BATCH_SHUFFLE and not no_shuffle:
            sets = list(sets)
            random.shuffle(sets)

        for argset in sets:
            rep = argset[-1]
            argset = argset[:-1]
            settings = self.settings.copy()
            if print_status:
                logger.info(" args:%s rep:%02d%s", ",".join(argset), rep,
                            " (dry run)" if settings.BATCH_DRY else "")
            settings.FORMAT = 'null'
            settings.BATCH_NAME = batch_name
            settings.BATCH_TIME = batch_time
            settings.TIME = datetime.utcnow()

            expand_vars = {'repetition': "%02d" % rep,
                           'batch_time': format_date(settings.BATCH_TIME,
                                                     fmt="%Y-%m-%dT%H%M%S")}

            for arg in argset:
                if arg not in self.args:
                    raise RuntimeError("Invalid arg: '%s'." % arg)
                expand_vars.update(self.args[arg])

            b = self.apply_args(batch, expand_vars, settings)

            if 'test_name' not in b:
                raise RuntimeError("Missing test name.")

            settings.load_rcvalues(b.items(), override=True)
            settings.NAME = b['test_name']
            settings.load_test(informational=True)
            settings.DATA_FILENAME = self.gen_filename(settings, b, argset, rep)

            yield b, settings
Ejemplo n.º 16
0
 def save_intermediate(self, new_results, config, orig_meta):
     orig_meta = orig_meta.copy()
     del orig_meta['TITLE']
     if self.save_dir:
         t = datetime.utcnow()
         series = config['series']
         # Can't serialise 'source' Glob objects
         for s in series:
             if 'source' in s:
                 del s['source']
         for i, r in enumerate(new_results):
             r.meta().update(orig_meta)
             r.meta("FROM_COMBINER", self.__class__.__name__)
             r.meta("COMBINER_SERIES", series)
             r.meta("COMBINER_PLOT", config['plot_name'])
             r._filename = "%s-%s-%s-%02d%s" % (
                 config['plot_name'],
                 self.__class__.__name__,
                 format_date(t).replace(":", ""),
                 i,
                 r.SUFFIX)
             r.dump_dir(self.save_dir)
Ejemplo n.º 17
0
    def expand_argsets(self, batch, argsets, batch_time, batch_name,
                       print_status=True):

        for argset in itertools.product(*argsets):
            rep = argset[-1]
            argset = argset[:-1]
            settings = self.settings.copy()
            if print_status:
                sys.stderr.write(" args:%s rep:%02d" % (",".join(argset), rep))
                if settings.BATCH_DRY:
                    sys.stderr.write(" (dry run)")
                sys.stderr.write(".\n")
            settings.FORMAT = 'null'
            settings.BATCH_NAME = batch_name
            settings.BATCH_TIME = batch_time
            settings.TIME = datetime.utcnow()

            expand_vars = {'repetition': "%02d" % rep,
                           'batch_time': format_date(settings.BATCH_TIME,
                                                     fmt="%Y-%m-%dT%H%M%S")}

            for arg in argset:
                if arg not in self.args:
                    raise RuntimeError("Invalid arg: '%s'." % arg)
                expand_vars.update(self.args[arg])

            b = self.apply_args(batch, expand_vars, settings)

            if 'test_name' not in b:
                raise RuntimeError("Missing test name.")

            settings.load_rcvalues(b.items(), override=True)
            settings.NAME = b['test_name']
            settings.load_test(informational=settings.BATCH_DRY)
            settings.DATA_FILENAME = self.gen_filename(settings, b, argset, rep)

            yield b, settings
Ejemplo n.º 18
0
 def serialise_metadata(self):
     metadata = self.metadata.copy()
     for t in TIME_SETTINGS:
         if t in metadata and metadata[t] is not None:
             metadata[t] = format_date(metadata[t], utc=True)
     return metadata
Ejemplo n.º 19
0
 def label(self):
     return self._label or self.metadata["TITLE"] \
         or format_date(self.metadata["TIME"])
Ejemplo n.º 20
0
 def serialise_metadata(self):
     metadata = self.metadata.copy()
     for t in TIME_SETTINGS:
         if t in metadata and metadata[t] is not None:
             metadata[t] = format_date(metadata[t], utc=True)
     return metadata
Ejemplo n.º 21
0
 def label(self):
     return self._label or self.metadata["TITLE"] \
         or format_date(self.metadata["TIME"])