コード例 #1
0
    def report(self):
        """Generate JSON-encoded representation of the data collected."""

        # The output directory for the JSON-encoded report data
        data_output_dir = os.path.join(self.output_dir, 'data')
        data_src_output_dir = os.path.join(data_output_dir, 'src')

        try:
            self.info('generate JSON-encoded report')

            # Create directory structure if needed
            if not os.path.exists(self.output_dir):
                os.makedirs(self.output_dir)
            else:
                self.log.warn('%s: already exists', self.output_dir)
                self.log.warn('existing report may be overriden')

            # Copy the generic web application files
            for entry in os.listdir(self.webapp_dir):
                path = os.path.join(self.webapp_dir, entry)
                dest = os.path.join(self.output_dir, entry)
                if os.path.isdir(path):
                    self.log.debug('rm -r "%s"', dest)
                    if os.path.isdir(dest):
                        rmtree(dest)
                    self.log.debug('cp -r "%s" "%s"', path, dest)
                    copytree(path, dest)
                else:
                    self.log.debug('cp "%s" "%s"', path, dest)
                    copy2(path, dest)

            # Create the JSON-encoded report output directory
            for directory in (data_output_dir, data_src_output_dir):
                if not os.path.exists(directory):
                    os.makedirs(directory)

            # The report builder initially starts empty. The more sources
            # processed, the more complete the report.
            report = ReportBuilder()

            # Generate the JSON-representation of each source of the project.
            for count, source in enumerate(report.iter_sources(), start=1):
                dest = '{}.json'.format(
                    os.path.join(data_src_output_dir, source.filename))
                source.save_as(dest)
                self.log.debug('%s: saved as %s', source.filename, dest)
                Console.progress(count, report.index.source_file_count, False)

            # Generate the JSON-encoded report for message navigation.
            dest = os.path.join(data_output_dir, 'message.json')
            report.index.message_to_json(dest)
            self.log.debug('message index saved as %s', dest)
            self.verbose_info('HTML report message generated in ' + dest)

            # Generate the JSON-encoded report for filter panel.
            dest = os.path.join(data_output_dir, 'filter.json')
            report.index.filter_to_json(dest)
            self.log.debug('filter index saved as %s', dest)
            self.verbose_info('HTML report filter generated in ' + dest)

            # Generate the JSON-encoded report for code navigation.
            dest = os.path.join(data_output_dir, 'code.json')
            report.index.code_to_json(dest)
            self.log.debug('code index saved as %s', dest)
            self.verbose_info('HTML report code generated in ' + dest)

            # Generate the JSON-encoded report for custom review status.
            dest = os.path.join(data_output_dir, 'custom_status.json')
            report.index.custom_review_to_json(dest)
            self.log.debug('custom review status saved as %s', dest)
            self.verbose_info(
                'HTML report custom review status generated in ' + dest)

            codepeer_obj_dir = os.path.join(GNAThub.Project.object_dir(),
                                            'codepeer')
            if os.path.isdir(codepeer_obj_dir):
                # Call to codepeer_bridge for offline mode
                self.log.debug("Export info from codepeer_bridge")
                dest = os.path.join(GNAThub.Project.object_dir(), 'gnathub',
                                    'html-report', 'data',
                                    'codepeer_review.xml')
                name = 'codepeer_bridge'
                cmd = [
                    'codepeer_bridge', '--output-dir=' + GNAThub.output_dir(),
                    '--db-dir=' + GNAThub.db_dir(), '--export-reviews=' + dest
                ]
                self.log.debug('Codepeer_bridge file generated in %s', dest)
                self.verbose_info('Codepeer_bridge file generated in ' + dest)
                GNAThub.Run(name, cmd)

                # Get codepeer_run file
                copy_file = os.path.join(GNAThub.Project.object_dir(),
                                         'codepeer', 'codepeer_run')
                dest = os.path.join(GNAThub.Project.object_dir(), 'gnathub',
                                    'html-report', 'data')
                copy2(copy_file, dest)
                self.log.debug('Codepeer_run file copied in %s', dest)
                self.verbose_info('Codepeer_run file copied in ' + dest)

                # Get race_condition file
                copy_file = os.path.join(
                    GNAThub.Project.object_dir(), 'codepeer',
                    GNAThub.Project.name().lower() + '.output',
                    'race_conditions.xml')
                if os.path.isfile(copy_file):
                    dest = os.path.join(GNAThub.Project.object_dir(),
                                        'gnathub', 'html-report', 'data')
                    copy2(copy_file, dest)
                    self.log.debug('%s file copied in %s', copy_file, dest)
                    self.verbose_info(copy_file + ' file copied in ' + dest)

        except Exception as why:
            self.log.exception('failed to generate the HTML report')
            self.error(str(why))
            return GNAThub.EXEC_FAILURE
        except IOError as why:
            self.log.exception('failed to generate the HTML report')
            self.error(str(why))
            return GNAThub.EXEC_FAILURE

        else:
            return GNAThub.EXEC_SUCCESS
コード例 #2
0
ファイル: server.py プロジェクト: vser1/gnatdashboard
import os
import subprocess
import re
import json

# To hide server banner, and so production warning.
import sys
cli = sys.modules['flask.cli']
cli.show_server_banner = lambda *x: None

# GLOBAL VARIABLE
# The repository where .json files are supposed to be located
SERVER_DIR_PATH = GNAThub.html_data()

OUTPUT_DIR = GNAThub.output_dir()
DB_DIR = GNAThub.db_dir()
OBJECT_DIR = GNAThub.Project.object_dir()
PROJECT_PATH = GNAThub.Project.path()
CODEPEER_OBJ_DIR = os.path.join(GNAThub.Project.object_dir(), 'codepeer')

# The info for the logs
GNATHUB_LOG = GNAThub.logs()
SERVER_LOG = os.path.join(GNATHUB_LOG, "webui_server.log")

STATIC_FOLDER = os.environ.get('WEBUI_HTML_FOLDER')
DEFAULT_PORT = 8080

# Create logging handlers
dictConfig({
    'version': 1,
    'formatters': {