Exemple #1
0
    def mainloop(self):
        """Plugin main loop."""
        LOG.info('registered %d plugins', len(self.plugins))
        backlog = []

        # Early exit if no plug-in are scheduled to be run
        if not self.plugins:
            self.info('nothing to do')
            return

        # Execute each plug-in in order
        try:
            for cls in self.plugins:
                try:
                    # Create a new instance
                    plugin, elapsed = cls(), None

                    # Execute the plug-in
                    elapsed = self.execute(plugin)
                except KeyboardInterrupt:
                    raise
                except Exception as why:
                    LOG.exception('plug-in execution failed')
                    self.error('%s: unexpected error: %s', plugin.name, why)
                finally:
                    if plugin.exec_status != GNAThub.NOT_EXECUTED:
                        # A plugin could not have been executed depending on
                        # the command line (--runners-only/--reporters-only).
                        backlog.append((plugin.name, {
                            'time':
                            elapsed or 0,
                            'success':
                            (plugin.exec_status == GNAThub.EXEC_SUCCESS)
                        }))
        except KeyboardInterrupt:
            self.info(os.linesep + 'Interrupt caught...')

        # Write results to file
        fname = os.path.join(GNAThub.root(), 'gnathub.backlog')
        try:
            with open(fname, 'w') as fd:
                fd.write(json.dumps(backlog))
        except IOError as why:
            LOG.exception('could not write result file %s', fname)
            self.error('%s: unexpected error: %s', fname, why)

        if not GNAThub.dry_run() and not GNAThub.quiet():
            # Display a summary
            for plugin, results in backlog:
                if results['success']:
                    Console.ok(plugin)
                else:
                    Console.ko(plugin)
    def mainloop(self):
        """Plugin main loop."""
        LOG.info('registered %d plugins', len(self.plugins))
        backlog = []

        # Early exit if no plug-in are scheduled to be run
        if not self.plugins:
            self.info('nothing to do')
            return

        # Execute each plug-in in order
        try:
            for cls in self.plugins:
                try:
                    # Create a new instance
                    plugin, elapsed = cls(), None

                    # Execute the plug-in
                    elapsed = self.execute(plugin)
                except KeyboardInterrupt:
                    raise
                except Exception as why:
                    LOG.exception('plug-in execution failed')
                    self.error('%s: unexpected error: %s', plugin.name, why)
                finally:
                    if plugin.exec_status != GNAThub.NOT_EXECUTED:
                        # A plugin could not have been executed depending on
                        # the command line (--runners-only/--reporters-only).
                        backlog.append((plugin.name, {
                            'time': elapsed or 0,
                            'success': (
                                plugin.exec_status == GNAThub.EXEC_SUCCESS)
                        }))
        except KeyboardInterrupt:
            self.info(os.linesep + 'Interrupt caught...')

        # Write results to file
        fname = os.path.join(GNAThub.root(), 'gnathub.backlog')
        try:
            with open(fname, 'w') as fd:
                fd.write(json.dumps(backlog))
        except IOError as why:
            LOG.exception('could not write result file %s', fname)
            self.error('%s: unexpected error: %s', fname, why)

        if not GNAThub.dry_run() and not GNAThub.quiet():
            # Display a summary
            for plugin, results in backlog:
                if results['success']:
                    Console.ok(plugin)
                else:
                    Console.ko(plugin)
    def execute(cls, plugin):
        """Execute the plugin.

        Call methods setup, execute and teardown for a plugin instance.

        :param GNAThub.Plugin plugin: instance of the plugin to execute
        :return: the execution time in seconds
        :rtype: int
        """
        elapsed = 0

        if cls.should_execute(plugin):
            cls.info('execute plug-in %s', plugin.name)
            if GNAThub.dry_run():
                # Early exit if dry-run mode is enabled
                plugin.exec_status = GNAThub.EXEC_SUCCESS
                return 0

            LOG.info('%s: set up environment', plugin.name)
            start = time.time()
            plugin.setup()

            if cls.execute_runners() and cls.is_runner(plugin):
                LOG.info('%s: produce results', plugin.name)
                plugin.exec_status = plugin.run()

            if (cls.execute_reporters() and cls.is_reporter(plugin) and
                    plugin.exec_status in (
                        GNAThub.EXEC_SUCCESS, GNAThub.NOT_EXECUTED)):
                LOG.info('%s: collect results', plugin.name)
                plugin.exec_status = plugin.report()

            LOG.info('%s: post execution', plugin.name)
            plugin.teardown()
            elapsed = time.time() - start

        if plugin.exec_status == GNAThub.EXEC_SUCCESS:
            plugin.info('completed (in %d seconds)' % elapsed)
        elif plugin.exec_status == GNAThub.EXEC_FAILURE:
            plugin.error('execution failed')
        else:
            assert plugin.exec_status == GNAThub.NOT_EXECUTED
            plugin.info('not executed')
        return elapsed
Exemple #4
0
    def execute(cls, plugin):
        """Execute the plugin.

        Call methods setup, execute and teardown for a plugin instance.

        :param GNAThub.Plugin plugin: instance of the plugin to execute
        :return: the execution time in seconds
        :rtype: int
        """
        elapsed = 0

        if cls.should_execute(plugin):
            cls.info('execute plug-in %s', plugin.name)
            if GNAThub.dry_run():
                # Early exit if dry-run mode is enabled
                plugin.exec_status = GNAThub.EXEC_SUCCESS
                return 0

            LOG.info('%s: set up environment', plugin.name)
            start = time.time()
            plugin.setup()

            if cls.execute_runners() and cls.is_runner(plugin):
                LOG.info('%s: produce results', plugin.name)
                plugin.exec_status = plugin.run()

            if (cls.execute_reporters() and cls.is_reporter(plugin)
                    and plugin.exec_status
                    in (GNAThub.EXEC_SUCCESS, GNAThub.NOT_EXECUTED)):
                LOG.info('%s: collect results', plugin.name)
                plugin.exec_status = plugin.report()

            LOG.info('%s: post execution', plugin.name)
            plugin.teardown()
            elapsed = time.time() - start

        if plugin.exec_status == GNAThub.EXEC_SUCCESS:
            plugin.info('completed (in %d seconds)' % elapsed)
        elif plugin.exec_status == GNAThub.EXEC_FAILURE:
            plugin.error('execution failed')
        else:
            assert plugin.exec_status == GNAThub.NOT_EXECUTED
            plugin.info('not executed')
        return elapsed
Exemple #5
0
    :returns: str

    """

    return os.path.relpath(path, BASEDIR)


assertTrue(os.path.isdir(GNAThub.root()))
assertEqual(relpath(GNAThub.root()), os.path.join('obj', 'gnathub'))

assertTrue(os.path.isdir(GNAThub.logs()))
assertEqual(relpath(GNAThub.logs()), os.path.join('obj', 'gnathub', 'logs'))

assertTrue(GNAThub.quiet())
assertFalse(GNAThub.verbose())
assertFalse(GNAThub.dry_run())
assertTrue(GNAThub.runners_only())
assertFalse(GNAThub.reporters_only())

assertTrue(os.path.isfile(GNAThub.database()))
assertEqual(
    relpath(GNAThub.database()),
    os.path.join('obj', 'gnathub', 'gnathub.db')
)

# Default for jobs number is 0
assertEqual(GNAThub.jobs(), 0)

# The plugin list is expected to be empty
assertEqual(len(GNAThub.plugins()), 0)