diff options
author | Aníbal Limón <anibal.limon@linux.intel.com> | 2015-01-29 18:13:28 -0600 |
---|---|---|
committer | Paul Eggleton <paul.eggleton@linux.intel.com> | 2018-05-04 23:57:51 +1200 |
commit | dc3855758288d6377ed1fb201cdd9bd0819f57ce (patch) | |
tree | 0fdb73f62bf53684ca11d94077bb4921024bb9fa /rrs | |
parent | 6dfc369f29a135f8170ce59a4fcb7ab7f66eec45 (diff) | |
download | openembedded-core-contrib-dc3855758288d6377ed1fb201cdd9bd0819f57ce.tar.gz |
rrs: Add Maintainer statistics page.
Maintainer statistics page gives information by Milestone and
Maintainers assigned recipes, status of recipes (up-to-date,
not-update, unknown) and percertange of work done.
Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
Diffstat (limited to 'rrs')
-rw-r--r-- | rrs/urls.py | 6 | ||||
-rw-r--r-- | rrs/views.py | 100 |
2 files changed, 100 insertions, 6 deletions
diff --git a/rrs/urls.py b/rrs/urls.py index 8403ebb338..49f5e6348c 100644 --- a/rrs/urls.py +++ b/rrs/urls.py @@ -1,7 +1,7 @@ from django.conf.urls import patterns, include, url from rrs.models import Milestone -from rrs.views import RecipeListView, RecipeDetailView +from rrs.views import RecipeListView, RecipeDetailView, MaintainerListView urlpatterns = patterns('', url(r'^$', redirect_to, {'url' : reverse_lazy('recipes', args=(Milestone.get_current().name,))}, @@ -14,4 +14,8 @@ urlpatterns = patterns('', RecipeDetailView.as_view( template_name='rrs/recipedetail.html'), name='recipedetail'), + url(r'^maintainers/(?P<milestone_name>.*)/$', + MaintainerListView.as_view( + template_name='rrs/maintainers.html'), + name="maintainers"), ) diff --git a/rrs/views.py b/rrs/views.py index 388a527b41..53c6e115e8 100644 --- a/rrs/views.py +++ b/rrs/views.py @@ -26,7 +26,7 @@ def _get_layer_branch_url(branch, layer_name): return ("http://layers.openembedded.org/layerindex/branch/%s/layer/%s/"\ % (branch, layer_name)) -def _get_milestone_statistics(milestone): +def _get_milestone_statistics(milestone, maintainer_name=None): milestone_statistics = {} recipe_upstream_history = RecipeUpstreamHistory.get_last_by_date_range( @@ -35,22 +35,51 @@ def _get_milestone_statistics(milestone): ) if recipe_upstream_history is None: + milestone_statistics['all'] = '0' milestone_statistics['up_to_date'] = '0' milestone_statistics['not_updated'] = '0' milestone_statistics['unknown'] = '0' milestone_statistics['percentage'] = '0.0' - else: - recipes_all = RecipeUpstream.objects.filter(history = + elif maintainer_name is None: + recipe_count = RecipeUpstream.objects.filter(history = recipe_upstream_history).count() + milestone_statistics['all'] = recipe_count milestone_statistics['up_to_date'] = RecipeUpstream.objects.filter( history = recipe_upstream_history, status = 'Y').count() milestone_statistics['not_updated'] = RecipeUpstream.objects.filter( history = recipe_upstream_history, status = 'N').count() - milestone_statistics['unknown'] = recipes_all - \ + milestone_statistics['unknown'] = milestone_statistics['all'] - \ (milestone_statistics['up_to_date'] + milestone_statistics['not_updated']) milestone_statistics['percentage'] = "%.2f" % \ - ((float(milestone_statistics['up_to_date']) / float(recipes_all)) * 100) + ((float(milestone_statistics['up_to_date']) / + float(milestone_statistics['all'])) * 100) + else: + recipe_maintainer_history = RecipeMaintainerHistory.get_by_end_date( + milestone.end_date) + + recipes_all = [] + for rm in RecipeMaintainer.objects.filter(history = recipe_maintainer_history, + maintainer__name = maintainer_name): + ru = RecipeUpstream.objects.filter(recipe = rm.recipe, history = + recipe_upstream_history)[0] + recipes_all.append(ru) + + milestone_statistics['all'] = len(recipes_all) + milestone_statistics['up_to_date'] = 0 + milestone_statistics['not_updated'] = 0 + milestone_statistics['unknown'] = 0 + for ru in recipes_all: + if ru.status == 'Y': + milestone_statistics['up_to_date'] += 1 + elif ru.status == 'N': + milestone_statistics['not_updated'] += 1 + else: + milestone_statistics['unknown'] += 1 + + milestone_statistics['percentage'] = "%.2f" % \ + ((float(milestone_statistics['up_to_date']) / + float(milestone_statistics['all'])) * 100) return milestone_statistics @@ -266,3 +295,64 @@ class RecipeDetailView(DetailView): context['recipe_distros'] = RecipeDistro.get_distros_by_recipe(recipe) return context + +class MaintainerList(): + name = None + recipes_all = 0 + recipes_up_to_date = '0' + recipes_not_updated = '0' + recipes_unknown = '0' + percentage_done = '0.00' + + def __init__(self, name): + self.name = name + +class MaintainerListView(ListView): + context_object_name = 'maintainer_list' + + def get_queryset(self): + maintainer_list = [] + self.maintainer_count = 0 + + self.milestone_name = self.kwargs['milestone_name'] + milestone = get_object_or_404(Milestone, name=self.milestone_name) + + self.milestone_statistics = _get_milestone_statistics(milestone) + + recipe_maintainer_history = RecipeMaintainerHistory.get_by_end_date( + milestone.end_date) + + if recipe_maintainer_history: + for rm in RecipeMaintainer.objects.filter(history = + recipe_maintainer_history).values( + 'maintainer__name').distinct().order_by('maintainer__name'): + maintainer_list.append(MaintainerList(rm['maintainer__name'])) + + self.maintainer_count = len(maintainer_list) + + for ml in maintainer_list: + milestone_statistics = _get_milestone_statistics(milestone, ml.name) + ml.recipes_all = milestone_statistics['all'] + ml.recipes_up_to_date = milestone_statistics['up_to_date'] + ml.recipes_not_updated = milestone_statistics['not_updated'] + ml.recipes_unknown = milestone_statistics['unknown'] + ml.percentage_done = milestone_statistics['percentage'] + + return maintainer_list + + def get_context_data(self, **kwargs): + context = super(MaintainerListView, self).get_context_data(**kwargs) + + context['this_url_name'] = resolve(self.request.path_info).url_name + + context['milestone_name'] = self.milestone_name + context['all_milestones'] = Milestone.objects.filter().order_by('-id') + + context['recipes_percentage'] = self.milestone_statistics['percentage'] + context['recipes_up_to_date'] = self.milestone_statistics['up_to_date'] + context['recipes_not_updated'] = self.milestone_statistics['not_updated'] + context['recipes_unknown'] = self.milestone_statistics['unknown'] + + context['maintainer_count'] = self.maintainer_count + + return context |