コード例 #1
0
ファイル: buildreport.py プロジェクト: slickqa/slickqaweb
def get_build_reports(project_name, release_name):
    """Get all summary of all the builds for a particular release."""
    limit = 15
    if request.args.get("limit"):
        try:
            limit = int(request.args.get("limit"))
        except:
            pass
    groupType = "SERIAL"
    if request.args.get("groupType"):
        groupType = request.args.get("groupType")
    project_id, release_id, build_id = Project.lookup_project_release_build_ids(project_name, release_name, None, get_all_builds=True, limit=limit)
    report = {}
    report['name'] = "Release Report for {} {}".format(project_name, release_name)
    report['builds'] = []
    report['grouptype'] = groupType
    if build_id is None:
        return JsonResponse({})
    for build_object in build_id:
        testrun_group = TestrunGroup()
        testrun_group.name = "Build Report for {} {} Build {}".format(project_name, release_name, build_object['name'])
        testrun_group.grouptype = groupType
        testrun_group.testruns = Testrun.objects(build__buildId=build_object['id']).order_by("-dateCreated")
        report['builds'].append(testrun_group)
    return JsonResponse(report)
コード例 #2
0
ファイル: buildreport.py プロジェクト: slickqa/slickqaweb
def cancel_results_for_build(project_name, release_name, build_name):
    """Cancel all results that are scheduled for this build."""
    project_id, release_id, build_id = Project.lookup_project_release_build_ids(project_name, release_name, build_name)

    canceled_results = []
    if build_id is None:
        return JsonResponse(None)
    for testrun in Testrun.objects(build__buildId=build_id).order_by("-dateCreated"):
        results_to_cancel = Result.objects(testrun__testrunId=testrun.id, status='NO_RESULT', runstatus__in=['SCHEDULED', 'TO_BE_RUN'])
        canceled_results.extend(results_to_cancel)
        for result in results_to_cancel:
            cancel_individual_result(result.id)
    return JsonResponse(canceled_results)
コード例 #3
0
ファイル: buildreport.py プロジェクト: slickqa/slickqaweb
def reschedule_results_with_status_on_build(project_name, release_name, build_name, status):
    """Reschedule all results with a particular status for a build."""
    project_id, release_id, build_id = Project.lookup_project_release_build_ids(project_name, release_name, build_name)

    rescheduled_results = []
    if build_id is None:
        return JsonResponse(None)
    for testrun in Testrun.objects(build__buildId=build_id).order_by("-dateCreated"):
        results_to_reschedule = Result.objects(testrun__testrunId=testrun.id, status=status)
        rescheduled_results.extend(results_to_reschedule)
        for result in results_to_reschedule:
            reschedule_individual_result(result.id)
    return JsonResponse(rescheduled_results)
コード例 #4
0
ファイル: tpsreport.py プロジェクト: slickqa/slickqaweb
def get_tps_report(project_name, release_name, testplan_name):
    """Get all summary of all the testruns run against a particular build."""
    project_id, release_id, _ = Project.lookup_project_release_build_ids(project_name, release_name, None)
    testplan = TestPlan.objects(project__id=project_id, name=testplan_name)
    if len(testplan) > 0:
        testplan = testplan[0]
        report = TestrunGroup()
        report.name = "{} Summary for {}".format(testplan_name, release_name)
        report.grouptype = "SERIAL"
        report.testruns = []
        report.testruns.extend(Testrun.objects(project__id=project_id, release__releaseId=release_id, testplanId=testplan.id).order_by('-dateCreated').limit(50))
        report.testruns.reverse()

        return JsonResponse(report)
    else:
        return JsonResponse({})
コード例 #5
0
ファイル: buildreport.py プロジェクト: slickqa/slickqaweb
def get_build_report(project_name, release_name, build_name):
    """Get all summary of all the testruns run against a particular build."""
    project_id, release_id, build_id = Project.lookup_project_release_build_ids(project_name, release_name, build_name)

    report = TestrunGroup()
    report.name = "Build Report for {} {} Build {}".format(project_name, release_name, build_name)
    report.grouptype = "PARALLEL"
    report.testruns = []
    testplans = []
    for testrun in Testrun.objects(build__buildId=build_id).order_by("-dateCreated"):
        assert isinstance(testrun, Testrun)
        if testrun.testplanId not in testplans:
            report.testruns.append(testrun)
            testplans.append(testrun.testplanId)

    return JsonResponse(report)
