8.3 KiB
8.3 KiB
SmartPool Troubleshooting Guide
Problem: "No proxy available matching criteria"
Quick Fix
# 1. Initialize database
clickhouse-client < src/Icomm.API.SmartPool/clickhouse_init.sql
# 2. Add test data
clickhouse-client < src/Icomm.API.SmartPool/clickhouse_test_data.sql
# 3. Test API
curl -X POST 'http://localhost:5000/api/smart-pool/v1/SmartProxy/get-proxy' \
-H 'Content-Type: application/json' \
-d '{"accessToken": "test"}'
Diagnosis Steps
Step 1: Verify Database Setup
-- Check databases exist
SHOW DATABASES LIKE '%smart_pool%';
-- Should show:
-- smart_pool_meta
-- smart_pool_logs
Step 2: Check Tables
-- Check meta tables
SHOW TABLES FROM smart_pool_meta;
-- Should show:
-- proxy_metadata
-- proxy_access_mapping
-- Check data count
SELECT count() FROM smart_pool_meta.proxy_metadata;
SELECT count() FROM smart_pool_meta.proxy_access_mapping;
Step 3: Verify Proxy Data
-- Check proxies
SELECT
id,
host,
port,
protocol,
cluster,
status
FROM smart_pool_meta.proxy_metadata FINAL
LIMIT 10;
-- Check active proxies
SELECT
status,
count() as count
FROM smart_pool_meta.proxy_metadata FINAL
GROUP BY status;
Step 4: Verify Access Mappings
-- Check your access_token mappings
SELECT *
FROM smart_pool_meta.proxy_access_mapping FINAL
WHERE access_token = 'YOUR_TOKEN';
-- Check all mappings
SELECT
access_token,
cluster,
count() as count
FROM smart_pool_meta.proxy_access_mapping FINAL
GROUP BY access_token, cluster;
Step 5: Test the JOIN Query
-- This is the query SmartPool uses internally
SELECT
m.id,
m.host,
m.port,
m.protocol,
m.cluster
FROM smart_pool_meta.proxy_metadata FINAL m
INNER JOIN smart_pool_meta.proxy_access_mapping FINAL a
ON m.cluster = a.cluster
WHERE a.access_token = 'test' -- Replace with your token
AND m.status = 1
ORDER BY m.id;
Common Issues
Issue 1: Empty Result Set
Symptoms:
{
"proxy": null,
"message": "No proxy available matching criteria",
"success": false
}
Causes:
- No data in database
- Access token not mapped to any cluster
- All proxies are inactive (status = 0)
- Cluster names don't match between tables
Solution:
# Add test data
clickhouse-client < src/Icomm.API.SmartPool/clickhouse_test_data.sql
Issue 2: Wrong Access Token
Symptoms:
- Query returns empty but data exists
Check:
-- See which tokens have access
SELECT DISTINCT access_token
FROM smart_pool_meta.proxy_access_mapping FINAL;
Solution: Use one of the existing tokens or add a new mapping:
INSERT INTO smart_pool_meta.proxy_access_mapping (access_token, cluster)
VALUES ('your_token', 'cluster_vn_http');
Issue 3: No Proxies in Cluster
Symptoms:
- Mapping exists but no proxies returned
Check:
-- Find orphaned mappings
SELECT
a.access_token,
a.cluster,
count(m.id) as proxy_count
FROM smart_pool_meta.proxy_access_mapping FINAL a
LEFT JOIN smart_pool_meta.proxy_metadata FINAL m
ON a.cluster = m.cluster AND m.status = 1
GROUP BY a.access_token, a.cluster
HAVING proxy_count = 0;
Solution: Add proxies to the cluster or change mapping to existing cluster.
Issue 4: Proxies Inactive
Check:
-- Check inactive proxies
SELECT
cluster,
count() as inactive_count
FROM smart_pool_meta.proxy_metadata FINAL
WHERE status = 0
GROUP BY cluster;
Solution:
-- Activate all proxies in a cluster
ALTER TABLE smart_pool_meta.proxy_metadata
UPDATE status = 1
WHERE cluster = 'cluster_vn_http';
Issue 5: Cluster Name Mismatch
Check:
-- Clusters in proxy_metadata
SELECT DISTINCT cluster
FROM smart_pool_meta.proxy_metadata FINAL;
-- Clusters in proxy_access_mapping
SELECT DISTINCT cluster
FROM smart_pool_meta.proxy_access_mapping FINAL;
-- Find mismatches
SELECT cluster, 'In mapping but not in metadata' as issue
FROM smart_pool_meta.proxy_access_mapping FINAL
WHERE cluster NOT IN (
SELECT DISTINCT cluster
FROM smart_pool_meta.proxy_metadata FINAL
);
Solution: Fix cluster names to match:
-- Update cluster name in metadata
ALTER TABLE smart_pool_meta.proxy_metadata
UPDATE cluster = 'cluster_vn_http'
WHERE cluster = 'old_cluster_name';
Testing with cURL
Basic Request (No Filters)
curl -X POST 'http://localhost:5000/api/smart-pool/v1/SmartProxy/get-proxy' \
-H 'Content-Type: application/json' \
-d '{
"accessToken": "test"
}'
With Strategy
curl -X POST 'http://localhost:5000/api/smart-pool/v1/SmartProxy/get-proxy' \
-H 'Content-Type: application/json' \
-d '{
"accessToken": "test",
"strategy": "random"
}'
With Filters
# Filter by country
curl -X POST 'http://localhost:5000/api/smart-pool/v1/SmartProxy/get-proxy' \
-H 'Content-Type: application/json' \
-d '{
"accessToken": "test",
"country": "VN"
}'
# Filter by protocol
curl -X POST 'http://localhost:5000/api/smart-pool/v1/SmartProxy/get-proxy' \
-H 'Content-Type: application/json' \
-d '{
"accessToken": "test",
"protocol": "socks5"
}'
# Multiple filters
curl -X POST 'http://localhost:5000/api/smart-pool/v1/SmartProxy/get-proxy' \
-H 'Content-Type: application/json' \
-d '{
"accessToken": "test",
"strategy": "least_delay",
"country": "US",
"protocol": "http",
"ipVersion": "v4",
"targetDomain": "example.com"
}'
Expected Responses
Success Response
{
"proxy": {
"id": 1,
"host": "103.90.227.1",
"port": 8080,
"protocol": "http",
"ipVersion": "v4",
"country": "VN",
"location": "Hanoi",
"authUsername": "",
"authPassword": "",
"cluster": "cluster_vn_http",
"source": "manual",
"description": "Vietnam HTTP proxy 1",
"status": 1
},
"message": null,
"success": true
}
Error Response
{
"proxy": null,
"message": "No proxy available matching criteria",
"success": false
}
Filter Logic
SmartPool uses optional filters - if a filter is not provided, it won't be applied:
| Filter | Behavior if Empty/Null |
|---|---|
accessToken |
Required - returns error if missing |
strategy |
Defaults to "random" |
targetDomain |
Not filtered - returns all proxies |
ipVersion |
Not filtered - returns v4 and v6 |
protocol |
Not filtered - returns http, socks5, etc. |
country |
Not filtered - returns all countries |
refererProxy |
Only used in "alternative" strategy |
Example:
{
"accessToken": "test"
// No filters = returns ALL proxies accessible by 'test' token
}
Debug Queries
Run these in clickhouse-client:
# Interactive mode
clickhouse-client
# Or load debug script
clickhouse-client < src/Icomm.API.SmartPool/clickhouse_debug.sql
Key queries:
-- See everything accessible by a token
SELECT
m.*
FROM smart_pool_meta.proxy_metadata FINAL m
INNER JOIN smart_pool_meta.proxy_access_mapping FINAL a
ON m.cluster = a.cluster
WHERE a.access_token = 'test'
AND m.status = 1;
-- Count by cluster
SELECT
a.cluster,
count(m.id) as proxy_count
FROM smart_pool_meta.proxy_access_mapping FINAL a
LEFT JOIN smart_pool_meta.proxy_metadata FINAL m
ON a.cluster = m.cluster AND m.status = 1
WHERE a.access_token = 'test'
GROUP BY a.cluster;
Getting Help
If you're still having issues:
- Check application logs:
logs/smartpool-*.log - Check ClickHouse logs
- Enable debug logging in
appsettings.json:{ "Serilog": { "MinimumLevel": { "Default": "Debug" } } } - Run all diagnostic queries in
clickhouse_debug.sql - Share the output for further assistance
Quick Reference
| File | Purpose |
|---|---|
clickhouse_init.sql |
Initialize database schema |
clickhouse_test_data.sql |
Add sample data for testing |
clickhouse_debug.sql |
Diagnostic queries |
README.md |
Full documentation |
logs/smartpool-*.log |
Application logs |
Test Access Tokens
After running clickhouse_test_data.sql, these tokens are available:
| Token | Access |
|---|---|
test |
All clusters (10 proxies) |
user1_token |
VN clusters only (3 proxies) |
user2_token |
US + Global (4 proxies) |
user3_token |
JP clusters only (2 proxies) |