mirror of
git://git.yoctoproject.org/layerindex-web.git
synced 2025-07-19 20:59:01 +02:00
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:
parent
b614cba817
commit
bed43a9be5
|
@ -8,7 +8,7 @@ from django.conf.urls import *
|
||||||
from django.views.generic import TemplateView, DetailView, ListView, RedirectView
|
from django.views.generic import TemplateView, DetailView, ListView, RedirectView
|
||||||
from django.views.defaults import page_not_found
|
from django.views.defaults import page_not_found
|
||||||
from django.core.urlresolvers import reverse_lazy
|
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 layerindex.models import LayerItem, Recipe, RecipeChangeset
|
||||||
from rest_framework import routers
|
from rest_framework import routers
|
||||||
from . import restviews
|
from . import restviews
|
||||||
|
@ -127,6 +127,10 @@ urlpatterns = patterns('',
|
||||||
TemplateView.as_view(
|
TemplateView.as_view(
|
||||||
template_name='layerindex/about.html'),
|
template_name='layerindex/about.html'),
|
||||||
name="about"),
|
name="about"),
|
||||||
|
url(r'^stats/$',
|
||||||
|
StatsView.as_view(
|
||||||
|
template_name='layerindex/stats.html'),
|
||||||
|
name='stats'),
|
||||||
url(r'^oe-classic/$',
|
url(r'^oe-classic/$',
|
||||||
RedirectView.as_view(url=reverse_lazy('classic_recipe_search'), permanent=False),
|
RedirectView.as_view(url=reverse_lazy('classic_recipe_search'), permanent=False),
|
||||||
name='classic'),
|
name='classic'),
|
||||||
|
|
|
@ -1007,3 +1007,20 @@ class ClassicRecipeStatsView(TemplateView):
|
||||||
'jquery_on_ready': False,
|
'jquery_on_ready': False,
|
||||||
}
|
}
|
||||||
return context
|
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
|
||||||
|
|
|
@ -73,6 +73,7 @@
|
||||||
<li><a href="{% url 'bulk_change' %}">Bulk Change</a></li>
|
<li><a href="{% url 'bulk_change' %}">Bulk Change</a></li>
|
||||||
<li><a href="{% url 'duplicates' 'master' %}">Duplicates</a></li>
|
<li><a href="{% url 'duplicates' 'master' %}">Duplicates</a></li>
|
||||||
<li><a href="{% url 'update_list' %}">Updates</a></li>
|
<li><a href="{% url 'update_list' %}">Updates</a></li>
|
||||||
|
<li><a href="{% url 'stats' %}">Statistics</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
60
templates/layerindex/stats.html
Normal file
60
templates/layerindex/stats.html
Normal 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 %}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user