File size: 5,155 Bytes
48ae4e0 |
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 157 |
"""
Initialize Default Source Pools
Creates intelligent source pools based on provider categories
"""
import sys
import os
# Add parent directory to path
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from database.db_manager import db_manager
from monitoring.source_pool_manager import SourcePoolManager
from utils.logger import setup_logger
logger = setup_logger("init_pools")
def init_default_pools():
"""
Initialize default source pools for all categories
"""
logger.info("=" * 60)
logger.info("Initializing Default Source Pools")
logger.info("=" * 60)
# Initialize database
db_manager.init_database()
# Get database session
session = db_manager.get_session()
pool_manager = SourcePoolManager(session)
# Define pool configurations
pool_configs = [
{
"name": "Market Data Pool",
"category": "market_data",
"description": "Pool for market data APIs (CoinGecko, CoinMarketCap, etc.)",
"rotation_strategy": "priority",
"providers": [
{"name": "CoinGecko", "priority": 3, "weight": 1},
{"name": "CoinMarketCap", "priority": 2, "weight": 1},
{"name": "Binance", "priority": 1, "weight": 1},
]
},
{
"name": "Blockchain Explorers Pool",
"category": "blockchain_explorers",
"description": "Pool for blockchain explorer APIs",
"rotation_strategy": "round_robin",
"providers": [
{"name": "Etherscan", "priority": 1, "weight": 1},
{"name": "BscScan", "priority": 1, "weight": 1},
{"name": "TronScan", "priority": 1, "weight": 1},
]
},
{
"name": "News Sources Pool",
"category": "news",
"description": "Pool for news and media APIs",
"rotation_strategy": "round_robin",
"providers": [
{"name": "CryptoPanic", "priority": 2, "weight": 1},
{"name": "NewsAPI", "priority": 1, "weight": 1},
]
},
{
"name": "Sentiment Analysis Pool",
"category": "sentiment",
"description": "Pool for sentiment analysis APIs",
"rotation_strategy": "least_used",
"providers": [
{"name": "AlternativeMe", "priority": 1, "weight": 1},
]
},
{
"name": "RPC Nodes Pool",
"category": "rpc_nodes",
"description": "Pool for RPC node providers",
"rotation_strategy": "priority",
"providers": [
{"name": "Infura", "priority": 2, "weight": 1},
{"name": "Alchemy", "priority": 1, "weight": 1},
]
},
]
created_pools = []
for config in pool_configs:
try:
# Check if pool already exists
from database.models import SourcePool
existing_pool = session.query(SourcePool).filter_by(name=config["name"]).first()
if existing_pool:
logger.info(f"Pool '{config['name']}' already exists, skipping")
continue
# Create pool
pool = pool_manager.create_pool(
name=config["name"],
category=config["category"],
description=config["description"],
rotation_strategy=config["rotation_strategy"]
)
logger.info(f"Created pool: {pool.name}")
# Add providers to pool
added_count = 0
for provider_config in config["providers"]:
# Find provider by name
provider = db_manager.get_provider(name=provider_config["name"])
if provider:
pool_manager.add_to_pool(
pool_id=pool.id,
provider_id=provider.id,
priority=provider_config["priority"],
weight=provider_config["weight"]
)
logger.info(
f" Added {provider.name} to pool "
f"(priority: {provider_config['priority']})"
)
added_count += 1
else:
logger.warning(
f" Provider '{provider_config['name']}' not found, skipping"
)
created_pools.append({
"name": pool.name,
"members": added_count
})
except Exception as e:
logger.error(f"Error creating pool '{config['name']}': {e}", exc_info=True)
session.close()
# Summary
logger.info("=" * 60)
logger.info("Pool Initialization Complete")
logger.info(f"Created {len(created_pools)} pools:")
for pool in created_pools:
logger.info(f" - {pool['name']}: {pool['members']} members")
logger.info("=" * 60)
return created_pools
if __name__ == "__main__":
init_default_pools()
|