コード例 #6
0
ファイル: pipeline.py プロジェクト: slickqa/slickqaweb
def add_pipeline():
    """Create a new pipeline."""
    project_name = None
    release_name = None
    build_name = None
    raw = read_request()
    new_pipeline = deserialize_that(raw, Pipeline())
    proj_id = None
    existing_pipeline = get_pipeline(new_pipeline.name)
    if existing_pipeline:
        new_pipeline = deserialize_that(raw, existing_pipeline)
    else:
        # resolve project, release and build, create if necessary
        if is_provided(new_pipeline, 'project'):
            project_name = new_pipeline.project.name
        if is_provided(new_pipeline, 'release'):
            release_name = new_pipeline.release.name
        if is_provided(new_pipeline, 'build'):
            build_name = new_pipeline.build.name

        if project_name is not None or release_name is not None or build_name is not None:
            # we have something to lookup / create
            proj_id, rel_id, bld_id = Project.lookup_project_release_build_ids(project_name, release_name, build_name,
                                                                               create_if_missing=True)
            if proj_id is not None:
                new_pipeline.project.id = proj_id
            if rel_id is not None:
                new_pipeline.release.releaseId = rel_id
            if bld_id is not None:
                new_pipeline.build.buildId = bld_id

    for ind, phase in enumerate(new_pipeline.phases):
        new_pipeline.phases[ind] = phase_check(new_pipeline.phases[ind])
    new_pipeline = pipeline_check(new_pipeline)
    new_pipeline.save()
    # add an event
    events.CreateEvent(new_pipeline)

    return JsonResponse(new_pipeline)
コード例 #7
0
ファイル: buildreport.py プロジェクト: slickqa/slickqaweb
def get_build_report(project_name, release_name, build_name):
    """Get all summary of all the testruns run against a particular build."""
    project_id, release_id, build_id = Project.lookup_project_release_build_ids(project_name, release_name, build_name)

    report = TestrunGroup()
    report.name = "Build Report for {} {} Build {}".format(project_name, release_name, build_name)
    report.grouptype = "PARALLEL"
    report.testruns = []
    testplans = []
    if build_id is None:
        return JsonResponse(None)
    for testrun in Testrun.objects(build__buildId=build_id).order_by("-dateCreated"):
        assert isinstance(testrun, Testrun)
        if testrun.testplanId not in testplans:
            report.testruns.append(testrun)
            testplans.append(testrun.testplanId)
    if report.state() == "FINISHED" and not report.finished:
        report.finished = datetime.datetime.utcnow()
        # report.save() Warning, be careful not to do this, build reports don't get saved
        # this will create a new testrungroup every time the build report is
        # queried
    return JsonResponse(report)
