# Rapport d'audit — Éléments inutilisés et problèmes identifiés > Généré le 2026-02-18 — branche `feature/event` --- ## 1. Bugs critiques corrigés dans cette session | Fichier | Ligne | Description | Statut | |---------|-------|-------------|--------| | `entrypoint.go` | 652, 664, 676, 688 | `fmt.Errorf(res.Err)` → format string non-constant (erreur de build) | ✅ Corrigé | | `models/utils/abstracts.go` | 136 | `VerifyAuth` déréférençait `request.Admin` avant de vérifier `request != nil` | ✅ Corrigé | | `models/utils/abstracts.go` | 68-78 | `DeepCopy()` faisait `Unmarshal` dans un pointeur nil → retournait toujours `nil` | ✅ Corrigé | | `models/resources/resource.go` | 176 | `instances = append(instances)` — argument manquant, l'instance n'était jamais ajoutée | ✅ Corrigé | | `models/resources/priced_resource.go` | 63-69 | Code mort après `return true` dans `IsBooked()` | ✅ Corrigé | | `tools/remote_caller.go` | 118 | `CallDelete` vérifiait `req.Body == nil` (toujours vrai pour DELETE), court-circuitant la lecture de la réponse | ✅ Corrigé | --- ## 2. Debug prints à supprimer (fmt.Println en production) Ces appels `fmt.Println` polluent stdout et peuvent exposer des informations sensibles. | Fichier | Lignes | Contenu | |---------|--------|---------| | `models/bill/bill.go` | ~197 | `fmt.Println(err)` | | `models/collaborative_area/collaborative_area_mongo_accessor.go` | ~95, 109, 118, 123 | Debug sur `res`, `sharedWorkspace.AllowedPeersGroup`, `canFound`, `peerskey` | | `models/peer/peer_cache.go` | ~44, 55 | URL et `"Launching peer execution on..."` | | `models/resources/storage.go` | ~196 | `fmt.Println("GetPriceHT", ...)` | | `models/workflow/workflow.go` | ~158, 164, 170, 176 | 4× `fmt.Println(err)` | | `tools/nats_caller.go` | ~110, 117, 122, 126 | 4× `fmt.Println()` divers | | `tools/remote_caller.go` | 227 | `fmt.Println("Error reading the body...")` (devrait utiliser le logger) | | `dbs/dbs.go` | 47 | `fmt.Println("Recovered. Error:\n", r, debug.Stack())` | > **Note :** `priced_resource.go` et `data.go` corrigés dans cette session. --- ## 3. Code commenté significatif ### 3.1 Validation de pricing désactivée (workflow) **Fichier :** `models/workflow/workflow.go` — ~lignes 631-634 ```go // Should be commented once the Pricing selection feature has been implemented // if priced.SelectPricing() == nil { // return resources, priceds, errors.New("no pricings are selected... can't proceed") // } ``` Une vérification de sécurité critique est désactivée. Sans elle, des ressources sans pricing peuvent être traitées silencieusement. ### 3.2 PAY_PER_USE — stratégie supprimée mais traces restantes **Fichier :** `models/common/pricing/pricing_strategy.go` — lignes 47, 61-63 ```go // PAY_PER_USE // per request. ( unpredictible ) /*case PAY_PER_USE: return bs, true*/ ``` La constante `PAY_PER_USE` a été supprimée mais les commentaires laissés créent de la confusion. ### 3.3 Vérification d'autorisation peer désactivée **Fichier :** `models/resources/resource.go` — lignes 98-104 ```go /*if ok, _ := utils.IsMySelf(request.PeerID, ...); ok {*/ profile = pricing.GetDefaultPricingProfile() /*} else { return nil, errors.New("no pricing profile found") }*/ ``` Le profil par défaut est retourné sans vérifier si le pair est bien `myself`. Sécurité à revoir. --- ## 4. Logique erronée non corrigée (à traiter) ### 4.1 IsTimeStrategy — logique inversée **Fichier :** `models/common/pricing/pricing_strategy.go` — ligne 88 ```go func IsTimeStrategy(i int) bool { return len(TimePricingStrategyList()) < i // BUG: devrait être ">" } ``` La condition est inversée. Retourne `true` pour des valeurs hors de la liste. Fonction actuellement non utilisée (voir §5). ### 4.2 IsBillingStrategyAllowed — case SUBSCRIPTION sans retour **Fichier :** `models/common/pricing/pricing_strategy.go` — lignes 54-65 ```go case SUBSCRIPTION: /*case PAY_PER_USE: return bs, true*/ // Aucun return ici → tombe dans le default ``` Le cas `SUBSCRIPTION` ne retourne rien explicitement, ce qui est trompeur. --- ## 5. Éléments inutilisés ### 5.1 Fonction jamais appelée | Symbole | Fichier | Ligne | |---------|---------|-------| | `IsTimeStrategy(i int) bool` | `models/common/pricing/pricing_strategy.go` | 88 | De plus, cette fonction a une logique erronée (voir §4.1). ### 5.2 Variable singleton inutilisée | Symbole | Fichier | Ligne | |---------|---------|-------| | `HTTPCallerInstance` | `tools/remote_caller.go` | 57 | Déclarée comme singleton mais jamais utilisée — de nouvelles instances sont créées via `NewHTTPCaller()`. --- ## 6. Tests supprimés (couverture perdue) Les fichiers suivants ont été supprimés sur la branche `feature/event` et la couverture correspondante n'est plus assurée : | Fichier supprimé | Modèles non couverts | |------------------|----------------------| | `models/peer/tests/peer_cache_test.go` | `PeerCache` — logique d'exécution distribuée | | `models/peer/tests/peer_test.go` | `Peer` — modèle et accesseur | | `models/utils/tests/abstracts_test.go` | `AbstractObject` — méthodes de base | | `models/utils/tests/common_test.go` | `GenericStoreOne`, `GenericDeleteOne`, etc. | | `models/workflow_execution/tests/workflow_test.go` | `WorkflowExecution` — modèle et accesseur | > `models/order/tests/order_test.go` existe mais ne contient **aucune fonction de test**. --- ## 7. Fautes d'orthographe dans les identifiants publics Ces typos sont dans des noms exportés (API publique) — les corriger est un **breaking change**. ### 7.1 `Instanciated` → `Instantiated` Apparaît 50+ fois dans les types exportés centraux : - `AbstractInstanciatedResource[T]` (resource.go, compute.go, data.go, storage.go, processing.go, workflow.go) - `AbstractInstanciatedResource.Instances` - Tests : `resources.AbstractInstanciatedResource[*MockInstance]{...}` ### 7.2 `ressource` → `resource` (dans les messages d'erreur) **Fichier :** `entrypoint.go` — messages dans `LoadOneStorage`, `LoadOneComputing`, etc. ```go "Error while loading storage ressource " + storageId // "ressource" est du français ``` ### 7.3 `GARANTED` → `GUARANTEED` **Fichiers :** `models/common/pricing/pricing_profile.go`, `models/resources/storage.go` ```go GARANTED_ON_DELAY // pricing_profile.go:72 GARANTED // pricing_profile.go:73 GARANTED_ON_DELAY_STORAGE // storage.go:106 GARANTED_STORAGE // storage.go:107 ``` ### 7.4 `CREATE_EXECTUTION` → `CREATE_EXECUTION` **Fichier :** `tools/nats_caller.go` — ligne 34 ```go CREATE_EXECTUTION // faute de frappe dans la constante enum ``` ### 7.5 `PROPALGATION` → `PROPAGATION` **Fichier :** `tools/nats_caller.go` — lignes 29, 45, 56 ```go "propalgation event" // et PROPALGATION_EVENT ``` --- ## 8. Incohérences de nommage mineures | Fichier | Problème | |---------|----------| | `models/resources/interfaces.go:19` | Paramètre `instance_id` en snake_case dans une signature Go (devrait être `instanceID`) | | `entrypoint.go:505` | Message de panique dans `CopyOne` dit `"Panic recovered in UpdateOne"` | | `tools/remote_caller.go:110` | Commentaire `// CallPut calls the DELETE method` (copie-colle incorrect) | --- ## 9. Résumé | Catégorie | Nombre | Priorité | |-----------|--------|----------| | Bugs critiques corrigés | 6 | ✅ Fait | | Debug `fmt.Println` restants | 15+ | 🔴 Haute | | Code commenté important | 3 | 🟠 Moyenne | | Logique erronée (non corrigée) | 2 | 🟠 Moyenne | | Éléments inutilisés | 2 | 🟡 Faible | | Tests supprimés (couverture perdue) | 5 fichiers | 🟠 Moyenne | | Typos dans API publique | 5 types | 🟡 Faible (breaking change) | | Incohérences mineures | 3 | 🟢 Très faible |