Ce dossier contient les composants Vue.js personnalisés utilisés dans la présentation Slidev.
Composant temps réel qui interroge l'API HTTP de ClickHouse pour afficher des statistiques dynamiques.
- ✅ Requêtes HTTP directes à ClickHouse (port 8123)
- ✅ Rafraîchissement automatique toutes les 3 secondes (configurable)
- ✅ KPIs en temps réel :
- Nombre total de paris
- Montant total parié
- Pari moyen
- Clients uniques
- ✅ Top 5 sports de la dernière heure avec graphiques animés
- ✅ Statistiques additionnelles :
- Taux d'acceptation
- Débit actuel (paris/seconde)
- Heure du dernier pari
- ✅ Animations CSS :
- Flash lors de nouveaux paris
- Barres de progression animées
- Transitions fluides
- ✅ Calculs de delta : affiche l'évolution par minute
- ✅ Gestion d'erreurs avec affichage informatif
---
layout: full
---
# Titre de la slide
<LiveClickHouseStats :refresh-interval="3000" />| Prop | Type | Défaut | Description |
|---|---|---|---|
refreshInterval |
Number | 3000 | Intervalle de rafraîchissement en ms |
clickhouseUrl |
String | http://localhost:8123 |
URL de l'API HTTP ClickHouse |
Le composant exécute deux requêtes en parallèle :
SELECT
count() as totalBets,
sum(amount) as totalAmount,
avg(amount) as avgBet,
uniqExact(customer_id) as uniqueCustomers,
countIf(status = 'accepted') / count() * 100 as acceptanceRate,
max(timestamp) as lastBetTime,
now() as currentTime
FROM streaming_demo.betsSELECT
sport,
count() as count
FROM streaming_demo.bets
WHERE timestamp >= now() - INTERVAL 1 HOUR
GROUP BY sport
ORDER BY count DESC
LIMIT 5Le composant utilise l'authentification par paramètres URL :
- User :
admin - Password :
admin
⚠️ Production : Utilisez des variables d'environnement sécurisées
Le composant utilise :
- Palette de couleurs : Dégradés bleu-vert (#4ecdc4, #44a08d)
- Background : Dégradé sombre (#1e1e2e → #2a2a3e)
- Animations :
pulse: indicateur de connexionflash: mise en évidence des changementsslideIn: apparition des éléments de listespin: loader de chargement
Le composant gère les cas suivants :
- ✅ ClickHouse non démarré : affiche un message d'erreur clair
- ✅ Pas de données : affiche des valeurs à 0
- ✅ Erreur réseau : affiche l'erreur avec instruction
- ✅ Loading state : spinner animé
Pour tester le composant :
-
Démarrer l'architecture :
docker-compose up -d
-
Attendre que les données arrivent (30-60 secondes)
-
Vérifier l'API ClickHouse :
curl "http://localhost:8123/?query=SELECT%20count()%20FROM%20streaming_demo.bets&user=admin&password=admin" -
Lancer Slidev :
npm run dev
-
Naviguer vers la slide avec le composant (juste après "Démo Time!")
- Requêtes : ~50-100ms par requête ClickHouse
- Rafraîchissement : 3 secondes par défaut
- Overhead : Minimal grâce aux requêtes parallèles
- Bande passante : ~2-5KB par refresh
-
onMounted :
- Exécute la première requête immédiatement
- Démarre l'intervalle de rafraîchissement
- Démarre le compteur de secondes
-
fetchStats (tous les 3s) :
- Sauvegarde les stats précédentes
- Exécute les requêtes ClickHouse
- Calcule les deltas
- Déclenche les animations si changement
-
onUnmounted :
- Nettoie les intervalles
- Évite les memory leaks
- Ajuster le refresh : Pour une démo plus spectaculaire, réduire à 1000ms
- Personnaliser les couleurs : Modifier les variables CSS dans
<style scoped> - Ajouter des métriques : Ajouter des queries dans
fetchStats() - Changer le layout : Modifier
.kpi-gridpour plus/moins de KPIs
Le composant affiche "Connexion à ClickHouse..."
- Vérifier que ClickHouse est démarré :
docker ps | grep clickhouse - Vérifier le port 8123 :
curl http://localhost:8123/ping
Erreur CORS
- ClickHouse autorise CORS par défaut sur l'API HTTP
- Si problème, vérifier la config ClickHouse
Pas de données
- Attendre que les producteurs envoient des données
- Vérifier :
docker logs streaming-producer - Exécuter :
./verify-avro.sh
Erreur d'authentification
- Vérifier user/password dans docker-compose.yml
- Default : admin/admin
- Graphiques avec Chart.js ou ECharts
- WebSocket pour push temps réel
- Historique avec graphique temporel
- Alertes visuelles sur seuils
- Export des données
- Comparaison période précédente
- Carte géographique des paris
- Filtrage par sport/client