123 lines
6.7 KiB
Markdown
123 lines
6.7 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`.
|
|
- Ajout des artefacts WAPT generes `certificate.crt`, `manifest.sha256` et `signature.sha256` dans `.gitignore`.
|
|
|
|
### Correction protocole Odoo JSON-RPC
|
|
|
|
- Analyse d'une erreur `RPC.jsonrpc() missing 1 required positional argument: 'service'` lors de `wapt-get audit`.
|
|
- Remplacement du payload direct `model/method/args` par le protocole JSON-RPC Odoo standard :
|
|
- `service=common`, `method=authenticate` pour obtenir le `uid` ;
|
|
- `service=object`, `method=execute_kw` pour appeler `helpdesk.ticket.search_read`.
|
|
- Ajout des champs `odoo.database` et `odoo.username` dans `ticketing.ini.example`.
|
|
- Support optionnel de `odoo.uid` pour eviter l'authentification si l'identifiant utilisateur est deja connu.
|
|
- Mise a jour des tests unitaires pour verifier les appels `authenticate` et `execute_kw`.
|
|
|
|
### Ajustement WAPT/control
|
|
|
|
- Passage de `target_os` de `windows` a `all` dans `WAPT/control`.
|
|
- Incrementation de la version WAPT de `0.1.0-2` a `0.1.0-3`.
|
|
- Correction de version demandee : passage de `0.1.0-3` a `0.1-10` pour rattraper les increments precedents.
|
|
- Attention : `target_os` fait partie des attributs signes, le paquet doit etre regenere/resigne avant publication.
|
|
- Regle projet retenue : incrementer `WAPT/control:version` a chaque nouvelle version du paquet.
|
|
|
|
### Notification Rocket.Chat plus detaillee
|
|
|
|
- Recuperation de champs Odoo supplementaires par defaut : `name`, `stage_id`, `partner_id`, `user_id`.
|
|
- Ajout de l'option `odoo.fields` pour ajuster les champs lus par `search_read`.
|
|
- Ajout de l'option `notification.max_tickets` pour limiter le nombre de lignes detaillees dans Rocket.Chat.
|
|
- Remplacement du message brut contenant seulement une liste d'IDs par un message avec nombre total, titre, statut, client, assigne, date courante et ancienne date quand disponible.
|
|
- Incrementation de la version WAPT locale de `0.1-11` a `0.1-12`.
|