Example #1
0
    def execute(self, arguments):
        """Task code.

        :param arguments: dictionary with task arguments
        :return: {}, results
        """
        result_data = {'status': 'unknown', 'summary': [], 'details': {}}
        # For testing purposes, a repo may be specified at task creation time
        if self._repo_name is None:
            # Otherwise, get the repo name from earlier Mercator scan results
            self._repo_name = self._get_repo_name(arguments['url'])
            if self._repo_name is None:
                # Not a GitHub hosted project
                return result_data

        repo_url = urljoin(self.configuration.GITHUB_API + "repos/",
                           self._repo_name)
        try:
            repo = get_response(repo_url)
            if not repo:
                raise NotABugFatalTaskError(
                    'Page not found on {}'.format(repo_url))
        except NotABugTaskError as e:
            self.log.error(e)
            raise NotABugFatalTaskError from e

        result_data['status'] = 'success'

        issues = {}
        # Get Repo Statistics
        notoriety = self._get_repo_stats(repo)

        if notoriety:
            issues.update(notoriety)
        issues['topics'] = repo.get('topics', [])
        issues['license'] = repo.get('license') or {}

        # Get Commit Statistics
        last_year_commits = self._get_last_years_commits(repo['url'])
        commits = {
            'last_year_commits': {
                'sum': sum(last_year_commits),
                'weekly': last_year_commits
            }
        }
        t_stamp = datetime.datetime.utcnow()
        refreshed_on = {'updated_on': t_stamp.strftime("%Y-%m-%d %H:%M:%S")}
        issues.update(refreshed_on)
        issues.update(commits)

        # Get PR/Issue details for previous Month and Year
        gh_pr_issue_details = get_gh_pr_issue_counts(repo['full_name'])
        issues.update(gh_pr_issue_details)

        result_data['details'] = issues
        return result_data
Example #2
0
    def execute(self, arguments):
        """Task code.

        :param arguments: dictionary with task arguments
        :return: {}, results
        """
        result_data = {'status': 'unknown', 'summary': [], 'details': {}}

        if arguments['ecosystem'] == 'golang':
            go_obj = GolangUtils(arguments.get('name'))
            url = go_obj.get_gh_link()

            if url:
                arguments['url'] = url
            else:
                return result_data

        # For testing purposes, a repo may be specified at task creation time
        if self._repo_name is None:
            # Otherwise, get the repo name from URL
            self._repo_name = self._get_repo_name(arguments['url'])
            if self._repo_name is None:
                # Not a GitHub hosted project
                return result_data

        repo_url = urljoin(self.configuration.GITHUB_API + "repos/",
                           self._repo_name)
        repo = {}
        try:
            repo = get_response(repo_url)
            if not repo:
                raise NotABugFatalTaskError(
                    'Page not found on {}'.format(repo_url))
        except NotABugTaskError as e:
            logger.error(e)

        result_data['status'] = 'success'

        issues = {}
        # Get Repo Statistics
        notoriety = self._get_repo_stats(repo)

        if notoriety:
            issues.update(notoriety)
        issues['topics'] = repo.get('topics', [])
        issues['license'] = repo.get('license') or {}

        # Get Commit Statistics
        last_year_commits = self._get_last_years_commits(repo.get('url', ''))
        commits = {
            'last_year_commits': {
                'sum': sum(last_year_commits),
                'weekly': last_year_commits
            }
        }

        t_stamp = datetime.datetime.utcnow()
        refreshed_on = {'updated_on': t_stamp.strftime("%Y-%m-%d %H:%M:%S")}
        issues.update(refreshed_on)
        issues.update(commits)

        # Get PR/Issue details for previous Month and Year
        gh_pr_issue_details = get_gh_pr_issue_counts(self._repo_name)

        issues.update(gh_pr_issue_details)
        result_data['details'] = issues

        # Store github details for being used in Data-Importer
        store_data_to_s3(arguments,
                         StoragePool.get_connected_storage('S3GitHub'),
                         result_data)

        return result_data