Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pilotage : Chiffres clés dynamiques dans le tableau de bord #4589

Draft
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

rsebille
Copy link
Contributor

🤔 Pourquoi ?

[Chiffres clés dynamiques TB privés] - Institutions : intégrer les chiffres clés dynamiques et à jour sur la page statistique privée des emplois

🍰 Comment ?

Récupération des données via l'API Metabase, elles sont ensuite stockées dans le cache (un redis avec une expiration très longue)

🏝️ Comment tester

  • Se connecter avec un compte institution lié à l'IAE

[Optionnel] Pour avoir des données :

  1. Configurer METABASE_API_KEY
  2. Lancer ./manage.py metabase_data fetch --wet-run

💻 Captures d'écran

image

@rsebille rsebille added 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC ajouté Ajouté dans le changelog. labels Aug 21, 2024
@rsebille rsebille self-assigned this Aug 21, 2024
Copy link

🥁 La recette jetable est prête ! 👉 Je veux tester cette PR !

@rsebille rsebille force-pushed the rsebille/c2/kpi-in-dashboard branch from 134df89 to 2c65d14 Compare August 29, 2024 08:32
@rsebille rsebille marked this pull request as ready for review September 3, 2024 14:06
Copy link
Contributor

@hellodeloo hellodeloo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je t'ai pushé un petit commit d'ajustement ui 😘

@hellodeloo
Copy link
Contributor

@rsebille si t'es chaud, y'a le même besoin sur pilotage qui attend que j'ai le temps et que j'en sois capable ;)

@hellodeloo hellodeloo self-requested a review September 3, 2024 16:28
Copy link
Contributor

@hellodeloo hellodeloo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@@ -17,6 +17,7 @@
"1 0 * * * $ROOT/clevercloud/run_management_command.sh update_prescriber_organization_with_api_entreprise --verbosity 2",
"30 0 * * * $ROOT/clevercloud/run_management_command.sh collect_analytics_data --save",
"30 1 * * * $ROOT/clevercloud/run_management_command.sh new_users_to_mailjet --wet-run",
"30 2 * * * $ROOT/clevercloud/run_management_command.sh metabase_data fetch --wet-run",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Est-ce qu'on ne voudrait pas l'appeler plus souvent (quitte à ne pas appeler metabase si les données du redis ont moins de 24h) ?
Parce que si le redis tombe, on aura 0 donnée pendant 24h

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

J'ai pas fait de fioriture car c'est vraiment pas critique comme information, si on n'a rien ça affichera juste N/A dans les 4 blocs et la date de MAJ mais les TB complets seront OK eux.
Mais effectivement on pourrais faire ça aussi, surtout que le breakout a permis de bien optimiser le nombre de requête à faire donc c'est moins lourd que ma première version qui utilisais filter pour chaque bucket.

itou/utils/apis/metabase.py Outdated Show resolved Hide resolved
@rsebille rsebille force-pushed the rsebille/c2/kpi-in-dashboard branch 3 times, most recently from a942fb7 to 4695868 Compare September 4, 2024 15:13
<a href="https://pilotage.inclusion.beta.gouv.fr/tableaux-de-bord/bilan-candidatures-iae/"
target="_blank"
rel="noopener"
aria-title="En savoir plus sur ces données"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je pense il devrait être aria-label (le WAI ne recommande pas utiliser title sans label)

Suggested change
aria-title="En savoir plus sur ces données"
aria-label="En savoir plus sur ces données (ouverture dans un nouvel onglet)"
aria-title="En savoir plus sur ces données"

<p>C’est le nombre de fiches de poste en tension chez les SIAE de votre territoire à l’instant.</p>
</div>
<div>
<a href="{% url "stats:redirect" "tension" %}" target="_blank" rel="noopener" aria-title="En savoir plus sur ces données" class="btn btn-link ps-0 has-external-link">Consulter ces données</a>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<a href="{% url "stats:redirect" "tension" %}" target="_blank" rel="noopener" aria-title="En savoir plus sur ces données" class="btn btn-link ps-0 has-external-link">Consulter ces données</a>
<a href="{% url "stats:redirect" "tension" %}" target="_blank" rel="noopener" aria-label="En savoir plus sur ces données (ouverture dans un nouvel onglet)" aria-title="En savoir plus sur ces données" class="btn btn-link ps-0 has-external-link">Consulter ces données</a>

</p>
</div>
<div>
<a href="{% url "stats:redirect" "ph_prescription" %}" target="_blank" rel="noopener" aria-title="En savoir plus sur ces données" class="btn btn-link ps-0 has-external-link">Consulter ces données</a>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<a href="{% url "stats:redirect" "ph_prescription" %}" target="_blank" rel="noopener" aria-title="En savoir plus sur ces données" class="btn btn-link ps-0 has-external-link">Consulter ces données</a>
<a href="{% url "stats:redirect" "ph_prescription" %}" target="_blank" rel="noopener" aria-label="En savoir plus sur ces données (ouverture dans un nouvel onglet)" aria-title="En savoir plus sur ces données" class="btn btn-link ps-0 has-external-link">Consulter ces données</a>

