Exemple #1
0
    def retrieve_bookkeeping_for_ecosystem_package(self, ecosystem, package):
        """Retrieve BookKeeping data for given Package and Ecosystem.

        :param ecosystem: ecosystem for which the data should be retrieved
        :param package: package for which the data should be retrieved
        """
        e = Ecosystem.by_name(self.db, ecosystem)
        p = Package.by_name(self.db, package)

        stat = self.db.query(PackageWorkerResult).\
            join(PackageAnalysis).\
            filter(PackageAnalysis.package == p)
        worker_stats = []
        for package_worker_result in stat.all():
            entry = {"worker_name": package_worker_result.worker,
                     "has_error": package_worker_result.error,
                     "task_result": package_worker_result.task_result,
                     "started_at": package_worker_result.started_at,
                     "ended_at": package_worker_result.ended_at}
            worker_stats.append(entry)

        version_count = self.db.query(Version).join(Package).\
            filter(Package.ecosystem == e).\
            filter(Version.package == p).count()
        p_versions = self.db.query(Version).join(Package).join(Ecosystem).\
            filter(Package.ecosystem == e).\
            filter(Version.package == p)

        return {"ecosystem": e.name,
                "package": p.name,
                "package_version_count": version_count,
                "package_level_workers": worker_stats,
                "analysed_versions": [v.identifier for v in p_versions]}
Exemple #2
0
    def retrieve_bookkeeping_for_epv(self, ecosystem, package, version):
        """Retrieve BookKeeping data for the given ecosystem, package, and version.

        :param ecosystem: ecosystem for which the data should be retrieved
        :param package: package for which the data should be retrieved
        :param version: package version for which the data should be retrieved
        """
        e = Ecosystem.by_name(self.db, ecosystem)
        p = Package.by_name(self.db, package)
        v = self.db.query(Version).join(Package).join(Ecosystem). \
            filter(Package.ecosystem == e). \
            filter(Version.package == p). \
            filter(Version.identifier == version).one()

        stat = self.db.query(WorkerResult).\
            join(Analysis).join(Version).\
            filter(Analysis.version == v)
        worker_stats = []
        for worker_result in stat.all():
            entry = {"worker_name": worker_result.worker,
                     "has_error": worker_result.error,
                     "task_result": worker_result.task_result,
                     "started_at": worker_result.started_at,
                     "ended_at": worker_result.ended_at}
            worker_stats.append(entry)

        return {"ecosystem": e.name,
                "package": p.name,
                "version": v.identifier,
                "workers": worker_stats}
def retrieve_bookkeeping_for_ecosystem_package(ecosystem, package):
    """Retrieve BookKeeping data for given Package and Ecosystem.

    :param ecosystem: ecosystem for which the data should be retrieved
    :param package: package for which the data should be retrieved
    """
    rdb = StoragePool.get_connected_storage('BayesianPostgres')
    db = rdb.session

    try:
        e = Ecosystem.by_name(db, ecosystem)
        p = Package.by_name(db, package)

        version_count = _count(
            db,
            db.query(Version).join(Package).filter(
                Package.ecosystem == e).filter(Version.package == p))

        stat = db.query(PackageWorkerResult.worker, PackageWorkerResult.error,
                        PackageWorkerResult.task_result).join(PackageAnalysis). \
            filter(PackageAnalysis.package == p). \
            all()

        worker_stats = []
        for worker_name, has_error, task_result in stat:
            entry = {
                "worker_name": worker_name,
                "has_error": has_error,
                "task_result": task_result
            }
            worker_stats.append(entry)

        p_versions = db.query(Version).join(Package).join(Ecosystem). \
            filter(Package.ecosystem == e). \
            filter(Version.package == p)

        result = {
            "summary": {
                "ecosystem": e.name,
                "package": p.name,
                "package_version_count": version_count,
                "package_level_workers": worker_stats,
                "analysed_versions": [v.identifier for v in p_versions]
            }
        }
    except NoResultFound as e:
        result = {"error": "No such package: %s/%s" % (ecosystem, package)}
    except SQLAlchemyError as e:
        result = {
            "error":
            "Error encountered while fetching data. Please check logs."
        }
    return result
def retrieve_bookkeeping_for_epv(ecosystem, package, version):
    """Retrieve BookKeeping data for the given ecosystem, package, and version.

    :param ecosystem: ecosystem for which the data should be retrieved
    :param package: package for which the data should be retrieved
    :param version: package version for which the data should be retrieved
    """
    rdb = StoragePool.get_connected_storage('BayesianPostgres')
    db = rdb.session
    try:
        e = Ecosystem.by_name(db, ecosystem)
        p = Package.by_name(db, package)
        v = db.query(Version).join(Package).join(Ecosystem). \
            filter(Package.ecosystem == e). \
            filter(Version.package == p). \
            filter(Version.identifier == version).one()

        stat = db.query(WorkerResult.worker, WorkerResult.error, WorkerResult.task_result). \
            join(Analysis).join(Version). \
            filter(Analysis.version == v).all()

        worker_stats = []
        for worker_name, has_error, task_result in stat:
            entry = {
                "worker_name": worker_name,
                "has_error": has_error,
                "task_result": task_result
            }
            worker_stats.append(entry)

        result = {
            "summary": {
                "ecosystem": e.name,
                "package": p.name,
                "version": v.identifier,
                "workers": worker_stats
            }
        }
    except NoResultFound as e:
        return {
            "error":
            "No such version: %s/%s/%s" % (ecosystem, package, version)
        }
    except SQLAlchemyError as e:
        result = {
            "error":
            "Error encountered while fetching data. Please check logs."
        }
    return result