-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest-clickhouse-api.sh
More file actions
executable file
·156 lines (137 loc) · 5.49 KB
/
test-clickhouse-api.sh
File metadata and controls
executable file
·156 lines (137 loc) · 5.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#!/bin/bash
# Script de test de l'API HTTP ClickHouse pour le composant LiveClickHouseStats
set -e
echo "🧪 Test de l'API HTTP ClickHouse"
echo "=================================="
echo ""
# Colors
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
CH_URL="http://localhost:8123"
USER="admin"
PASS="admin"
# Test 1: Ping
echo -e "${BLUE}1️⃣ Test de connexion (ping)...${NC}"
if curl -s "${CH_URL}/ping" | grep -q "Ok."; then
echo -e "${GREEN}✅ ClickHouse répond${NC}"
else
echo -e "${RED}❌ ClickHouse ne répond pas${NC}"
echo " Vérifier : docker ps | grep clickhouse"
exit 1
fi
echo ""
# Test 2: Version
echo -e "${BLUE}2️⃣ Version de ClickHouse...${NC}"
VERSION=$(curl -s "${CH_URL}/?query=SELECT%20version()&user=${USER}&password=${PASS}")
echo -e "${GREEN}✅ Version: ${VERSION}${NC}"
echo ""
# Test 3: Vérifier la base de données
echo -e "${BLUE}3️⃣ Vérification de la base 'streaming_demo'...${NC}"
DBS=$(curl -s "${CH_URL}/?query=SHOW%20DATABASES&user=${USER}&password=${PASS}")
if echo "$DBS" | grep -q "streaming_demo"; then
echo -e "${GREEN}✅ Base de données 'streaming_demo' existe${NC}"
else
echo -e "${RED}❌ Base de données 'streaming_demo' n'existe pas${NC}"
exit 1
fi
echo ""
# Test 4: Vérifier la table bets
echo -e "${BLUE}4️⃣ Vérification de la table 'bets'...${NC}"
TABLES=$(curl -s "${CH_URL}/?query=SHOW%20TABLES%20FROM%20streaming_demo&user=${USER}&password=${PASS}")
if echo "$TABLES" | grep -q "bets"; then
echo -e "${GREEN}✅ Table 'bets' existe${NC}"
else
echo -e "${RED}❌ Table 'bets' n'existe pas${NC}"
exit 1
fi
echo ""
# Test 5: Compter les paris
echo -e "${BLUE}5️⃣ Comptage des paris...${NC}"
COUNT=$(curl -s "${CH_URL}/?query=SELECT%20count()%20FROM%20streaming_demo.bets&user=${USER}&password=${PASS}")
echo -e "${GREEN}✅ Nombre de paris: ${COUNT}${NC}"
if [ "$COUNT" -eq 0 ]; then
echo -e "${YELLOW}⚠️ Aucune donnée présente${NC}"
echo " Attendez que les producteurs envoient des données..."
echo " Vérifier : docker logs streaming-producer"
else
echo -e "${GREEN}🎉 Des données sont présentes !${NC}"
fi
echo ""
# Test 6: Requête principale du composant (JSON)
echo -e "${BLUE}6️⃣ Test de la requête principale (format JSON)...${NC}"
QUERY="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.bets"
ENCODED_QUERY=$(echo "$QUERY" | jq -sRr @uri)
RESULT=$(curl -s "${CH_URL}/?query=${ENCODED_QUERY}&default_format=JSON&user=${USER}&password=${PASS}")
echo "Résultat:"
echo "$RESULT" | jq '.'
if echo "$RESULT" | jq -e '.data[0].totalBets' > /dev/null 2>&1; then
echo -e "${GREEN}✅ Requête principale fonctionne${NC}"
TOTAL_BETS=$(echo "$RESULT" | jq -r '.data[0].totalBets')
TOTAL_AMOUNT=$(echo "$RESULT" | jq -r '.data[0].totalAmount')
echo -e "${GREEN} 📊 ${TOTAL_BETS} paris pour un total de ${TOTAL_AMOUNT}€${NC}"
else
echo -e "${RED}❌ Erreur dans la requête principale${NC}"
exit 1
fi
echo ""
# Test 7: Requête top sports
echo -e "${BLUE}7️⃣ Test de la requête top sports...${NC}"
QUERY2="SELECT sport, count() as count FROM streaming_demo.bets WHERE timestamp >= now() - INTERVAL 1 HOUR GROUP BY sport ORDER BY count DESC LIMIT 5"
ENCODED_QUERY2=$(echo "$QUERY2" | jq -sRr @uri)
RESULT2=$(curl -s "${CH_URL}/?query=${ENCODED_QUERY2}&default_format=JSON&user=${USER}&password=${PASS}")
echo "Résultat:"
echo "$RESULT2" | jq '.'
if echo "$RESULT2" | jq -e '.data' > /dev/null 2>&1; then
echo -e "${GREEN}✅ Requête top sports fonctionne${NC}"
if [ "$(echo "$RESULT2" | jq '.data | length')" -gt 0 ]; then
echo -e "${GREEN} 🏆 Top sports:${NC}"
echo "$RESULT2" | jq -r '.data[] | " - \(.sport): \(.count) paris"'
else
echo -e "${YELLOW} ⚠️ Pas encore de données dans la dernière heure${NC}"
fi
else
echo -e "${RED}❌ Erreur dans la requête top sports${NC}"
exit 1
fi
echo ""
# Test 8: Test CORS (important pour le navigateur)
echo -e "${BLUE}8️⃣ Test des headers CORS...${NC}"
CORS_HEADERS=$(curl -s -I "${CH_URL}/ping" | grep -i "access-control")
if [ -n "$CORS_HEADERS" ]; then
echo -e "${GREEN}✅ CORS activé${NC}"
echo "$CORS_HEADERS" | sed 's/^/ /'
else
echo -e "${YELLOW}⚠️ Pas de headers CORS détectés (peut fonctionner quand même)${NC}"
fi
echo ""
# Résumé
echo "=================================="
echo -e "${GREEN}✅ Tous les tests sont passés !${NC}"
echo ""
echo "📋 Configuration pour le composant Vue.js:"
echo " - URL: ${CH_URL}"
echo " - User: ${USER}"
echo " - Password: ${PASS}"
echo " - Database: streaming_demo"
echo " - Table: bets"
echo ""
if [ "$COUNT" -gt 0 ]; then
echo -e "${GREEN}🚀 Le composant LiveClickHouseStats devrait fonctionner !${NC}"
echo ""
echo "Pour tester:"
echo " 1. npm run dev"
echo " 2. Aller à la slide 'Statistiques Temps Réel depuis ClickHouse'"
echo " 3. Observer les données se rafraîchir toutes les 3 secondes"
else
echo -e "${YELLOW}⚠️ Attendez que des données arrivent avant de tester le composant${NC}"
echo ""
echo "Pour générer des données:"
echo " docker-compose up -d streaming-producer"
echo " docker logs streaming-producer -f"
echo ""
echo "Puis relancer ce script dans 30 secondes"
fi
echo ""