Add statistics page

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@linux.intel.com>
This commit is contained in:
Paul Eggleton 2018-01-11 23:13:31 +13:00
parent b614cba817
commit bed43a9be5
4 changed files with 83 additions and 1 deletions

View File

@ -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'),

View File

@ -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

View File

@ -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 %}

View File

@ -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 %}