add api view on tile statistics (#29903)
This commit is contained in:
parent
fdb4165b60
commit
f0dc0ce1cc
|
@ -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'),
|
||||
]
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -356,7 +356,11 @@ JSON_CELL_TYPES = {
|
|||
"label": "Texte"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"stats": {
|
||||
"name": "Statistiques tuiles",
|
||||
"url": "{{portal_url}}gnm/stats/",
|
||||
},
|
||||
}
|
||||
|
||||
COMBO_ASSET_SLOTS = {
|
||||
|
|
Loading…
Reference in New Issue