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

[1.0.0] Lenteur sur les chargements des sites #406

Closed
maximetoma opened this issue Jan 14, 2025 · 4 comments
Closed

[1.0.0] Lenteur sur les chargements des sites #406

maximetoma opened this issue Jan 14, 2025 · 4 comments
Assignees

Comments

@maximetoma
Copy link
Contributor

maximetoma commented Jan 14, 2025

Version
GN 2.15.1 / Monitoring 1.0.0

Description du problème
Je remarque des lenteurs au chargement des sites dans les sous-modules voir le plus souvent un plantage timeout de la requête.
C'est un problème que j'observe de façon récurrente de mon côté malheureusement (#142 depuis la 0.2.9 ^^) à chaque montée de version mais là c'est très problématique....
Qu'est ce qui est récolté comme info sur cette route ? : https://sep-geonature.reserves-naturelles.org/api/monitorings/util/init_data/module

Logs
Je joins aussi le log de GeoNature quand la requête timeout

[2025-01-14 16:20:42 +0100] [1535911] [CRITICAL] WORKER TIMEOUT (pid:1587522)
[2025-01-14 16:20:42 +0100] [1587522] [ERROR] Error handling request /api/monitorings/util/init_data/multiparam_eau
Traceback (most recent call last):
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/gunicorn/workers/sync.py", line 134, in handle
    self.handle_request(listener, req, client, addr)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/gunicorn/workers/sync.py", line 177, in handle_request
    respiter = self.wsgi(environ, resp.start_response)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask/app.py", line 1536, in __call__
    return self.wsgi_app(environ, start_response)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/werkzeug/middleware/dispatcher.py", line 81, in __call__
    return app(environ, start_response)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/werkzeug/middleware/shared_data.py", line 250, in __call__
    return self.app(environ, start_response)
  File "/home/geonatureadmin/geonature/backend/geonature/middlewares/__init__.py", line 16, in __call__
    return self.app(environ, new_start_response)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/werkzeug/middleware/proxy_fix.py", line 183, in __call__
    return self.app(environ, start_response)
  File "/home/geonatureadmin/geonature/backend/geonature/middlewares/__init__.py", line 27, in __call__
    return self.app(environ, start_response)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask/app.py", line 1511, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask/app.py", line 917, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask/app.py", line 902, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)  # type: ignore[no-any-return]
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/utils_flask_sqla/response.py", line 19, in _json_resp
    res = fn(*args, **kwargs)
  File "/home/geonatureadmin/gn_module_monitoring/backend/gn_module_monitoring/routes/data_utils.py", line 106, in get_init_data
    out["sites_group"] = [schema.dump(sites_group) for sites_group in sites_groups]
  File "/home/geonatureadmin/gn_module_monitoring/backend/gn_module_monitoring/routes/data_utils.py", line 106, in <listcomp>
    out["sites_group"] = [schema.dump(sites_group) for sites_group in sites_groups]
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/marshmallow/schema.py", line 545, in dump
    result = self._serialize(processed_obj, many=many)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/marshmallow/schema.py", line 513, in _serialize
    value = field_obj.serialize(attr_name, obj, accessor=self.get_attribute)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/marshmallow/fields.py", line 343, in serialize
    value = self.get_value(obj, attr, accessor=accessor)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/marshmallow/fields.py", line 273, in get_value
    return accessor_func(obj, check_key, default)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/marshmallow/schema.py", line 478, in get_attribute
    return get_value(obj, attr, default)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/marshmallow/utils.py", line 279, in get_value
    return _get_value_for_key(obj, key, default)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/marshmallow/utils.py", line 293, in _get_value_for_key
    return getattr(obj, key, default)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/sqlalchemy/ext/hybrid.py", line 933, in __get__
    return self.fget(instance)
  File "/home/geonatureadmin/gn_module_monitoring/backend/gn_module_monitoring/monitoring/models.py", line 457, in nb_visits
    return DB.session.scalar(query)
  File "<string>", line 2, in scalar
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 1747, in scalar
    return self.execute(
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 1717, in execute
    result = conn._execute_20(statement, params or {}, execution_options)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1710, in _execute_20
    return meth(self, args_10style, kwargs_10style, execution_options)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/sqlalchemy/sql/elements.py", line 334, in _execute_on_connection
    return connection._execute_clauseelement(
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1577, in _execute_clauseelement
    ret = self._execute_context(
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1953, in _execute_context
    self._handle_dbapi_exception(
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 2138, in _handle_dbapi_exception
    util.raise_(exc_info[1], with_traceback=exc_info[2])
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/sqlalchemy/util/compat.py", line 211, in raise_
    raise exception
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1910, in _execute_context
    self.dialect.do_execute(
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/sqlalchemy/engine/default.py", line 736, in do_execute
    cursor.execute(statement, parameters)
  File "/usr/lib/python3.9/encodings/utf_8.py", line 15, in decode
    def decode(input, errors='strict'):
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/gunicorn/workers/base.py", line 204, in handle_abort
    sys.exit(1)
SystemExit: 1
@camillemonchicourt
Copy link
Member

OK merci pour ce retour et ces précisions.
A priori je ne vois pas de raison que des changements de la 1.0.0 amènent à des nouveaux soucis de performances.
La 1.0.0 ajoute principalement le gestionnaire de sites multi-protocoles, ainsi que la prise en compte des portées des permissions (cette partie peut alourdir un peu les requêtes de récupération des objets, mais très peu il me semble).

Par contre, sur la partie init_data, je vois bien quelques petits changements récents (https://github.com/PnX-SI/gn_module_monitoring/blame/5e9fa4f85a4563d56d37914ab1d98161b1a828b2/backend/gn_module_monitoring/routes/data_utils.py#L72), mais je n'ai pas les compétences pour savoir en quoi ils consistent.

Il y a bien des soucis de performances identifiés dans le module Monitoring, mais ils ne sont pas nouveaux avec la 1.0.0.
Un travail est en cours sur le sujet : #378.
Mais toute contribution pour améliorer le module est bienvenue.

@maximetoma
Copy link
Contributor Author

maximetoma commented Jan 15, 2025

Je continue mes prospections, il apparait que https://sep-geonature.reserves-naturelles.org/api/monitorings/util/init_data/module va me retourne touts les sites et groupes de sites dont ceux qui ne sont pas issus du module en question, je ne sais pas si c'est normal du coup ?
Par exemple, j'ai en réponse de cette requêtes mes sites amphibiens alors je suis sur mon module de comptage d'oiseaux d'eau :)

[EDIT] : Inversement je suis censé avoir que 92 sites :-)
image

[EDIT 2] : Je comprends, j'avais des types de sites génériques, il faut que j'en créé des spécifiques à chaque sous-module sinon il charge tous les sites du type identifié

@camillemonchicourt
Copy link
Member

OK donc il n'y a pas de régression au niveau du init_data, mais c'est bien lié à la 1.0.0 où il faut bien veiller à associer les types de sites aux sous-modules.

@camillemonchicourt
Copy link
Member

Monitoring 1.0.1 est sortie : https://github.com/PnX-SI/gn_module_monitoring/releases/tag/1.0.1
Elle améliore pas mal les performances de chargement.
Il reste des améliorations identifiées, dont certaines en cours, comme indiqué précédemment.

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

No branches or pull requests

3 participants