Cartouche | |
---|---|
ZEP | 11 |
Titre | Interface de statistiques sur les tutoriels |
Révision | 2 |
Date de création | 25 juillet 2014 |
Dernière révision | 06 mai 2015 |
Type | Feature |
Statut | Validation |
Contexte de la proposition
Cette proposition vise a fournir aux membres, un outil de suivi statistique de la consultation du contenu publié. L'auteur pourra ainsi savoir simplement différentes choses afin de déterminer les points d’amélioration ou de modification nécessaire. Par exemple, si les lecteurs restent significativement plus longtemps sur un chapitre il serait peut-être bon de découper ce dernier. Ou encore si l'auteur propose des ressources (liens, documents/sources a télécharger etc), il aimerait probablement savoir si ces dernières sont consultées ou non pour déterminer si ce travail de documentation est nécessaire ou non.
Objet de la proposition
Cette ZEP vise donc l’implémentation et la mise en forme d'une interface de consultation de données statistiques sur le contenu du site. Cette interface sera accessible via le menu de gauche du tutoriel.
Cette page devra être le plus clair possible pour qu'un utilisateur non technicien puisse aussi recueillir des informations (donc il faut éviter l'utilisation de jargon par exemple).
Moyens mis en œuvre
Nous avions envisagés au départ de recueillir les données venant de l'API Google, mais force est de constater, après réflexion et estimation de volumétrie, que ZdS n'a pas les moyens de les exploiter.
Les moyens utilisés sont les suivants (dans l'ordre chronologique) :
- Lire une fois par jour les logs de notre serveur Web (nginx), les parser, filtrer le contenu qui nous intéresse et stocker le resultat dans une base de donnée;
- Exposer les données de la base ZdS via une API;
- Présenter les résultats dans une interface de statistique.
Voici un schéma un peu technique qui illustre l'architecture globale du système.
Les informations à récupérer
Après, un sondage, la communauté s'est exprimée sur les informations qui l’intéressent plus ou moins. Parmi ces informations, celles que l'on peut obtenir grace aux logs sont les suivantes :
Proposition | Description | Total "Oui" | Total "Non" | Total "Pourquoi pas" |
---|---|---|---|---|
1 | Le nombre total de visites. | 17 | 0 | 0 |
2 | Les URLs sources qui ont permis d'accéder au tuto avec le nombre de visites depuis ces sources. | 15 | 2 | 0 |
3 | Le nombre de clics sur les différents liens du tuto. | 5 | 9 | 3 |
4 | Connaitre depuis quelle plateforme (navigateur, système d'exploitation, taille d'écran, etc.) les gens consulte mon tutoriel. | 5 | 10 | 2 |
5 | Connaitre le temps moyen que met mon tutoriel pour se charger sur un navigateur | 7 | 9 | 1 |
6 | Savoir depuis quelle zone (ville, pays, continent) les gens consultent mon tutoriel | 7 | 7 | 3 |
7 | Connaitre le pourcentage de nouveaux utilisateurs qu'apporte mon tutoriel au site | 8 | 7 | 2 |
Ces informations seront donc stockées dans la base de donnée de ZdS.
Le modèle de stockage des informations ?
Les informations seront stockées dans une base de données SQL (ici MySQL) car le modèle des données s'y prête bien. La mise en place d'index permettra d'améliorer les performances de lecture sur la base étant donné que la nature du besoin demande de pouvoir lire efficacement les données.
La capacité de stockage de la base est largement estimée à 10 Go/an. Ce qui représente tout de même un cout de stockage.
L'API
Afin que tout le monde puisse jouer avec les statistiques, les données seront rendues d'abord par une API. Le site lui même utilisera l'API pour afficher les données.
Par souci d’homogénéité avec les autres API du site, les paramètres de restrictions (throttling) seront les mêmes que sur les autres modules. C'est à dire qu'un client disposant d'une clé pour l'API aura un nombre de requêtes autorisés largement supérieur à un client sans clé. Il sera donc possible d’accéder à l'API sans avoir de clé.
La différence sera au niveau de la durée du cache sur les requêtes. Étant donné que le traitement d'analyse/parsing/stockage de logs sera fait une fois par jour, nous devons avoir une taille de cache de 24h, invalidé à chaque lancement de la procédure d'analyse.
Les verbes de l'API
Tout client de l'API (y compris le site) ne doit accéder à l'API uniquement qu'au travers de la méthode GET, il s'agit donc d'une API en lecture seule.
Les paramètres des requêtes
Les paramètres des requêtes sont les variables que l'on passent à une url de l'API sous la forme http://api_url/?v1=x&v2=yv3=z
. Dans cet exemple, v1, v2, v3 sont les paramètres de la requête.
Les paramètres sont tous facultatifs, et en cas de non renseignement d'un paramètre, la valeur par défaut sera celle spécifiée dans le fichier de paramètre (le settings.py) de zds.
Le module des statistique devra donc autoriser les paramètres suivants :
- date_debut : AAAAMMJJ.
- date_fin : AAAAMMJJ.
- heure_debut : HHMMSS.
- heure_fin : HHMMSS.
- profondeur: Int. il s'agit de la profondeur du json rendu (voir l'exemple)
- page: Int
Les URLs de l'API
L'API devra mettre à disposition des clients les URLs suivantes:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | /api/contenus/stats/visites/ /api/contenus/:content_type/stats/visites/ /api/contenus/:content_type/:content_id/stats/visites/ /api/contenus/:content_type/:content_id/stats/visites/ /api/contenus/:content_type/:content_id/stats/visites/sources/ /api/contenus/:content_type/:content_id/stats/visites/plateformes/ /api/contenus/:content_type/:content_id/stats/visites/plateformes/os /api/contenus/:content_type/:content_id/stats/visites/plateformes/navigateur /api/contenus/:content_type/:content_id/stats/visites/geo/ /api/contenus/:content_type/:content_id/stats/visites/geo/continents/ /api/contenus/:content_type/:content_id/stats/visites/geo/continents/pays/ /api/contenus/:content_type/:content_id/stats/visites/geo/continents/pays/villes /api/contenus/:content_type/:content_id/stats/visites/geo/pays/ /api/contenus/:content_type/:content_id/stats/visites/geo/pays/villes /api/contenus/:content_type/:content_id/stats/visites/geo/villes /api/contenus/:content_type/:content_id/stats/visites/geo/continents/ /api/contenus/:content_type/:content_id/stats/clics-internes/ |
:content_type
: représente le type de conteneur (article, tutoriel, chapitre, partie):content_id
: représente l'identifiant du conteneur sur zds
Un json d'exemple
Pour donnée une idée de ce vers quoi on va, voici la structure du json visée pour l'url /api/contenus/:content_type/:content_id/stats/visites/
. On voit que là on a toutes les informations demandées.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | { "id" : "", "type": "", "total_visits" : 189, "uniques_visits": 86, "new_visits": 8, "avg_load_speed": 457, "sources" :[ { "dns": "google.fr", "total_visits" : 189, "uniques_visits": 86, "new_visits": 8, "avg_load_speed": 157 }, { "dns": "twitter.com", "total_visits" : 14, "uniques_visits": 5, "new_visits": 0, "avg_load_speed": 447 }, { "dns": "yahoo.fr", "total_visits" : 189, "uniques_visits": 86, "new_visits": 8, "avg_load_speed": 401 } ], "plateformes" : { "os": [ { "name": "Windows", "version": "7", "total_visits" : 189, "uniques_visits": 86, "new_visits": 8, "avg_load_speed": 401 }, { "name": "Unknow", "version": "Unknow", "total_visits" : 189, "uniques_visits": 86, "new_visits": 8, "avg_load_speed": 401 } ], "navigateur": [ { "name": "Firefox", "version": "7", "total_visits" : 189, "uniques_visits": 86, "new_visits": 8, "avg_load_speed": 401 }, { "name": "Google Chrome", "version": "32", "total_visits" : 189, "uniques_visits": 86, "new_visits": 8, "avg_load_speed": 401 } ] } "geo" : { "continents": { "pays": { "villes" : [ ] } }, "pays": { "villes" : [ ] }, "villes" : [ ] } } |
Évolutions de la ZEP ?
L'idée est dans une première version d'utiliser les logs du site comme provider des données. Une seconde itération (et si le besoin s'en ait sentir) consistera à prendre en compte les données de Google Analytics pour mettre à disposition 3 métriques demandées.
- Le temps moyen passé sur le tuto.
- Le type d'audience (fourchette d'age, sexe) que mon tutoriel attire
- Les mots clés qui permettent d'arriver sur mon tutoriel depuis un moteur de recherche