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

[Analytics] Suivi de l'Apdex et des requêtes non abouties (Sentry) #5162

Open
wants to merge 5 commits into
base: master
Choose a base branch
from

Conversation

celine-m-s
Copy link
Collaborator

@celine-m-s celine-m-s commented Nov 25, 2024

Afin de suivre l'impact technique de nos actions, nous récoltons l'apdex et le taux de requêtes en échec de Sentry et les conservons dans l'app Analytics.
cf #5162

@celine-m-s celine-m-s self-assigned this Nov 25, 2024
@celine-m-s celine-m-s added the no-changelog Ne doit pas figurer dans le journal des changements. label Nov 25, 2024
Copy link

tests/analytics/conftest.py Outdated Show resolved Hide resolved
tests/analytics/conftest.py Outdated Show resolved Hide resolved
tests/utils/apis/test_sentry_api.py Outdated Show resolved Hide resolved
tests/utils/apis/test_sentry_api.py Outdated Show resolved Hide resolved
@pytest.fixture
def sentry_respx_mock(respx_mock):
url = f"{settings.API_SENTRY_BASE_URL}/organizations/{settings.API_SENTRY_ORG_NAME}/events/"
respx_mock.get(url).mock(return_value=httpx.Response(200, json=_events_for_metrics_endpoint_json_response()))
Copy link
Contributor

Choose a reason for hiding this comment

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

Peut-être juste renvoyer respx_mock.get(url) et laisser les tests explicitement définir ce que renvoie l'API ?

Copy link
Contributor

Choose a reason for hiding this comment

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

👍 pour retourner la Route créée par respx, ça permettra à chaque test de surcharger le retour si besoin.
Après sur le fait de mettre un retour par défaut, je dirais que ça dépend du nombre de test qui ont un intérêt à utiliser la valeur par défaut et/ou si celle-ci est assez large/correcte pour être utilisée par défaut.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Seuls trois tests utilisent cette fixture et toujours avec ce payload-là. Le répéter dans chaque test me semble un peu en avance de phase. Il sera toujours possible de changer par la suite si le besoin s'en fait sentir.

itou/analytics/models.py Outdated Show resolved Hide resolved
@pytest.fixture
def sentry_respx_mock(respx_mock):
url = f"{settings.API_SENTRY_BASE_URL}/organizations/{settings.API_SENTRY_ORG_NAME}/events/"
respx_mock.get(url).mock(return_value=httpx.Response(200, json=_events_for_metrics_endpoint_json_response()))
Copy link
Contributor

Choose a reason for hiding this comment

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

👍 pour retourner la Route créée par respx, ça permettra à chaque test de surcharger le retour si besoin.
Après sur le fait de mettre un retour par défaut, je dirais que ça dépend du nombre de test qui ont un intérêt à utiliser la valeur par défaut et/ou si celle-ci est assez large/correcte pour être utilisée par défaut.

Comment on lines 46 to 48
def test_request(respx_mock):
url = f"{settings.API_SENTRY_BASE_URL}/organizations/{settings.API_SENTRY_ORG_NAME}/events/"
respx_mock.get(url).mock(return_value=httpx.Response(200, json=_events_for_metrics_endpoint_json_response()))
Copy link
Contributor

Choose a reason for hiding this comment

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

C'est pas équivalent à ce que fait sentry_respx_mock ? 🤔

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Si mais je n'arrive pas à réutiliser la fixture car elle a été définie dans le module analytics et non au global. Ça m'ennuyait de polluer le conftest.py global pour trois petits tests et les quelques solutions que j'ai pu trouver sur les internets me semblent vraiment compliquées pour pas grand chose.
Mais je suis preneuse de toute bonne idée car moi aussi ça me gêne ! 💡

tests/analytics/conftest.py Outdated Show resolved Hide resolved
tests/utils/apis/test_sentry_api.py Outdated Show resolved Hide resolved
assert settings.API_SENTRY_STATS_TOKEN in response.request.headers["authorization"]
assert urllib.parse.quote(start.isoformat()) in str(response.url)
assert urllib.parse.quote(end.isoformat()) in str(response.url)
Copy link
Contributor

Choose a reason for hiding this comment

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

PI, respx permet de ne créer une route qui ne répond que quand certain prédicat sont vrai, par exemple un paramètre GET ou un header, ça permet ensuite de choper les oublis via assert_all_called ou assert_all_mocked ;). #CeintureBretelles

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

J'ai fait une proposition dans le dernier commit.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
no-changelog Ne doit pas figurer dans le journal des changements.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants