예제 #1
0
파일: jobs.py 프로젝트: BlackSmith/GreenTea
    def prepare_matrix(self, jobs, recipes, label=None):
        data = OrderedDict()
        if not label:
            label = create_matrix(settings.PREVIOUS_DAYS)
        for job in jobs:
            job.recipes = dict()
            data[job.whiteboard] = job

        for recipe in recipes:
            whiteboard = recipe.job.template.whiteboard
            lb = render_label(recipe.get_dict(), data[whiteboard].grouprecipes)
            tmp_recipe = data[whiteboard].recipes
            if lb not in tmp_recipe:
                tmp_recipe[lb] = dict()
                tmp_recipe[lb]["job"] = whiteboard
                tmp_recipe[lb]["days"] = OrderedDict()
                tmp_recipe[lb]["label"] = lb
                for d in label:
                    tmp_recipe[lb]["days"][d] = {
                        "recipe": None, "schedule": []}
            labeldate = recipe.get_date().date()
            # recipe isn't in range of date # FIXME
            if labeldate not in tmp_recipe[lb]["days"]:
                continue

            tmp_recipe[lb]["days"][labeldate]["recipe"] = recipe
            tmp_recipe[lb]["days"][labeldate]["schedule"].append(recipe.uid)
        return data
예제 #2
0
파일: jobs.py 프로젝트: adelton/GreenTea
    def prepare_matrix(self, jobs, recipes, label=None):
        data, reschedule = OrderedDict(), 0
        if not label:
            label = create_matrix(settings.PREVIOUS_DAYS)
        for job in jobs:
            job.recipes = dict()
            data[job.whiteboard] = job

        for recipe in recipes:
            whiteboard = recipe.job.template.whiteboard
            lb = render_label(recipe.get_dict(), data[whiteboard].grouprecipes)
            tmp_recipe = data[whiteboard].recipes
            if lb not in tmp_recipe:
                tmp_recipe[lb] = dict()
                tmp_recipe[lb]["job"] = whiteboard
                tmp_recipe[lb]["days"] = OrderedDict()
                tmp_recipe[lb]["label"] = lb
                for d in label:
                    tmp_recipe[lb]["days"][d] = {
                        "recipe": None, "schedule": []}
            labeldate = recipe.get_date().date()
            # recipe isn't in range of date # FIXME
            if labeldate not in tmp_recipe[lb]["days"]:
                continue

            tmp_recipe[lb]["days"][labeldate]["recipe"] = recipe
            tmp_recipe[lb]["days"][labeldate]["schedule"].append(recipe.uid)
        return data
예제 #3
0
파일: tests.py 프로젝트: adelton/GreenTea
 def __expand_task_grouprecipes_template(self, task):
     """If Task-s JobTemplate have "Grouprecipes" template set (e.g. "{{arch}}"),
        render that template (i.e. get actual value for the template)"""
     tmp = {
         "arch": task["recipe__arch__name"],
         "distro": task["recipe__distro__name"],
         "distro_label": task["recipe__distro__name"],
         "whiteboard": task["recipe__whiteboard"],
         "alias": task["alias"],
     }
     return render_label(tmp, task["recipe__job__template__grouprecipes"])
예제 #4
0
 def prepare_matrix(self, tests=[], periodschedules=[]):
     """Load info about  from DB and return it in template friendly object."""
     out_dict = {}  # template friendly data structure
     # Determine plain list of period schedule IDs
     periodschedule_ids = self.__get_period_ids(periodschedules)
     # Set list of tables and fields for the query and create initial
     # version of the filter (filter by "test_id" will be added later
     # in the loop below)
     relations = [
         'test', 'recipe', 'recipe__arch', 'recipe__distro', 'recipe__job',
         'recipe__job__template', 'recipe__job__schedule'
     ]
     fields = [
         'test_id',
         'id',
         'uid',
         'result',
         'status',
         'statusbyuser',
         'alias',
         'recipe__id',
         'recipe__uid',
         'recipe__status',
         'recipe__resultrate',
         'recipe__whiteboard',
         'recipe__statusbyuser',
         'recipe__arch__name',
         'recipe__result',
         'recipe__distro__name',
         'recipe__job__id',
         'recipe__job__uid',
         'recipe__job__template__id',
         'recipe__job__template__whiteboard',
         'recipe__job__template__grouprecipes',
         'recipe__job__schedule__id',
         'recipe__job__schedule__counter',
         'recipe__job__schedule__period_id',
     ]
     filters = {}
     filters['recipe__job__schedule__id__in'] = periodschedule_ids
     filters['test_id__in'] = [test.id for test in tests]
     # Now add all the tests info into the output data
     for test in tests:
         # Popupate tests (no matter if runs in given periodschedules
         # exists - we are interested in empty tests as well)
         if test.id not in out_dict:
             out_dict[test.id] = {
                 'name': test.name,
                 'test_id': test.id,
                 'owner__name': test.owner.name,
                 'owner__email': test.owner.email,
                 'get_absolute_url': test.get_absolute_url(),
                 'get_reposituory_url': test.get_reposituory_url(),
                 'get_detail_url': test.get_detail_url(),
                 'test__groups__name': [],
                 'data': {},
             }
         # Populate test's groups
         if test.groups.name not in out_dict[test.id]['test__groups__name']:
             out_dict[test.id]['test__groups__name'].append(
                 test.groups.name)
     # Finally execute the query
     data = Task.objects.filter(**filters).select_related(*relations).only(
         *fields)
     # Reorder data into tempate friendly data structure
     for i in data:
         # Populate period schedules (because one test can run in 'Daily
         # automation' and 'Weekly automation' and...)
         if i.recipe.job.schedule.period_id not in out_dict[
                 i.test.id]['data']:
             title = ''
             for p in periodschedules[i.recipe.job.schedule.period_id]:
                 if p['id'] == i.recipe.job.schedule.id:
                     title = p['period__title']
                     break
             out_dict[i.test.id]['data'][
                 i.recipe.job.schedule.period_id] = {
                     'title': title,
                     'data': {},
                 }
         # Popupate job (just general info common for more nightly runs)
         if i.recipe.job.template.id not in out_dict[i.test.id]['data'][
                 i.recipe.job.schedule.period_id]['data']:
             out_dict[i.test.id]['data'][i.recipe.job.schedule.period_id][
                 'data'][i.recipe.job.template.id] = {
                     'template__whiteboard':
                     i.recipe.job.template.whiteboard,
                     'template__id': i.recipe.job.template.id,
                     'data': {},
                 }
         # Popupate recipe (just general info common for more nightly
         # runs)
         tmp = {
             "arch": i.recipe.arch.name,
             "distro": i.recipe.distro.name,
             "distro_label": i.recipe.distro.name,
             "whiteboard": i.recipe.whiteboard,
             "alias": i.alias,
         }
         recipe_matcher = render_label(tmp,
                                       i.recipe.job.template.grouprecipes)
         if recipe_matcher not in out_dict[i.test.id]['data'][
                 i.recipe.job.schedule.period_id]['data'][
                     i.recipe.job.template.id]['data']:
             out_dict[i.test.id]['data'][
                 i.recipe.job.schedule.period_id]['data'][
                     i.recipe.job.template.id]['data'][recipe_matcher] = {
                         'data': {},
                     }
         # Populate schedule
         if i.recipe.job.schedule.id not in out_dict[i.test.id]['data'][
                 i.recipe.job.schedule.period_id]['data'][
                     i.recipe.job.template.
                     id]['data'][recipe_matcher]['data']:
             out_dict[i.test.id]['data'][i.recipe.job.schedule.period_id][
                 'data'][i.recipe.job.template.id]['data'][recipe_matcher][
                     'data'][i.recipe.job.schedule.id] = {
                         'counter': i.recipe.job.schedule.counter,
                         'data': {},
                     }
         # Populate task (i.e. test run)
         if i.id not in out_dict[i.test.id]['data'][
                 i.recipe.job.schedule.period_id]['data'][
                     i.recipe.job.template.id]['data'][recipe_matcher][
                         'data'][i.recipe.job.schedule.id]['data']:
             out_dict[i.test.id]['data'][i.recipe.job.schedule.period_id][
                 'data'][i.recipe.job.template.id]['data'][recipe_matcher][
                     'data'][i.recipe.job.schedule.id]['data'][i.id] = {
                         'uid': i.uid,
                         'id': i.id,
                         'result': i.get_result(),
                         'status': i.status,  # i.recipe.get_status(),
                         'is_running': i.recipe.is_running(),
                         'recipe__id': i.recipe.id,
                         'recipe__uid': i.recipe.get_uid,
                         'recipe__result': i.recipe.get_result(),
                         'recipe__resultrate': i.recipe.resultrate,
                         'recipe__job__uid': i.recipe.job.uid,
                     }
     return out_dict
