add api view on tile statistics (#29903)

This commit is contained in:
Frédéric Péters 2019-05-29 09:02:06 +02:00
parent fdb4165b60
commit f0dc0ce1cc
3 changed files with 54 additions and 2 deletions

View File

@ -22,4 +22,5 @@ from . import views
urlpatterns = [
url(r'^gnm/plusone/$', views.plusone, name='gnm-plus-one'),
url(r'^gnm/share/$', views.share, name='gnm-share'),
url(r'^gnm/stats/$', views.stats, name='gnm-stats'),
]

View File

@ -17,11 +17,13 @@
from django.conf import settings
from django.contrib import messages
from django.contrib.auth import get_user_model
from django.core.mail import EmailMultiAlternatives
from django.http import HttpResponseRedirect
from django.http import HttpResponseRedirect, JsonResponse
from django.template import RequestContext
from django.template.loader import render_to_string
from combo.apps.dashboard.models import Tile
from combo.utils import requests, get_templated_url
def plusone(request, *args, **kwargs):
@ -64,3 +66,48 @@ def share(request, *args, **kwargs):
url = request.POST.get('url')
return HttpResponseRedirect(url)
def stats(request, *args, **kwargs):
data = {}
User = get_user_model()
data['users'] = {}
data['users']['count'] = User.objects.all().count()
data['tiles'] = {}
tiles_by_user = {}
manual_tiles_by_user = {}
for tile in Tile.objects.all().filter(dashboard__isnull=False).select_related():
cell = tile.cell
if cell.key not in settings.JSON_CELL_TYPES:
continue
if tile.user_id not in tiles_by_user:
tiles_by_user[tile.user_id] = []
tiles_by_user[tile.user_id].append(cell.key)
if cell.key not in data['tiles']:
data['tiles'][cell.key] = {
'name': settings.JSON_CELL_TYPES[cell.key]['name'],
'count': 0,
'manual': 0,
}
data['tiles'][cell.key]['count'] += 1
if cell.placeholder != '_suggested_tile':
data['tiles'][cell.key]['manual'] += 1
if tile.user_id not in manual_tiles_by_user:
manual_tiles_by_user[tile.user_id] = []
manual_tiles_by_user[tile.user_id].append(cell.key)
data['users']['have-tiles'] = len(tiles_by_user.keys())
data['users']['have-more-than-suggested-tiles'] = len(manual_tiles_by_user.keys())
data['users']['have-no-tiles'] = data['users']['count'] - data['users']['have-tiles']
dashboard_lengths = [len(x) for x in tiles_by_user.values()]
dashboard_lengths.sort()
data['users']['max-tiles'] = max(dashboard_lengths)
if dashboard_lengths:
data['users']['median-tiles'] = dashboard_lengths[len(dashboard_lengths) // 2]
return JsonResponse(data)

6
debian/50gnm.py vendored
View File

@ -356,7 +356,11 @@ JSON_CELL_TYPES = {
"label": "Texte"
}
]
}
},
"stats": {
"name": "Statistiques tuiles",
"url": "{{portal_url}}gnm/stats/",
},
}
COMBO_ASSET_SLOTS = {