コード例 #8
0
ファイル: testrun.py プロジェクト: slickqa/slickqaweb
def add_testrun():
    """Create a new testrun."""
    project_name = None
    release_name = None
    build_name = None
    raw = read_request()
    new_tr = deserialize_that(raw, Testrun())
    proj_id = None

    # resolve project, release and build, create if necessary
    if is_provided(new_tr, 'project'):
        project_name = new_tr.project.name
    if is_provided(new_tr, 'release'):
        release_name = new_tr.release.name
    if is_provided(new_tr, 'build'):
        build_name = new_tr.build.name

    if project_name is not None or release_name is not None or build_name is not None:
        # we have something to lookup / create
        proj_id, rel_id, bld_id = Project.lookup_project_release_build_ids(project_name, release_name, build_name,
                                                                           create_if_missing=True)
        if proj_id is not None:
            new_tr.project.id = proj_id
        if rel_id is not None:
            new_tr.release.releaseId = rel_id
        if bld_id is not None:
            new_tr.build.buildId = bld_id

    # if testplanId not provided, but testplan object is, resolve creating if necessary
    if is_not_provided(new_tr, 'testplanId') and 'testplan' in raw:
        tplan = TestPlan()
        tplan = deserialize_that(raw['testplan'], tplan)
        """:type : TestPlan"""

        query = {'name': tplan.name}
        if proj_id is not None:
            query['project__id'] = proj_id
        existing_plan = TestPlan.objects(**query).first()
        if existing_plan is not None:
            new_tr.testplanId = existing_plan.id
        else:
            if proj_id is not None:
                tplan.project = ProjectReference()
                tplan.project.id = proj_id
                tplan.project.name = new_tr.project.name
                tplan.save()
                new_tr.testplanId = tplan.id

    if is_not_provided(new_tr, 'dateCreated'):
        new_tr.dateCreated = datetime.datetime.utcnow()
    if is_not_provided(new_tr, 'info') and is_provided(new_tr, 'build') and \
            is_provided(new_tr, 'project') and is_provided(new_tr, 'release'):
        project = get_project(new_tr.project.name)
        build = None
        if project is None:
            project = get_project(new_tr.project.id)
        if project is not None:
            release = get_release(project, new_tr.release.name)
            if release is None:
                release = get_release(project, new_tr.release.releaseId)
            if release is not None:
                build = get_build(release, new_tr.build.name)
                if build is None:
                    build = get_build(release, new_tr.build.buildId)
        if build is not None and is_provided(build, 'description'):
            new_tr.info = build.description

    new_tr.save()
    # add an event
    events.CreateEvent(new_tr)

    return JsonResponse(new_tr)
コード例 #9
0
ファイル: result.py プロジェクト: slickqa/slickqaweb
def get_single_scheduled_result(hostname):
    parameters = read_request()
    """:type : dict"""
    rawquery = {'runstatus': 'SCHEDULED',
                'status': 'NO_RESULT'}
    update = {'set__runstatus': 'TO_BE_RUN',
              'set__hostname': hostname}
    attr_query = dict(**parameters)
    if 'project' in attr_query:
        del attr_query['project']
    if 'release' in attr_query:
        del attr_query['release']
    if 'build' in attr_query:
        del attr_query['build']
    if 'provides' in attr_query:
        del attr_query['provides']
    for key, value in list(attr_query.items()):
        rawquery["attributes.{}".format(key)] = value

    project_id, release_id, build_id = Project.lookup_project_release_build_ids(parameters.get('project', None),
                                                                                parameters.get('release', None),
                                                                                parameters.get('build', None))
    if project_id is not None:
        rawquery['project.id'] = project_id
    else:
        rawquery['project.name'] = parameters.get('project', None)
    if release_id is not None:
        rawquery['release.releaseId'] = release_id
    elif parameters.get('release', None) is not None:
        rawquery['release.name'] = parameters.get('release', None)
    if build_id is not None:
        rawquery['build.buildId'] = build_id
    elif parameters.get('build', None) is not None:
        rawquery['build.name'] = parameters.get('build', None)

    # if 'project' in parameters:
    #     project = get_project(parameters["project"])
    #     if project is not None:
    #         rawquery['project.id'] = project.id
    #     else:
    #         rawquery['project.name'] = parameters["project"]
    # if 'release' in parameters:
    #     if project is not None:
    #         release = get_release(project, parameters['release'])
    #     if release is not None:
    #         rawquery['release.releaseId'] = release.id
    #     else:
    #         rawquery['release.name'] = parameters['release']
    # if 'build' in parameters:
    #     if release is not None:
    #         build = get_build(release, parameters['build'])
    #     if build is not None:
    #         rawquery['build.buildId'] = build.id
    #     else:
    #         rawquery['build.name'] = parameters['build']
    provides = []
    if 'provides' in parameters:
        provides = parameters['provides']
    # from http://stackoverflow.com/questions/22518867/mongodb-querying-array-field-with-exclusion
    rawquery['requirements'] = {'$not': {'$elemMatch': {'$nin': provides}}}
    import mongoengine
    # mongoengine.QuerySet.modify()
    result = Result.objects(__raw__=rawquery).order_by("recorded").modify(new=True, full_response=False, **update)
    # query = {}
    # if 'project' in parameters:
    #    query['project__name'] = parameters['project']
    # if 'release' in parameters:
    #    query['release__name'] = parameters['release']
    # if 'build' in parameters:
    #    query['build__name'] = parameters['build']

    return JsonResponse(result)