diff --git a/README.md b/README.md index 014e6869f18a0dc2ee1fab11b2c32d7b3d263890..a757f17e48f75a2523513fdf8573c1372017e6c9 100644 --- a/README.md +++ b/README.md @@ -107,7 +107,7 @@ Ou avec couverture (`pip install pytest-cov`) #### Utilisation des tests unitaires pour initialiser la base de dev On peut aussi utiliser les tests unitaires pour mettre la base de données de développement dans un état connu, par exemple pour éviter de -recréer à la main étudianst et semestres quand on développe. +recréer à la main étudiants et semestres quand on développe. Il suffit de positionner une variable d'environnement indiquant la BD utilisée par les tests: @@ -151,7 +151,25 @@ Si la base utilisée pour les dev n'est plus en phase avec les scripts de migration, utiliser les commandes `flask db history`et `flask db stamp`pour se positionner à la bonne étape. -# Paquet debian 11 +### Profiling + +Sur une machine de DEV, lancer + + flask profile --host 0.0.0.0 --length 32 --profile-dir /opt/scodoc-data + +le fichier `.prof` sera alors écrit dans `/opt/scoidoc-data` (on peut aussi utiliser `/tmp`). + +Pour la visualisation, [snakeviz](https://jiffyclub.github.io/snakeviz/) est bien: + + pip install snakeviz + +puis + + snakeviz -s --hostname 0.0.0.0 -p 5555 /opt/scodoc-data/GET.ScoDoc......prof + + + +# Paquet Debian 11 Les scripts associés au paquet Debian (.deb) sont dans `tools/debian`. Le plus important est `postinst`qui se charge de configurer le système (install ou diff --git a/scodoc.py b/scodoc.py index 68ed60764252fd8fa0b2cd900b3212fe2402dc0f..f2c2b3d92b268c117508fd93cba62834955af39f 100755 --- a/scodoc.py +++ b/scodoc.py @@ -329,3 +329,27 @@ def recursive_help(cmd, parent=None): @app.cli.command() def dumphelp(): recursive_help(app.cli) + + +@app.cli.command() +@click.option("-h", "--host", default="127.0.0.1", help="The interface to bind to.") +@click.option("-p", "--port", default=5000, help="The port to bind to.") +@click.option( + "--length", + default=25, + help="Number of functions to include in the profiler report.", +) +@click.option( + "--profile-dir", default=None, help="Directory where profiler data files are saved." +) +def profile(host, port, length, profile_dir): + """Start the application under the code profiler.""" + from werkzeug.middleware.profiler import ProfilerMiddleware + from werkzeug.serving import run_simple + + app.wsgi_app = ProfilerMiddleware( + app.wsgi_app, restrictions=[length], profile_dir=profile_dir + ) + run_simple( + host, port, app, use_debugger=False + ) # use run_simple instead of app.run()