Cette fonctionnalité remplace le champ texte "Project" dans les modals Slack par un dropdown dynamique qui récupère la liste des projets depuis l'API Tracker Catalog.
- Liste des projets récupérée depuis
/api/v1alpha1/catalogs/list - Filtrage automatique des éléments de type "project"
- Tri alphabétique des projets
- Fallback automatique vers champ texte en cas d'erreur
- TTL : 1 heure (configurable)
- Thread-safe : Utilisation de mutex pour la concurrence
- Double-check locking : Évite les appels API redondants
- Fallback : Utilise les données en cache même expirées si l'API est indisponible
- Cron job : Toutes les heures (
0 * * * *) - Initialisation : Au démarrage de l'application (asynchrone)
- Manuel : Via l'endpoint
/cache/status
catalog.go: Gestion du cache et appels APImodal_helpers.go: Fonctions utilitaires pour les dropdownsPROJECT_DROPDOWN.md: Cette documentation
main.go: Initialisation du cache et tâche cronslack_modal.go: Remplacement des champs texte par des dropdownsslack.go: Extraction des valeurs du dropdown dans les modals
Endpoint de santé de l'application
{"status":"ok"}Statistiques du cache des projets
{
"project_count": 15,
"last_updated": "2024-12-17T06:45:00Z",
"ttl_seconds": 3600,
"is_expired": false,
"age_seconds": 300
}TRACKER_HOST=https://your-tracker-api.comModifiable dans catalog.go :
var projectCache = &ProjectCache{
ttl: 1 * time.Hour, // Modifier ici
}[INFO] Initializing project cache...
[INFO] Fetching projects from: https://tracker-api/api/v1alpha1/catalogs/list
[INFO] Found 15 projects in catalog
[INFO] Cache updated: 15 projects loaded
[INFO] Project cache initialized successfully
[INFO] Created project dropdown with 15 options
[INFO] Cache hit: returning 15 projects from cache
[INFO] Cache miss: fetching projects from API...
[INFO] Cache updated: 15 projects loaded
[WARN] Error fetching projects from API: connection timeout
[INFO] Using stale cache data: 15 projects
[INFO] Created project text input (fallback)
Tous les modals incluent maintenant le dropdown des projets :
- Deployment (
/deployment) - Drift (
/drift) - Incident (
/incident)
Le modal RPA Usage (/rpa_usage) n'a pas de champ projet.
- Cache expiré + API OK → Rafraîchir le cache
- Cache expiré + API KO → Utiliser cache périmé si disponible
- Pas de cache + API KO → Champ texte
- Dropdown vide → Champ texte
- Timeout API : 10 secondes
- Logs détaillés pour le debugging
- Pas de blocage de l'application
- Démarrer l'application :
skaffold dev - Exécuter
/deploymentdans Slack - Vérifier que le dropdown apparaît avec la liste des projets
- Tester le fallback en coupant l'API Tracker
curl http://localhost:8080/cache/status- Génération de modal : < 50ms (cache hit)
- Premier chargement : < 2s (appel API)
- Mémoire : ~1KB par projet en cache
- Réseau : 1 appel API par heure maximum
- Cache en mémoire (pas de base de données)
- Appels API asynchrones
- Tri des projets fait une seule fois
- Réutilisation des données en cas d'erreur
- Erreurs d'appel API
- Échecs de parsing JSON
- Timeouts de connexion
- Statistiques de cache (hit/miss)
- Nombre de projets en cache
- Âge du cache
- Fréquence des rafraîchissements
- Taux d'erreur API