-
Hugo SUBTIL authoredHugo SUBTIL authored
DACC
What is DACC ? A cozy blackbox where apps can send data in order to be anonymised and aggregate to provide usage stats.
Infrastructure workflow
We have two environements, a dev one and a production. Both of them look like the following schema :
On the developpement env, the 'cozy env' refers to our 'Alpha' VM.
Service
There is a service named aggregatorUsageEvent
, running on a daily basis, sending pre-processed data to cozy. This service is responsible for parsing traced events store in database and send them to cozy.
The service is configured to run every night at 01:00AM.
Usage events
This section explains how the application is tracking usage events. Here are the main step:
- All events are stored during the use of the application in the doctype com.grandlyon.ecolyo.usageevents
- A service is responsible of the aggregation of these events to create ANONYMIZED indicators. These indicators are then sent to a remote docType.
Title | Tech name | target | context | startDate | result | trigger | Cozy Dacc Name |
---|---|---|---|---|---|---|---|
Changement d'action dans un challenge | ActionChangeEvent | Id de l'action | Id du challenge en cours | --- | --- | Chaque appui sur le bouton selectEcogesture dans le ActionCard
|
navigation-action-daily |
Validation de la fin d'une action | ActionEndEvent | Id de l'ecogeste | Id du challenge en cours | Date de début de l'action | --- | Lors de l'appui sur le bouton de fin d'action | event-duration |
Connexion d'un utilisateur | ConnectionEvent | --- | Navigateur utilisé | --- | Si c'est la première connexion firstConnection est stocké |
A chaque chargement de l'application | connection-count-daily |
Connecteur Classique | KonnectorConnectEvent | Slug du connecteur | --- | --- | Success ou error | Le succès dans le cas ou on a la pop-up 'félicitation', le 'error' en cas d'erreur de quelque type que ce soit (catch) | konnector-event-daily |
Connecteur Oauth (enedis, GRDF) | KonnectorConnectEvent | Slug du connecteur | --- | --- | Success ou error | Le succès dans le cas ou on a la pop-up 'félicitation', le 'error' dans le cas ou aucun accoun n'est créé | konnector-event-daily |
Refresh manuel du connecteur | KonnectorRefreshEvent | Slug du connecteur | --- | --- | Success ou error. Le succès est set quand l'état du trigger est a 'done' | Lors de l'appuie sur le bouton 'mettre a jour' | konnector-event-daily |
Navigation utilisateur dans l'application | NavigationEvent | Nom de la page ( voir 1. en dessous ) | --- | --- | --- | --- | navigation-count-daily |
Comparaison de consomation | ConsumptionCompareEvent | timestep in lowercase | fluid type in lowercase | --- | --- | --- | navigation-action-daily |
Changement de pas de temps | ConsumptionChangeTimeStepEvent | timestep in lowercase | fluid type | --- | --- | --- | navigation-action-daily |
Lancement d'un challenge | ChallengeLaunchEvent | challenge id | --- | --- | --- | Appuie sur le bouton de lancement de challenge dans le cas on la pop-up 'pas de fluid' ne s'affiche pas | event-duration |
Title | Tech name | target | context | startDate | result | trigger | Cozy Dacc Name |
Fin d'un challenge | ChallengeEndEvent | challenge id | --- | date de début du challenge | --- | Lors de la visualisation d'un challenge, si le resultat de celui-ci est a 'fini' on enregistre l'événement | event-duration |
Début d'un duel | DuelLaunchEvent | duel id | challenge id | --- | --- | Appuie sur le bouton de lancement d'un duel | event-duration |
Fin d'un duel | DuelEndEvent | duel id | --- | challenge start date | 'win' or 'loss' | Lors de la visualisation d'un duel, si le resultat de celui-ci est a 'fini' on enregistre l'événement | event-duration |
Fin d'un quiz | QuizEndEvent | Quiz id | Challenge Id | Quiz start date | Resultat du quiz (de 0 a 5) | Lors de la pop-up de résultat | event-duration |
--- | ExplorationEndEvent | --- | --- | --- | --- | --- | --- |
--- | ActionChangeEvent | --- | --- | --- | --- | --- | --- |
--- | ActionEndEvent | --- | --- | --- | --- | --- | --- |
--- | ProfileSetEvent | --- | --- | --- | --- | --- | --- |
--- | ReportFromEvent | --- | --- | --- | --- | --- | --- |
- Nom de la page, différents cas existant
Page | target | Trigger |
---|---|---|
Consomation | 'electricity', 'gas', 'eau', 'multifluid' | Click sur un des fluids dans la bar navigation |
FAQ | 'faq' | Click sur la card de consultation |
CGU | 'legalNotice' | Click sur la card de Legal Notice |
Autres | 'consumption' 'challenges' 'ecogestures' 'analysis' 'options' | Click dans la navbar |
Indicators
!!! warning "note" All indicators are only sent if a user validate first version of CGU, the one containing dacc validation
Monthly Indicators
All monthly indicators call can be found after this comment on the code
// Monthly events
Indicator | Trigger | value |
---|---|---|
consumption-variation-monthly | Tous les mois si l'utilisateur a été connecté au moins une fois dans le mois | La variation de consomation par type de fluide. La paramètres différents sont le type de profile ainsi ue le nombre de mois d'anciennetée |
summary-subscription-monthly | Tous les mois si un utilisateur a souscrit a la newsletter ou c'est désabonné | 1 si l'utilsteur est inscrit sinon 0 |
fluid-data-granularity-monthly | Tous les mois sans condition | 1 si l'utilisateur possède de la donnée a la demi heure sur le mois. Sinon 0 |
connection-count-monthly | Tous les mois si il y a eu au moins une connexion | Le nombre de jour unique de connexion |
profile-count-monthly | Tous les mois si le profil a été complété au moins une fois | Le nombre de fois ou le profile a été complété |
Daily Indicators
The daily process get all events of previous day and process them in the following indicators
Indicator | Trigger | value |
---|---|---|
connection-count-daily | Tous les jours | Nombre de connexion. Celle-ci sont catégorisé par type (mobile ou desktop) |
konnector-event-daily | Tous les jours | Nombre d'essai. Ils sont catégorisé par type de connecteur, refresh/success et le status (error ou success) |
konnector-connected-daily | Tous les jours | La valeur est 1. Les valeurs sont catégorisées par type de fluide (electricity / electricity:water ...) |
navigation-count-daily | Tous les jours | nombre de page visualisé par type de page |
challenge-launch-daily | Tous les jours | Nombre de défis lancés lors d'un challenge |
session-duration | Tous les jours | Durée de la session en secondes |
navigation-action-daily | Tous les jours | Nombre d'action sur une page donnée. Exemple sur la consomation on trace les changements de pas de temps sur chaque graph. |
event-duration | Tous les jours | Durée entre deux événements: |
1ere session et premier challenge / début de challenge et fin de challenge / début d'exploration et fin d'exploration / début d'action et fin d'action / début de duel et fin de duel | ||
quiz-stars | Tous les jours | Nombre d'étoiles obtenu a la fin d'un quiz |
Information sending
Format
All indicator are post to a remote doctype, which will allow the application to read a defined external API. This doctype is created by Cozy itself. The structure to send is the following :
{
createdBy: string
measureName: string
startDate: string
value: number | null
group1?: object
group2?: object
group3?: object
}
with:
- createdBy: contains "ecolyo" value.
- startDate: used to defined the start date of the indicator
- value: contains a value relevant to the defined indicator (example: number of page viewed on a day).
- groups: contains all attributes defining a indicator. Please refer to indicators definition (https://stats.cozycloud.cc/question#eyJkYXRhc2V0X3F1ZXJ5Ijp7ImRhdGFiYXNlIjo0LCJxdWVyeSI6eyJzb3VyY2UtdGFibGUiOjh9LCJ0eXBlIjoicXVlcnkifSwiZGlzcGxheSI6InRhYmxlIiwidmlzdWFsaXphdGlvbl9zZXR0aW5ncyI6e319)
- mesureName: contains one of the following value
ENUM | value |
---|---|
CONNECTION_COUNT_DAILY | connection-count-daily |
KONNECTOR_EVENT_DAILY | konnector-event-daily |
KONNECTOR_CONNECTED_PER_DAY | konnector-connected-daily |
NAVIGATION_COUNT_DAILY | navigation-count-daily |
CHALLENGE_LAUNCH_EVENT_DAILY | challenge-launch-daily |
CONSUMPTION_VARIATION_MONTHLY | consumption-variation-monthly |
SESSION_DURATION | session-duration |
NAVIGATION_ACTION_DAILY | navigation-action-daily |
EVENT_DURATION | event-duration |
QUIZ_STARS | quiz-stars |
SUMMARY_SUBSCRIPTION_MONTHLY | summary-subscription-monthly |
FLUID_DATA_GRANULARITY | fluid-data-granularity-monthly |
CONNECTION_COUNT_MONTHLY | connection-count-monthly |
PROFILE_COUNT_MONTHLY | profile-count-monthly |
Environnements
There is two remote doctypes pointing to two differents mode. dacc-dev
is used on alpha.
"dacc": {
"type": "cc.cozycloud.dacc",
"verbs": ["ALL"]
},
"dacc-dev": {
"type": "cc.cozycloud.dacc.dev",
"verbs": ["ALL"]
},
How to local test ?
First you need to modify the service in order to be able to see data in local :
- Modify dacc URL in order to see data (ligne 67)
await client
.getStackClient()
.fetchJSON(
'POST',
environementService.isProduction()
? 'http://localhost:8081'
: '/remote/cc.cozycloud.dacc.dev',
{
data: JSON.stringify(indicator),
}
)
- Remove date protection if you want to test monthly indicators (ligne 1100)
if (
profile
// &&
// DateTime.local()
// .setZone('utc', {
// keepLocalTime: true,
// })
// .startOf('day').day === profile.monthlyAnalysisDate.day
) {
Then you need to launch a script that will simulate dacc api's. This terminal will listen to incoming request
cd ./scripts
node server.js
Then you are finaly ready to test ! Just run the following :
yarn build-dev:browser; yarn run cozy-konnector-dev -m .\manifest.webapp .\build\services\fluidsPrices\ecolyo.js
You must see sent indicators in the previously open terminal
{
data: '{"createdBy":"ecolyo","measureName":"connection-count-monthly","startDate":"2021-12-09","value":3}'
}
{
data: '{"createdBy":"ecolyo","measureName":"connection-count-monthly","startDate":"2021-12-09","value":3}'
}
How to add new indicator ?
You have to reach cozy and discuss with them about new indicators. Thery will implement it for dacc-dev
and dacc
and you will be able to test it on alpha env. Remember you will need at least 5 data of each type to see it in metabase.
Visualisation
All the data aggregated in the dacc can be visualized with a Metabase website hosted by cozy (https://stats.cozycloud.cc/).