예제 #5
0
파일: tests.py 프로젝트: alda519/GreenTea
 def prepare_matrix(self, test_ids=[], periodschedules=[]):
     """Load info about  from DB and return it in template friendly object."""
     out_dict = {}   # template friendly data structure
     # Determine plain list of period schedule IDs
     periodschedule_ids = self.__get_period_ids(periodschedules)
     # Set list of tables and fields for the query and create initial
     # version of the filter (filter by "test_id" will be added later
     # in the loop below)
     relations = ['test', 'test__owner', 'test__git', 'recipe',
                  'recipe__arch', 'recipe__distro', 'recipe__job',
                  'recipe__job__template', 'recipe__job__schedule']
     fields = [
         'test__id', 'test__name', 'test__folder',
         'test__owner__id', 'test__owner__name', 'test__owner__email',
         'test__git__id', 'test__git__localurl',
         'test__groups__name',
         'id', 'uid', 'result', 'status', 'statusbyuser', 'alias',
         'recipe__id', 'recipe__uid', 'recipe__status', 'recipe__resultrate', 'recipe__whiteboard', 'recipe__statusbyuser',
         'recipe__arch__name', 'recipe__result',
         'recipe__distro__name',
         'recipe__job__id', 'recipe__job__uid',
         'recipe__job__template__id', 'recipe__job__template__whiteboard', 'recipe__job__template__grouprecipes',
         'recipe__job__schedule__id', 'recipe__job__schedule__counter', 'recipe__job__schedule__period_id',
     ]
     filters = {}
     filters['recipe__job__schedule__id__in'] = periodschedule_ids
     # Now process all the tests
     for test_id in test_ids:
         filters['test_id'] = test_id
         data = Task.objects.filter(
             **filters).select_related(*relations).only(*fields)
         # Reorder data into tempate friendly data structure
         for i in data:
             # Popupate tests
             if i.test.id not in out_dict:
                 out_dict[i.test.id] = {
                     'name': i.test.name,
                     'owner__name': i.test.owner.name,
                     'owner__email': i.test.owner.email,
                     'get_absolute_url': i.test.get_absolute_url(),
                     'get_reposituory_url': i.test.get_reposituory_url(),
                     'get_detail_url': i.test.get_detail_url(),
                     'test__groups__name': [],
                     'data': {},
                 }
             # Populate test's groups
             if i.test.groups.name not in out_dict[
                     i.test.id]['test__groups__name']:
                 out_dict[i.test.id]['test__groups__name'].append(
                     i.test.groups.name)
             # Populate period schedules (because one test can run in 'Daily
             # automation' and 'Weekly automation' and...)
             if i.recipe.job.schedule.period_id not in out_dict[
                     i.test.id]['data']:
                 title = ''
                 for p in periodschedules[i.recipe.job.schedule.period_id]:
                     if p['id'] == i.recipe.job.schedule.id:
                         title = p['period__title']
                         break
                 out_dict[i.test.id]['data'][i.recipe.job.schedule.period_id] = {
                     'title': title,
                     'data': {},
                 }
             # Popupate job (just general info common for more nightly runs)
             if i.recipe.job.template.id not in out_dict[i.test.id][
                     'data'][i.recipe.job.schedule.period_id]['data']:
                 out_dict[i.test.id]['data'][i.recipe.job.schedule.period_id]['data'][i.recipe.job.template.id] = {
                     'template__whiteboard': i.recipe.job.template.whiteboard,
                     'data': {},
                 }
             # Popupate recipe (just general info common for more nightly
             # runs)
             tmp = {
                 "arch": i.recipe.arch.name,
                 "distro": i.recipe.distro.name,
                 "distro_label": i.recipe.distro.name,
                 "whiteboard": i.recipe.whiteboard,
                 "alias": i.alias,
             }
             recipe_matcher = render_label(
                 tmp, i.recipe.job.template.grouprecipes)
             if recipe_matcher not in out_dict[i.test.id]['data'][
                     i.recipe.job.schedule.period_id]['data'][i.recipe.job.template.id]['data']:
                 out_dict[i.test.id]['data'][i.recipe.job.schedule.period_id]['data'][i.recipe.job.template.id]['data'][recipe_matcher] = {
                     'data': {},
                 }
             # Populate schedule
             if i.recipe.job.schedule.id not in out_dict[i.test.id]['data'][i.recipe.job.schedule.period_id][
                     'data'][i.recipe.job.template.id]['data'][recipe_matcher]['data']:
                 out_dict[i.test.id]['data'][i.recipe.job.schedule.period_id]['data'][i.recipe.job.template.id]['data'][recipe_matcher]['data'][i.recipe.job.schedule.id] = {
                     'counter': i.recipe.job.schedule.counter,
                     'data': {},
                 }
             # Populate task (i.e. test run)
             if i.id not in out_dict[i.test.id]['data'][i.recipe.job.schedule.period_id]['data'][
                     i.recipe.job.template.id]['data'][recipe_matcher]['data'][i.recipe.job.schedule.id]['data']:
                 out_dict[i.test.id]['data'][i.recipe.job.schedule.period_id]['data'][i.recipe.job.template.id]['data'][recipe_matcher]['data'][i.recipe.job.schedule.id]['data'][i.id] = {
                     'uid': i.uid,
                     'result': i.get_result(),
                     'status': i.recipe.get_status(),
                     'is_running': i.recipe.is_running(),
                     'recipe__id': i.recipe.id,
                     'recipe__uid': i.recipe.uid,
                     'recipe__result': i.recipe.get_result(),
                     'recipe__resultrate': i.recipe.resultrate,
                     'recipe__job__uid': i.recipe.job.uid,
                 }
     return out_dict