aboutsummaryrefslogtreecommitdiffstats
path: root/rrs
diff options
context:
space:
mode:
authorAníbal Limón <anibal.limon@linux.intel.com>2015-01-29 18:13:28 -0600
committerPaul Eggleton <paul.eggleton@linux.intel.com>2018-05-04 23:57:51 +1200
commitdc3855758288d6377ed1fb201cdd9bd0819f57ce (patch)
tree0fdb73f62bf53684ca11d94077bb4921024bb9fa /rrs
parent6dfc369f29a135f8170ce59a4fcb7ab7f66eec45 (diff)
downloadopenembedded-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.py6
-rw-r--r--rrs/views.py100
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