Files
comi-odoo-ticketing/TRAVAIL.md
T

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`.