Exemplo n.º 1
0
def cli(
    repository: Optional[str],
    organization: Optional[str],
    create_knowledge: bool,
    process_knowledge: bool,
    is_local: bool,
    entities: Optional[str],
    visualize_statistics: bool,
    reviewer_reccomender: bool,
    knowledge_path: str,
    thoth: bool,
    metrics: bool,
    merge: bool,
):
    """Command Line Interface for SrcOpsMetrics."""
    os.environ["IS_LOCAL"] = "True" if is_local else "False"
    os.environ[StoragePath.LOCATION_VAR.value] = knowledge_path

    repos = []

    if repository:
        for rep in repository.split(","):
            repos.extend(GitHubKnowledge.get_repositories(repository=rep.strip()))
    if organization:
        repos.extend(GitHubKnowledge.get_repositories(organization=organization))

    entities_args = get_entities_as_list(entities)

    if create_knowledge:
        tupled_repos = [(lambda x: (x[0], x[1]))(repo.split("/")) for repo in repos]
        analyse_projects(projects=tupled_repos, is_local=is_local, entities=entities_args)

    for project in repos:
        os.environ["PROJECT"] = project

    if thoth:
        if repository and not merge:
            kebechet_metrics = KebechetMetrics(repository=repos[0], today=True, is_local=is_local)
            kebechet_metrics.evaluate_and_store_kebechet_metrics()

        if metrics:
            repo_metrics = Metrics(repository=repos[0], visualize=visualize_statistics)

            repo_metrics.get_metrics_outliers_pull_requests()
            repo_metrics.get_metrics_outliers_issues()

            scores = repo_metrics.evaluate_scores_for_pull_requests()

            path = Path(f"./srcopsmetrics/metrics/{repos[0]}/pr_scores.json")
            KnowledgeStorage(is_local=is_local).save_knowledge(file_path=path, data=scores)

            scores_issues = repo_metrics.evaluate_scores_for_issues()
            path = Path(f"./srcopsmetrics/metrics/{repos[0]}/issue_scores.json")
            KnowledgeStorage(is_local=is_local).save_knowledge(file_path=path, data=scores_issues)

    if merge:
        if thoth:
            KebechetMetrics.merge_kebechet_metrics_today(is_local=is_local)
        else:
            raise NotImplementedError
Exemplo n.º 2
0
Arquivo: cli.py Projeto: fridex/mi
def cli(
    repository: Optional[str],
    organization: Optional[str],
    create_knowledge: bool,
    process_knowledge: bool,
    is_local: bool,
    entities: Optional[List[str]],
    visualize_statistics: bool,
    reviewer_reccomender: bool,
):
    """Command Line Interface for SrcOpsMetrics."""
    os.environ['IS_LOCAL'] = 'True' if is_local else 'False'

    repos = GitHubKnowledge.get_repositories(repository=repository,
                                             organization=organization)

    if create_knowledge:
        analyse_projects(projects=[repo.split("/") for repo in repos],
                         is_local=is_local,
                         entities=entities)

        for repo in repos:
            remove_previously_processed(repo)

    for project in repos:
        os.environ['PROJECT'] = project

        if process_knowledge:
            remove_previously_processed(project)
            issues = KnowledgeStorage(
                is_local=is_local).load_previous_knowledge(
                    project_name=project,
                    knowledge_type=EntityTypeEnum.ISSUE.value)
            prs = KnowledgeStorage(is_local=is_local).load_previous_knowledge(
                project_name=project,
                knowledge_type=EntityTypeEnum.PULL_REQUEST.value)
            Processing(issues=issues, pull_requests=prs).regenerate()

        if visualize_statistics:
            visualize_project_results(project=project, is_local=is_local)

        if reviewer_reccomender:
            reviewer_assigner = ReviewerAssigner()
            reviewer_assigner.evaluate_reviewers_scores(project=project,
                                                        is_local=is_local)

    if visualize_statistics and repository is not None:
        visualize_project_results(project=repository, is_local=is_local)
    elif visualize_statistics and organization is not None:
        # TODO
        raise NotImplementedError
Exemplo n.º 3
0
def cli(
    repository: Optional[str],
    organization: Optional[str],
    create_knowledge: bool,
    process_knowledge: bool,
    is_local: bool,
    entities: Optional[List[str]],
    visualize_statistics: bool,
    reviewer_reccomender: bool,
    knowledge_path: str,
):
    """Command Line Interface for SrcOpsMetrics."""
    os.environ["IS_LOCAL"] = "True" if is_local else "False"
    os.environ[StoragePath.LOCATION_VAR.value] = knowledge_path

    repos = GitHubKnowledge.get_repositories(repository=repository,
                                             organization=organization)

    if create_knowledge:
        tupled_repos = [(lambda x: (x[0], x[1]))(repo.split("/"))
                        for repo in repos]
        analyse_projects(projects=tupled_repos,
                         is_local=is_local,
                         entities=entities)

    for project in repos:
        os.environ["PROJECT"] = project

        if visualize_statistics:
            raise NotImplementedError
        if reviewer_reccomender:
            reviewer_assigner = ReviewerAssigner()
            reviewer_assigner.evaluate_reviewers_scores(project=project,
                                                        is_local=is_local)

    if visualize_statistics and repository is not None:
        raise NotImplementedError
    elif visualize_statistics and organization is not None:
        raise NotImplementedError
Exemplo n.º 4
0
import os
from importlib import import_module
from pathlib import Path
from pkgutil import iter_modules
from typing import List, Optional, Tuple

from srcopsmetrics.entities import Entity, NOT_FOR_INSPECTION
from srcopsmetrics.exceptions import NotKnownEntities
from srcopsmetrics.github_knowledge import GitHubKnowledge
from srcopsmetrics import utils

import inspect

_LOGGER = logging.getLogger(__name__)

github_knowledge = GitHubKnowledge()


def _get_all_entities():
    """Return all of the currently implemented entities."""
    entities_classes = []

    for pkg in iter_modules([os.path.abspath("./srcopsmetrics/entities/")]):
        if pkg.name in NOT_FOR_INSPECTION:
            continue

        module = import_module(f"srcopsmetrics.entities.{pkg.name}")
        for name, klazz in inspect.getmembers(module, inspect.isclass):
            if name != "Entity" and issubclass(klazz, Entity):
                entities_classes.append(klazz)