Compare commits

...

2 Commits

Author SHA1 Message Date
6ea54b1218 Add update-kuma monitoring tool 2024-02-17 18:49:44 +01:00
2fa462c0ee Update python, postgres, linux and textual notes 2023-07-29 08:29:54 +02:00
5 changed files with 149 additions and 11 deletions

View File

@@ -1,6 +1,6 @@
:PROPERTIES: :PROPERTIES:
:ID: 4fabfe6a-b104-464f-8a87-dfd7d761dbcc :ID: 4fabfe6a-b104-464f-8a87-dfd7d761dbcc
:mtime: 20220720145510 :mtime: 20221003215204
:ctime: 20211230101535 :ctime: 20211230101535
:END: :END:
#+title: Python #+title: Python
@@ -30,10 +30,12 @@ La méthode ~__repr__~ est utilisée pour le debug quand ~__str__~ pour l'utilis
** Functools module ** Functools module
*** [[id:25d994fd-375b-429d-af38-6afba818159f][functools.singledispatch]] *** [[id:25d994fd-375b-429d-af38-6afba818159f][functools.singledispatch]]
* Frameworks * Frameworks
** Web ** Web
*** [[id:26b04294-75e8-4043-a9a6-a20acd952963][Flask]] *** [[id:26b04294-75e8-4043-a9a6-a20acd952963][Flask]]
* UI * UI
** GUI ** GUI
*** [[https://kivy.org/#home][Kiwi]] *** [[https://kivy.org/#home][Kiwi]]
@@ -48,6 +50,7 @@ Bindings python pour Qt.
** Text UI ** Text UI
*** [[id:6cc56ee4-6d42-4d50-beb3-bb22a98298dd][textual]] *** [[id:6cc56ee4-6d42-4d50-beb3-bb22a98298dd][textual]]
* Outils * Outils
** Analyseur statique de code ** Analyseur statique de code
*** [[id:1d258869-5421-496a-b296-2d157ebdf3b6][mypy]] *** [[id:1d258869-5421-496a-b296-2d157ebdf3b6][mypy]]
@@ -61,11 +64,14 @@ Outil en ligne de commande permettant d'automatiser les tests dans multiples env
** Couverture de code ** Couverture de code
*** [[https://github.com/plasma-umass/slipcover][Slipcover]] *** [[https://github.com/plasma-umass/slipcover][Slipcover]]
Outil de mesure de couverture de code plus rapide que [[https://github.com/nedbat/coveragepy][coverage.py]]. Outil de mesure de couverture de code plus rapide que [[https://github.com/nedbat/coveragepy][coverage.py]].
** Debugger
*** [[https://github.com/ionelmc/python-manhole][Manhole]]
Service (interface via une socket Unix permettant l'accès à un REPL) permettant l'inspection d'un programme en cours d'exécution.
** Formatter ** Formatter
*** [[https://github.com/hhatto/autopep8][autopep8]] *** [[https://github.com/hhatto/autopep8][autopep8]]
Utilitaire formattant le code afin de respecter la [[https://www.python.org/dev/peps/pep-0008/][PEP8]] guideline. Il est basé sur l'analyse de code effectuée par Utilitaire formattant le code afin de respecter la [[https://www.python.org/dev/peps/pep-0008/][PEP8]] guideline. Il est basé sur l'analyse de code effectuée par
[[https://github.com/PyCQA/pycodestyle][pycodestyle]]. Autopep8 ne modifie que les espaces contenus dans le code (l'option ~--aggressive~ permet d'accroitre le [[https://github.com/PyCQA/pycodestyle][pycodestyle]]. ~Autopep8~ ne modifie que les espaces contenus dans le code (l'option ~--aggressive~ permet d'accroître le
pouvoir d'autopep8 et le laisser modifier le code). pouvoir d'~autopep8~ et le laisser modifier le code).
*** [[https://github.com/PyCQA/isort][isort]] *** [[https://github.com/PyCQA/isort][isort]]
Outil classant les imports par ordre alphabétique, les séparant par section et par type. Outil classant les imports par ordre alphabétique, les séparant par section et par type.
*** [[https://black.readthedocs.io/en/stable/][Black]] *** [[https://black.readthedocs.io/en/stable/][Black]]
@@ -81,6 +87,8 @@ Génération de données pouvant être utilisées pour:
* Créer des fichiers JSON ou XML d'après une structure arbitraire. * Créer des fichiers JSON ou XML d'après une structure arbitraire.
*** [[https://github.com/joke2k/faker][Faker]] *** [[https://github.com/joke2k/faker][Faker]]
Génération de données. Génération de données.
** Gestion dépendances
*** [[id:01f24d29-e833-4bfa-acb0-95140800d081][poetry]]
** Mockup ** Mockup
*** [[https://github.com/spulec/freezegun][FreezeGun]] *** [[https://github.com/spulec/freezegun][FreezeGun]]
Mockup du module [[https://docs.python.org/fr/3/library/datetime.html][datetime]] permettant de simuler des changements de temps. Mockup du module [[https://docs.python.org/fr/3/library/datetime.html][datetime]] permettant de simuler des changements de temps.
@@ -94,6 +102,8 @@ méthode et le temps passé).
/Memory profiler/ traçant les allocations mémoire dans le code Python, les modules extensions et l'interpréteur. /Memory profiler/ traçant les allocations mémoire dans le code Python, les modules extensions et l'interpréteur.
*** [[https://jiffyclub.github.io/snakeviz/][SnakeViz]] *** [[https://jiffyclub.github.io/snakeviz/][SnakeViz]]
Visualisation des rapports de /cProfile/ (web browser). Visualisation des rapports de /cProfile/ (web browser).
*** [[https://github.com/brandtbucher/specialist][Specialist]]
Outil permettant d'indiquer le code optimisé par la spécialisation du bécote (cf. [[https://peps.python.org/pep-0659/][PEP 659 Specializing Adaptive Interpreter]]).xo
*** [[https://github.com/nvdv/vprof][vprof]] *** [[https://github.com/nvdv/vprof][vprof]]
Profiling de programmes python permettant de surveiller le temps d'exécution et l'usage mémoire. Profiling de programmes python permettant de surveiller le temps d'exécution et l'usage mémoire.
~vprof -c hpm "<cmd>"~ ~vprof -c hpm "<cmd>"~
@@ -104,9 +114,6 @@ Outil permettant de tester la tenue en charge d'applications (initialement web s
** Traceur d'exécution de code ** Traceur d'exécution de code
*** [[https://github.com/ionelmc/python-hunter][Python-hunter]] *** [[https://github.com/ionelmc/python-hunter][Python-hunter]]
Traçage des appels de fonctions, du code exécuté et des valeurs retournées (vs. smiley, pytrace, PySnooper). Traçage des appels de fonctions, du code exécuté et des valeurs retournées (vs. smiley, pytrace, PySnooper).
** Debugger
*** [[https://github.com/ionelmc/python-manhole][Manhole]]
Service (interface via une socket Unix permettant l'accès à un REPL) permettant l'inspection d'un programme en cours d'exécution.
* Implémentations * Implémentations
** CPython ** CPython
@@ -121,6 +128,7 @@ Activation du mode développeur ~python -X dev~ ou ~PYTHONDEVMODE=1 python~ (cf.
Implémentation CPython optimisée par Instagram : Implémentation CPython optimisée par Instagram :
* [[https://engineering.fb.com/2022/05/02/open-source/cinder-jits-instagram/][Jit]] * [[https://engineering.fb.com/2022/05/02/open-source/cinder-jits-instagram/][Jit]]
* Modules intéressants * Modules intéressants
** Bases de données ** Bases de données
*** [[https://spark.apache.org/docs/latest/api/python/][PySpark]] *** [[https://spark.apache.org/docs/latest/api/python/][PySpark]]
@@ -157,6 +165,8 @@ Wrapper permettant l'accès au contenu de wikipedia.
*** [[https://github.com/ICRAR/ijson][ijson]] *** [[https://github.com/ICRAR/ijson][ijson]]
Parser JSON ne nécessitant pas que l'ensemble de la donnée soit chargée pour la parser (optimisation de la mémoire Parser JSON ne nécessitant pas que l'ensemble de la donnée soit chargée pour la parser (optimisation de la mémoire
consommée, cf. [[https://pythonspeed.com/articles/json-memory-streaming/][JSON memory streaming - Pythonspeed]]). consommée, cf. [[https://pythonspeed.com/articles/json-memory-streaming/][JSON memory streaming - Pythonspeed]]).
** Stockage des données
*** [[https://github.com/theskumar/python-dotenv][dotenv]]
** Surveillance de fichers ** Surveillance de fichers
*** [[https://watchfiles.helpmanual.io/][watchfiles]] *** [[https://watchfiles.helpmanual.io/][watchfiles]]
Surveillance de fichiers basé sur la librarie Rust /Notify/. Surveillance de fichiers basé sur la librarie Rust /Notify/.
@@ -166,6 +176,12 @@ Surveillance de fichiers basé sur la librarie Rust /Notify/.
*** [[https://scrapy.org/][scrapy]] *** [[https://scrapy.org/][scrapy]]
Framework d'extraction de données depuis des site web. Framework d'extraction de données depuis des site web.
* Modules amustants
*** [[https://github.com/gahjelle/pythonji][pythonji]]
Utilisation d'emojis pour l'écriture de code en Python
* Performances * Performances
** [[id:b9f392bd-bd45-4e9e-94ec-b19caedff86f][List vs tuple]] ** [[id:b9f392bd-bd45-4e9e-94ec-b19caedff86f][List vs tuple]]
** [[id:26e1fdfb-1f8e-4c62-a08f-468a56ab03c8][Peephole optimization]] ** [[id:26e1fdfb-1f8e-4c62-a08f-468a56ab03c8][Peephole optimization]]
@@ -198,6 +214,14 @@ Framework d'extraction de données depuis des site web.
* utiliser ~python -m pip~ et ~python -m venv~ (exécution du module en tant que script, au lieu de ~pip~ et ~virtualenv~) permet d'éviter les incohérences * utiliser ~python -m pip~ et ~python -m venv~ (exécution du module en tant que script, au lieu de ~pip~ et ~virtualenv~) permet d'éviter les incohérences
entre les différents répertoires des packages Python (cas lorsqu'un répertoire est présent dans le ~PYTHONPATH~ et qu'un autre l'est dans le ~PATH~). entre les différents répertoires des packages Python (cas lorsqu'un répertoire est présent dans le ~PYTHONPATH~ et qu'un autre l'est dans le ~PATH~).
* Optimisations
** Création automatique de constantes numériques lors de la génération du bytecode
#+BEGIN_SRC python :results output
y = x * 5 / 9 # Une multiplcation par un entier, suivie par une division par un entier
y = x * (5 / 9) # Le ratio 5 / 9 est calculé lors de la génération du bytecode associé à la ligne : une seule multiplication par un flottant lors de l'exécution de l'opération
#+END_SRC
A partir de Python3.11, les opérations entre types identiques (ie: int+int) peuvent être spécialisées (cf. [[https://www.youtube.com/watch?v=tNs18GDmAfg][Python Perf: Specializing, Adaptive Interpreter - Talk Python Live Stream - YouTube]] - augmentation des perfs).
* Tips * Tips
** [[id:24408701-21d8-4f4e-aed9-c58746df2244][Différence entre les opérateurs + et +=]] ** [[id:24408701-21d8-4f4e-aed9-c58746df2244][Différence entre les opérateurs + et +=]]
** [[id:a32ab138-f9a8-4d61-9c09-97953c5a0a92][type == object]] ** [[id:a32ab138-f9a8-4d61-9c09-97953c5a0a92][type == object]]

View File

@@ -1,6 +1,6 @@
:PROPERTIES: :PROPERTIES:
:ID: 171ce2f7-4028-47b0-b4e0-5a4a6ccb74ac :ID: 171ce2f7-4028-47b0-b4e0-5a4a6ccb74ac
:mtime: 20221229103915 :mtime: 20230729082927
:ctime: 20220104155310 :ctime: 20220104155310
:END: :END:
#+title: Postgres #+title: Postgres
@@ -86,6 +86,11 @@ Différents sites permettent de visualiser graphiquement les query plans:
* Payants: * Payants:
* [[https://app.pgmustard.com/login][PgMustard]] * [[https://app.pgmustard.com/login][PgMustard]]
** Audit
Possibilité de logger ou de stocker en base les ajout/modifications ou suppressions de donnéées:
* logs: [[https://www.pgaudit.org/]]
* En base: [[https://wiki.postgresql.org/wiki/Audit_trigger_91plus]] ([[https://github.com/2ndQuadrant/audit-trigger]])
* Références * Références
* [[https://stackoverflow.com/questions/45395538/postgres-md5-password-plain-password][Postgres: MD5 Password / Plain password - Github]] * [[https://stackoverflow.com/questions/45395538/postgres-md5-password-plain-password][Postgres: MD5 Password / Plain password - Github]]
* [[https://www.postgresql.org/docs/current/sql-explain.html][Sql-explain - PostgreSQL]] * [[https://www.postgresql.org/docs/current/sql-explain.html][Sql-explain - PostgreSQL]]

View File

@@ -1,6 +1,6 @@
:PROPERTIES: :PROPERTIES:
:ID: e7581fe3-f83f-4243-91ed-6ef7ade6a844 :ID: e7581fe3-f83f-4243-91ed-6ef7ade6a844
:mtime: 20220530204913 :mtime: 20220910172209
:ctime: 20220109134723 :ctime: 20220109134723
:END: :END:
#+title: Linux #+title: Linux
@@ -10,13 +10,18 @@
* Distributions * Distributions
** [[id:393342ff-bf38-4472-8713-3de5ebe43eca][Guix]] ** [[id:393342ff-bf38-4472-8713-3de5ebe43eca][Guix]]
* Gestionnaire de paquets
** [[id:4cb68913-62c6-43bb-835f-85237b2a8b40][apt]]
* Systèmes d'initialisation * Systèmes d'initialisation
** [[id:af912c20-4752-44ba-bdc0-99451ac0cd10][systemd]] ** [[id:af912c20-4752-44ba-bdc0-99451ac0cd10][systemd]]
* Gestionnaire de volumes logiques : [[id:f202b810-0fba-4c90-bc4c-f8cbc001fe88][LVM]] * Gestionnaire de volumes logiques :
** [[id:f202b810-0fba-4c90-bc4c-f8cbc001fe88][LVM]]
* Fonctionnalités * Fonctionnalités
** [[id:fad57303-ce0c-4ae4-9529-294f70ecfaa5][Inotify]] ** Surveillance de fichiers
*** [[id:fad57303-ce0c-4ae4-9529-294f70ecfaa5][Inotify]]
* Interpreteur de commandes * Interpreteur de commandes
** [[id:72eb2d10-5b92-4fb7-9e4e-1398bd933335][bash]] ** [[id:72eb2d10-5b92-4fb7-9e4e-1398bd933335][bash]]
@@ -25,3 +30,5 @@
** Parsing de contenu json (lib+bin) : [[id:83908b49-3945-4dce-8b26-2a5e4636df13][jq]] ** Parsing de contenu json (lib+bin) : [[id:83908b49-3945-4dce-8b26-2a5e4636df13][jq]]
** Transfert de données à un serveur (lib+bin) : [[id:5ea61eaa-7f37-464c-aa69-8251de8f81af][curl]] ** Transfert de données à un serveur (lib+bin) : [[id:5ea61eaa-7f37-464c-aa69-8251de8f81af][curl]]
** Template utilisant les variables d'environnement : [[https://manpage.me/?q=envsubst][envsubst]] ** Template utilisant les variables d'environnement : [[https://manpage.me/?q=envsubst][envsubst]]
** Lecture de fichiers
*** [[id:d5b19724-9559-44de-aef7-c4d57fb6dc95][batcat]]

View File

@@ -1,6 +1,6 @@
:PROPERTIES: :PROPERTIES:
:ID: 6cc56ee4-6d42-4d50-beb3-bb22a98298dd :ID: 6cc56ee4-6d42-4d50-beb3-bb22a98298dd
:mtime: 20220528185642 :mtime: 20220814131534
:ctime: 20220130153624 :ctime: 20220130153624
:END: :END:
#+title: textual #+title: textual
@@ -73,6 +73,11 @@ division(5, 0)
#+END_SRC #+END_SRC
#+RESULTS: #+RESULTS:
* Projets
** [[https://github.com/Traumatism/ToastCord][ToastCord - Github]]
** [[https://github.com/kraanzu/dooit][Dooit - Github]]
* Références * Références
* [[https://github.com/Textualize/textual][Textual - Github]] * [[https://github.com/Textualize/textual][Textual - Github]]
* [[https://github.com/Textualize/rich][Rich - Github]] * [[https://github.com/Textualize/rich][Rich - Github]]

View File

@@ -0,0 +1,97 @@
:PROPERTIES:
:ID: e5e49b61-ee56-4364-a96e-48d72217ef95
:mtime: 20240217184904
:ctime: 20240215223404
:END:
#+title: uptime-kuma
* Installation
#+BEGIN_SRC shell
cd /opt
mkdir uptime-kuma
chown ubuntu:ubuntu uptime-kuma/
git clone https://github.com/louislam/uptime-kuma.git
cd uptime-kuma
npm run setup
npm install vite
npm run build
useradd -m --system uptime
cat <<EOF > /usr/lib/systemd/system/update-kuma.service
[Unit]
Description=Uptime-Kuma - A free and open source uptime monitoring solution
Documentation=https://github.com/louislam/uptime-kuma
After=network.target
[Service]
Type=simple
User=uptime
WorkingDirectory=/opt/uptime-kuma
ExecStart=/bin/bash -c 'PATH=/home/uptime/.n/bin:$PATH npm run start-server'
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now uptime-kuma
cat <<EOF > /etc/nginx/sites-available/uptime
server {
server_name tools.adrien.run;
listen 80;
listen [::]:80;
return 404;
}
server {
server_name uptime.tools.adrien.run;
listen 443 ssl http2;
listen [::]:443 ssl http2;
# SSL configuration
include /etc/nginx/ssl.conf;
ssl_certificate /etc/letsencrypt/live/uptime.tools.adrien.run/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/uptime.tools.adrien.run/privkey.pem;
# Logging configuration
access_log /var/log/nginx/uptime.access.log;
error_log /var/log/nginx/uptime.error.log;
root /opt/uptime-kuma;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:3002/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
server {
server_name uptime.tools.adrien.run;
listen 80;
listen [::]:80;
if ($host = uptime.tools.adrien.run) {
return 301 https://$host$request_uri;
}
return 404;
}
EOF
systemctl restart nginx.service
certbot -d uptime.tools.adrien.run --nginx
#+END_SRC