gradle copyMod
Dans le fichier template :
- Déclarer l'application dans la liste.
{
"name": "fr.wseduc~stats~[VERSION]",
"config": {
"main" : "fr.wseduc.stats.Stats",
"port" : 8025,
"app-name" : "Statistiques",
"app-address" : "/stats",
"app-icon" : "stats-large",
"app-displayName" : "stats",
"ssl" : $ssl,
"integration-mode" : "HTTP",
"app-registry.port" : 8012,
"auto-redeploy": false,
"mode" : "${mode}",
"entcore.port" : 8009,
"overviewAllowedFunctions": ["SUPER_ADMIN"],
"aggregation-cron": "0 0 0 * * ?",
"dayDelta": -1
}
}
Le champ aggregation-cron
permet de spécifier la fréquence d'aggrégation. Ici elle est fixée à tous les jours à minuit.
Le champ dayDelta
fixe l'agrégation à un jour spécifique. Ici, -1 signifie que le jour cible est la veille, 0 étant le jour courant.
Le champ overviewAllowedFunctions
est optionnel, il limite l'accès du niveau 'projet' ainsi que l'export à une ou des fonctions.
- Associer une route à la configuration du module proxy intégré.
{
"location": "/stats",
"proxy_pass": "http://localhost:8025"
}
Cette application a pour but de produire une série de statistiques à partir de traces d’exécution et de les restituer à la demande à l’utilisateur final.
Ces statistiques doivent être à la fois globales (tous critères confondus), mais doivent aussi pouvoir être filtrées et groupées par critères, par exemple filtrées par période ou groupées par enseignant d’une structure donnée.
Le déclenchement du traitement est déclaré dans le fichier de configuration, et donc aisément modifiable.
- Nombre de connexions
Somme du nombre de connexions (= login) depuis le 1er septembre, groupé par profil, structure, classes et visualisable par jour / semaine / mois.
- Visiteurs uniques
Nombre de visiteurs uniques sur les 30 derniers jours groupés par profil, structure et classe. Visualisable par jour / semaine / mois.
- Visites par visiteurs uniques
Combinaison des 2 indicateurs précédents, on somme les connections des 30 derniers jours et on divise par le nombre de visiteurs uniques sur cette période. Groupé par profil / structure / classe mais visualisable uniquement par mois.
- Outils les plus utilisés
Somme des accès aux services depuis le premier septembre, et affichage des 5 services les plus demandés, par profil ou global.
- Pic de connexion horaire
Somme des connexions depuis le premier septembre par tranche horaire. Affichage pour tous les profils.
- Pic de connexion hebdomadaire
Idem que pour le pic horaire, mais en hebdomadaire.
- Nombre de comptes activés
Somme des comptes activés depuis le premier septembre. Affichage en global ou par profil, somme par jour / mois / semaine.
Un utilisateur peut être habilité à utiliser cette application en configurant le droit dans la console d'administration. De plus, un utilisateur ne peut demander la liste des statistiques que pour les établissements / classes dans lesquels il est rattaché.
Le modèle JAVA comporte trois parties distinctes :
-
Package
fr.wseduc.stats.aggregation
:
Contient la classe d'aggrégation, héritée de AggregationProcessing et paramétrée avec la liste des indicateurs One, avec un filtre journalier et les groupes appropriés (profil / structures / classes / services) -
Package
fr.wseduc.stats.cron
:
Tâche de Cron qui va appeler les implémentations de AggregationProcessing (dans notre cas, celle du package aggregation) -
Autre packages :
Controller & Service qui contenant les méthodes d'appel à la base et d'envoi de données au front.
Collection : Stats
Modèle :
{
"_id" :[Id mongo],
"date" : [Date de l'enregistrement, paramétrée au jour du cron à minuit au format "yyyy-MM-dd HH:mm:ss.SSS"],
"groupedBy" : [Si on aggrège par groupe(s), contient les groupes séparés par des slash. Sinon vide.],
"[GROUP]_id" : [Autant de champ id que de groupes dans le groupedBy, contient la valeur pointée par le champ groupe],
"[TYPE]" : [Type de trace, et valeur aggrégée]
}
2 types d'objets sont importants dans la logique javascript des statistiques :
L'objet IndicatorContainer symbolise un groupement d'indicateurs, comme par structure ou par classe. Cet objet défini dans le fichier model.js
contient toutes les requêtes ajax pour récupérer les différentes valeurs aggrégées utilisées pour calculer les indicateurs restitués.
C'est lui qui contient les données.
L'objet Indicator symbolise un indicateur à restituer à l'écran, et contient une liste de méthodes de calcul et de visualisation toujours paramétrées par un conteneur.
Cette application One utilise un moteur d'aggrégation contenu dans le module common d'ent-core, étendu avec les indicateurs mentionnés ci-dessus pour aggréger une fois par jour les traces.
Pour les détails techniques plus poussés relatifs à l'aggrégateur, se référer à la documentation d'ent-core.
La restitution graphique sous forme de diagrammes se fait à l'aide de la librairie Chart.js.
Pour qu'un connecteur apparaisse dans les statistiques, il faut qu'il soit du type "CAS" et qu'il y ait une référence pour le type de CAS.
Pour qu'une application (pour laquelle des événements sont collectés) apparaisse dans les statistiques, il est nécessaire d'ajouter le nom court du verticle dans le tableau modules
dans le fichier src/main/resources/api-allowed-values.json
.
Processus : à l'ajout d'un nouveau module dont le verticle principal est la classe org.entcore.xxx.xyz.MyVerticle
, il faut donc créer sur master une PR sur le module statistics
avec l'ajout de la valeur MyVerticle
au tableau modules
.