96 lines
4.9 KiB
Markdown
96 lines
4.9 KiB
Markdown
# Journal de travail
|
|
|
|
Ce fichier consigne les interventions Codex sur le projet afin de garder une trace exploitable des analyses, decisions et suites a traiter.
|
|
|
|
## 2026-06-24
|
|
|
|
### Demande
|
|
|
|
- Analyser le projet.
|
|
- Creer un README et le maintenir a jour.
|
|
- Alimenter un fichier Markdown dedie au travail effectue.
|
|
|
|
### Analyse realisee
|
|
|
|
- Le depot contient un script WAPT principal `setup.py`.
|
|
- Le script surveille les tickets Odoo Helpdesk via JSON-RPC.
|
|
- Il compare les champs `id` et `write_date` avec un etat local `tickets_state.pkl`.
|
|
- Il notifie Rocket.Chat via un webhook configure dans `rocket.ini`.
|
|
- Le fichier `tickets_state.pkl` initial a ete inspecte avec `pickletools` sans charger le pickle comme code executable ; il contient actuellement un dictionnaire vide.
|
|
- `.env` contient des chemins Windows vers l'environnement WAPT.
|
|
|
|
### Fichiers ajoutes
|
|
|
|
- `README.md` : documentation du projet, fonctionnement, prerequis, configuration, risques et ameliorations recommandees.
|
|
- `TRAVAIL.md` : journal de travail maintenu par Codex.
|
|
|
|
### Points techniques identifies
|
|
|
|
- Bug bloquant probable dans `setup.py` : `tickets_updated.auppend(ticket_id)` doit etre corrige en `tickets_updated.append(ticket_id)`.
|
|
- Secrets presents en clair :
|
|
- cle API Odoo dans `setup.py` ;
|
|
- webhook Rocket.Chat dans `rocket.ini`.
|
|
- `pickle.load()` est sensible si le fichier d'etat peut etre modifie par une source non fiable.
|
|
- `db` et `xmlrpc.client` semblent inutilises.
|
|
- Le chemin de `tickets_state.pkl` est relatif au repertoire courant.
|
|
|
|
### Suites recommandees
|
|
|
|
1. Corriger la faute `auppend`.
|
|
2. Sortir les secrets du depot.
|
|
3. Remplacer l'etat pickle par JSON.
|
|
4. Ajouter un test minimal sur la detection des tickets modifies.
|
|
5. Verifier la conformite du payload JSON-RPC avec l'API Odoo reellement exposee.
|
|
|
|
### Modification configuration secrete
|
|
|
|
- Retrait de la cle API Odoo codee en dur dans `setup.py`.
|
|
- Remplacement du webhook reel par des placeholders.
|
|
- Centralisation de la configuration sensible dans `ticketing.ini.example`, copiee en prive sous le nom `ticketing.ini` :
|
|
- `rocket.webhook_url`
|
|
- `odoo.url`
|
|
- `odoo.api_key`
|
|
- `odoo.model`
|
|
- `install()` copie le fichier INI modele vers `WAPT.private_dir/ticketing.ini` uniquement s'il n'existe pas deja, afin de ne pas ecraser une configuration renseignee sur la machine cible.
|
|
- `audit()` charge maintenant l'URL Odoo et la cle API depuis le fichier INI prive.
|
|
- `send_to_rocket()` charge maintenant le webhook depuis le fichier INI prive.
|
|
- Correction du bug `tickets_updated.auppend(ticket_id)` en `tickets_updated.append(ticket_id)`.
|
|
- Deplacement du fichier d'etat vers `WAPT.private_dir/tickets_state.pkl` pour eviter de dependre du repertoire courant.
|
|
- Ajout d'une validation explicite des placeholders `CHANGE_ME...` pour eviter une execution avec une configuration non renseignee.
|
|
- Ajout de `.gitignore` pour eviter de versionner un `ticketing.ini` rempli localement et un futur fichier d'etat runtime.
|
|
|
|
## 2026-07-24
|
|
|
|
### Analyse des ameliorations possibles
|
|
|
|
- Remplacer `pickle` par JSON pour le fichier d'etat runtime.
|
|
- Extraire la recuperation Odoo, la comparaison d'etat et l'envoi Rocket.Chat dans des fonctions testables.
|
|
- Ajouter des timeouts explicites aux appels HTTP Odoo et Rocket.Chat.
|
|
- Faire echouer l'audit si l'appel Odoo echoue, afin d'eviter d'ecraser l'etat avec une liste vide en cas d'indisponibilite.
|
|
- Utiliser `response.raise_for_status()` aussi pour l'appel Rocket.Chat.
|
|
- Ajouter des tests unitaires sur la detection des tickets nouveaux ou modifies.
|
|
- Retirer du depot le reliquat `tickets_state.pkl`, aujourd'hui remplace par l'etat stocke dans `WAPT.private_dir`.
|
|
- Ajouter un fichier de controle WAPT si le depot doit etre un paquet complet.
|
|
- Mettre en place une rotation des secrets deja presents dans l'historique Git.
|
|
|
|
### Mise en oeuvre des ameliorations
|
|
|
|
- Remplacement de l'etat runtime `tickets_state.pkl` par `tickets_state.json`.
|
|
- Suppression de l'utilisation de `pickle` dans le code.
|
|
- Ajout des fonctions testables :
|
|
- `build_odoo_payload()`
|
|
- `fetch_odoo_tickets()`
|
|
- `load_tickets_state()`
|
|
- `save_tickets_state()`
|
|
- `build_tickets_state()`
|
|
- `get_updated_ticket_ids()`
|
|
- Ajout d'un timeout HTTP configurable via `http.timeout`, avec valeur par defaut a 30 secondes.
|
|
- Durcissement de l'appel Odoo : les erreurs HTTP, les erreurs JSON-RPC et les reponses sans `result` font echouer l'audit au lieu de sauvegarder un etat vide.
|
|
- Durcissement de l'appel Rocket.Chat avec `raise_for_status()`.
|
|
- Ajout de `tests/test_ticketing.py` pour valider la comparaison des tickets et la lecture/ecriture JSON.
|
|
- Suppression du reliquat `tickets_state.pkl` du repertoire projet.
|
|
- Mise a jour de `README.md`, `ticketing.ini.example` et `.gitignore`.
|
|
- Ajout de tests avec mocks `requests` sur `fetch_odoo_tickets()` et `send_to_rocket()`.
|
|
- Ajout d'un fichier `WAPT/control` minimal.
|
|
- Documentation du payload JSON-RPC Odoo attendu dans `README.md`.
|