</p>
</div>
<div>
<a href="{% url "stats:redirect" "state" %}" target="_blank" rel="noopener" aria-title="En savoir plus sur ces données" class="btn btn-link ps-0 has-external-link">Consulter ces données</a>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<a href="{% url "stats:redirect" "state" %}" target="_blank" rel="noopener" aria-title="En savoir plus sur ces données" class="btn btn-link ps-0 has-external-link">Consulter ces données</a>
<a href="{% url "stats:redirect" "state" %}" target="_blank" rel="noopener" aria-label="En savoir plus sur ces données (ouverture dans un nouvel onglet)" aria-title="En savoir plus sur ces données" class="btn btn-link ps-0 has-external-link">Consulter ces données</a>

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pour infos, aria-title n'existe pas. C'est soit aria-label, soit title. Il est recommandé d'utiliser aria-label car mieux interprété par les screen reader.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, OK! J'ai lu que title fait le tooltip (et aria-label non) donc je pense les deux ensemble est mieux ici ?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Si on a vraiment besoin d'un tooltip, on mettra plutot celui de BS5

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ça t'apprendra à reprendre le code des autres ;) Je corrige sur pilotage 🙈

Comment on lines 244 to 279
def get_stats_for_institution(institution: Institution, datum_key: DatumKey, *, is_percentage=False):
match institution.kind:
case (
InstitutionKind.DGEFP_GEIQ
| InstitutionKind.DGEFP_IAE
| InstitutionKind.DIHAL
| InstitutionKind.IAE_NETWORK
):
grouped_by = None
case InstitutionKind.DREETS_GEIQ | InstitutionKind.DREETS_IAE | InstitutionKind.DRIHL:
grouped_by = "region"
case InstitutionKind.DDETS_GEIQ | InstitutionKind.DDETS_IAE | InstitutionKind.DDETS_LOG:
grouped_by = "department"
case _:
raise ValueError

datum_key_to_fetch = DatumKey[f"{datum_key.name}_BY_{grouped_by.upper()}S"] if grouped_by else datum_key
data = caches["stats"].get(datum_key_to_fetch)
value = data.get(getattr(institution, grouped_by)) if grouped_by and data else data
return value * 100 if is_percentage and value else value
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

import enum


class DatumKey(enum.StrEnum):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

metabase_data = {DatumKey.DATA_UPDATED_AT: timezone.now()}
for datum_key, metabase_informations in self.DATA_TO_FETCH.items():
self.logger.info("Fetching datum_key=%s", datum_key)
converter = metabase_informations.get("converter", lambda x: x)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

J'aime bien le converter :)

# Fetch the "group_by" data
for name, fields in metabase_informations.get("group_by", {}).items():
self.logger.info("Fetching datum_key=%s group_by=%s", datum_key, name)
metabase_data[DatumKey[f"{datum_key.name}_BY_{name.upper()}S"]] = converter(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

f"{datum_key.name}_BY_{name.upper()}S" est partagé avec get_stats_for_institution. Il pourrait être une méthode sur DatumKey?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Totalement !

Copy link
Contributor Author

@rsebille rsebille left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PI, la PR passe en stand by pour le moment car il y a un problème métier avec les deux derniers indicateurs donc j’attends la décision sur le sujet : soit suppression, soit remplacement

</p>
</div>
<div>
<a href="{% url "stats:redirect" "state" %}" target="_blank" rel="noopener" aria-title="En savoir plus sur ces données" class="btn btn-link ps-0 has-external-link">Consulter ces données</a>
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

# Fetch the "group_by" data
for name, fields in metabase_informations.get("group_by", {}).items():
self.logger.info("Fetching datum_key=%s group_by=%s", datum_key, name)
metabase_data[DatumKey[f"{datum_key.name}_BY_{name.upper()}S"]] = converter(
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Totalement !

@rsebille rsebille force-pushed the rsebille/c2/kpi-in-dashboard branch 2 times, most recently from 9cd5095 to 83990c8 Compare September 11, 2024 13:36
@rsebille rsebille removed the 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC label Oct 15, 2024
@rsebille rsebille marked this pull request as draft October 15, 2024 13:00
@rsebille rsebille force-pushed the rsebille/c2/kpi-in-dashboard branch 2 times, most recently from eb9d130 to 7a5a314 Compare November 20, 2024 16:59
@rsebille rsebille force-pushed the rsebille/c2/kpi-in-dashboard branch 2 times, most recently from 155bb71 to 15f688c Compare November 21, 2024 15:48
@rsebille rsebille added the 1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC label Nov 21, 2024
Copy link

🥁 La recette jetable est prête ! 👉 Je veux tester cette PR !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
1-recette-jetable [Payé à l’heure] Crée une recette jetable sur CC ajouté Ajouté dans le changelog. pilotage
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants