Skip to content
Snippets Groups Projects

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 :

dacc

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 --- --- --- --- --- ---
  1. 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:

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/).