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

SARC 318 - logs et traces: jobs #111

Merged
merged 21 commits into from
Mar 18, 2024
Merged

SARC 318 - logs et traces: jobs #111

merged 21 commits into from
Mar 18, 2024

Conversation

notoraptor
Copy link
Contributor

@bouthilx @nurbal Voici une PR pour SARC-318 (logs et traces: jobs) !

@notoraptor notoraptor changed the title Set logs and traces for command "acquire jobs" SARC 318 - logs et traces: jobs Mar 11, 2024
sarc/cli/acquire/jobs.py Outdated Show resolved Hide resolved
Comment on lines 104 to 109
span.add_event(
f"Acquire data on {cluster_name} for date: {date} (is_auto={is_auto})"
)
logging.info(
f"Acquire data on {cluster_name} for date: {date} (is_auto={is_auto})"
)
Copy link
Member

Choose a reason for hiding this comment

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

Ce serait mieux d'éviter les duplications vu qu'on va linker les logs avec les traces avec le logger custom pour OpenTelemetry.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Ok ! Du coup, que garder ? Le log, ou le span event ?

Copy link
Member

Choose a reason for hiding this comment

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

Le log

@@ -115,6 +116,7 @@ def __iter__(self) -> Iterator[SlurmJob]:
print("====================================", file=sys.stderr)
print(pformat(entry), file=sys.stderr)
print("====================================", file=sys.stderr)
logger.error(f"Problem with this entry: {pformat(entry)}")
Copy link
Member

Choose a reason for hiding this comment

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

On pourrait remplacer le try-except par un with using_trace.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Si je retire le try-except, alors les prints en cas d'except seront supprimés aussi. Or, ils sont attendus dans un test:

def test_parse_malformed_jobs(sacct_json, scraper, capsys):

Est-ce que je supprime le test aussi ?

Copy link
Member

Choose a reason for hiding this comment

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

Hum, c'est vrai. 🤔. Si on passe entry aux attributs du span, on n'aurait pas besoin du log d'erreur. On pourrait aussi enlever les prints.

sarc/jobs/sacct.py Outdated Show resolved Hide resolved
sarc/jobs/sacct.py Outdated Show resolved Hide resolved
for entry in tqdm(scraper):
saved = False
if not no_prometheus:
update_allocated_gpu_type(cluster, entry)
Copy link
Member

Choose a reason for hiding this comment

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

Ici aussi ça serait bien d'avoir une subtrace

sarc/jobs/sacct.py Outdated Show resolved Hide resolved
@bouthilx
Copy link
Member

Il faudrait en ajouter aussi dans jobs/series.py

@@ -438,6 +443,7 @@ def _select_stat(name, dist):
]


@trace_decorator()
Copy link
Member

Choose a reason for hiding this comment

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

Je crois que c'est correct sans ici. C'est juste un petit calcul avec pandas.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Retiré! 0a37a14

@bouthilx
Copy link
Member

Il y a beaucoup de monitoring de trace qui ont été ajouté mais peu de tests pour ceux-ci en contrepartie. Idéalement, on devrait pouvoir les tester chacun sans que ça demande d´énormes tests. Peut-être si les appels à l'intérieur de la fonction pouvait être mock facilement, on pourrait facilement tester les trace séparément. On gagnerait peut-être aussi à rendre ces fonction de mock accessible globalement si on s'en sert souvent.

@notoraptor
Copy link
Contributor Author

@bouthilx pour les tests des tracers, la plupart sont testés dans test_tracer_with_multiple_clusters_and_dates_and_prometheus, car on passe à travers eux quand on exécute acquire jobs.

Les tracers non testés sont surtout ceux ajoutés dans jobs/series.py. Je peux aller dans les tests des jobs series, et rajouter quelques lignes à chaque test pour vérifier que le tracer est bien présent (donc, rajouter captrace aux paramètres du test, puis récupérer les spans, et vérifier leurs noms).

Ce sera un peu répétitif, mais je ne vois pas de manière plus simple de tout tester, pour le moment. En plus, si on doit faire des mocks, je ne sais pas si on peut remplacer la fonction décorée sans que ça impacte le décorateur (vu que ce dernier va retourner une fonction qui a le même nom que la fonction à décorer). Je ne sais pas trop si ça se gère facilement.

Est-ce que j'y vais test par test ? Je n'aurai qu'à modifier 1 seul test pour chaque fonction de jobs/series tracée.

…taframe() and load_job_series().

All other trace decorators are tested in test_tracer_with_multiple_clusters_and_dates_and_prometheus
@notoraptor
Copy link
Contributor Author

J'ai ajouté les tests manquants pour les trace decorators. Tous étaient déjà testés dans test_tracer_with_multiple_clusters_and_dates_and_prometheus (ils apparaissent dans le fichier de régression), sauf:

  • compute_job_statistics_from_dataframe
  • load_job_series

Donc j'ai ajouté des vérifications pour ces deux traces-là.

Commit: 02ea3d6

Break acquisition on error for a cluster, and continue to next cluster.
@nurbal nurbal merged commit 0e0751f into master Mar 18, 2024
7 checks passed
@notoraptor notoraptor deleted the sarc-318-log-trace-jobs branch March 26, 2024 12:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants