[yocto] [layerindex-web][PATCH 2/6] Add statistics page
Paul Eggleton
paul.eggleton at linux.intel.com
Mon Feb 19 19:45:54 PST 2018
Add a page with basic statistics for the index - number of layers,
recipes, classes, machines and distros on an overall basis (distinct
names) and per branch, since I've been asked a few times for this kind
of information. It's currently only linked from the Tools menu for
logged-in users, but the URL will work for anyone.
Signed-off-by: Paul Eggleton <paul.eggleton at linux.intel.com>
---
layerindex/urls.py | 6 ++++-
layerindex/views.py | 17 ++++++++++++
templates/base.html | 1 +
templates/layerindex/stats.html | 60 +++++++++++++++++++++++++++++++++++++++++
4 files changed, 83 insertions(+), 1 deletion(-)
create mode 100644 templates/layerindex/stats.html
diff --git a/layerindex/urls.py b/layerindex/urls.py
index 7deaf23..d2f9eab 100644
--- a/layerindex/urls.py
+++ b/layerindex/urls.py
@@ -8,7 +8,7 @@ from django.conf.urls import *
from django.views.generic import TemplateView, DetailView, ListView, RedirectView
from django.views.defaults import page_not_found
from django.core.urlresolvers import reverse_lazy
-from layerindex.views import LayerListView, LayerReviewListView, LayerReviewDetailView, RecipeSearchView, MachineSearchView, PlainTextListView, LayerDetailView, edit_layer_view, delete_layer_view, edit_layernote_view, delete_layernote_view, HistoryListView, EditProfileFormView, AdvancedRecipeSearchView, BulkChangeView, BulkChangeSearchView, bulk_change_edit_view, bulk_change_patch_view, BulkChangeDeleteView, RecipeDetailView, RedirectParamsView, ClassicRecipeSearchView, ClassicRecipeDetailView, ClassicRecipeStatsView, LayerUpdateDetailView, UpdateListView, UpdateDetailView
+from layerindex.views import LayerListView, LayerReviewListView, LayerReviewDetailView, RecipeSearchView, MachineSearchView, PlainTextListView, LayerDetailView, edit_layer_view, delete_layer_view, edit_layernote_view, delete_layernote_view, HistoryListView, EditProfileFormView, AdvancedRecipeSearchView, BulkChangeView, BulkChangeSearchView, bulk_change_edit_view, bulk_change_patch_view, BulkChangeDeleteView, RecipeDetailView, RedirectParamsView, ClassicRecipeSearchView, ClassicRecipeDetailView, ClassicRecipeStatsView, LayerUpdateDetailView, UpdateListView, UpdateDetailView, StatsView
from layerindex.models import LayerItem, Recipe, RecipeChangeset
from rest_framework import routers
from . import restviews
@@ -127,6 +127,10 @@ urlpatterns = patterns('',
TemplateView.as_view(
template_name='layerindex/about.html'),
name="about"),
+ url(r'^stats/$',
+ StatsView.as_view(
+ template_name='layerindex/stats.html'),
+ name='stats'),
url(r'^oe-classic/$',
RedirectView.as_view(url=reverse_lazy('classic_recipe_search'), permanent=False),
name='classic'),
diff --git a/layerindex/views.py b/layerindex/views.py
index 4f6c2c9..95812ca 100644
--- a/layerindex/views.py
+++ b/layerindex/views.py
@@ -1007,3 +1007,20 @@ class ClassicRecipeStatsView(TemplateView):
'jquery_on_ready': False,
}
return context
+
+
+class StatsView(TemplateView):
+ def get_context_data(self, **kwargs):
+ context = super(StatsView, self).get_context_data(**kwargs)
+ context['layercount'] = LayerItem.objects.count()
+ context['recipe_count_distinct'] = Recipe.objects.values('pn').distinct().count()
+ context['class_count_distinct'] = BBClass.objects.values('name').distinct().count()
+ context['machine_count_distinct'] = Machine.objects.values('name').distinct().count()
+ context['distro_count_distinct'] = Distro.objects.values('name').distinct().count()
+ context['perbranch'] = Branch.objects.order_by('sort_priority').annotate(
+ layer_count=Count('layerbranch', distinct=True),
+ recipe_count=Count('layerbranch__recipe', distinct=True),
+ class_count=Count('layerbranch__bbclass', distinct=True),
+ machine_count=Count('layerbranch__machine', distinct=True),
+ distro_count=Count('layerbranch__distro', distinct=True))
+ return context
diff --git a/templates/base.html b/templates/base.html
index 8a3b8fe..a9d7c83 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -73,6 +73,7 @@
<li><a href="{% url 'bulk_change' %}">Bulk Change</a></li>
<li><a href="{% url 'duplicates' 'master' %}">Duplicates</a></li>
<li><a href="{% url 'update_list' %}">Updates</a></li>
+ <li><a href="{% url 'stats' %}">Statistics</a></li>
</ul>
</li>
{% endif %}
diff --git a/templates/layerindex/stats.html b/templates/layerindex/stats.html
new file mode 100644
index 0000000..3c4971b
--- /dev/null
+++ b/templates/layerindex/stats.html
@@ -0,0 +1,60 @@
+{% extends "base.html" %}
+{% load i18n %}
+{% load static %}
+
+{% comment %}
+
+ layerindex-web - statistics page template
+
+ Copyright (C) 2018 Intel Corporation
+ Licensed under the MIT license, see COPYING.MIT for details
+
+{% endcomment %}
+
+
+<!--
+{% block title_append %} - statistics{% endblock %}
+-->
+
+{% block content %}
+{% autoescape on %}
+
+<h2>Statistics</h2>
+
+<h3>Overall</h3>
+<dl class="dl-horizontal">
+ <dt>Layers</dt><dd>{{ layercount }}</dd>
+ <dt>Recipes</dt><dd>{{ recipe_count_distinct }} (distinct names)</dd>
+ <dt>Machines</dt><dd>{{ machine_count_distinct }} (distinct names)</dd>
+ <dt>Classes</dt><dd>{{ class_count_distinct }} (distinct names)</dd>
+ <dt>Distros</dt><dd>{{ distro_count_distinct }} (distinct names)</dd>
+</dl>
+
+<h3>Per branch</h3>
+
+<table class="table">
+ <thead>
+ <th>Branch</th>
+ <th style="text-align: right">Layers</th>
+ <th style="text-align: right">Recipes</th>
+ <th style="text-align: right">Machines</th>
+ <th style="text-align: right">Classes</th>
+ <th style="text-align: right">Distros</th>
+ </thead>
+ <tbody>
+ {% for branch in perbranch %}
+ <tr {% if not branch.updates_enabled %}class="muted"{% endif %}>
+ <td>{{ branch.name }}</td>
+ <td style="text-align: right">{{ branch.layer_count }}</td>
+ <td style="text-align: right">{{ branch.recipe_count }}</td>
+ <td style="text-align: right">{{ branch.machine_count }}</td>
+ <td style="text-align: right">{{ branch.class_count }}</td>
+ <td style="text-align: right">{{ branch.distro_count }}</td>
+ </tr>
+ {% endfor %}
+ </tbody>
+</table>
+
+{% endautoescape %}
+{% endblock %}
+
--
2.14.3
More information about the yocto
mailing list