Your Name
feat: UI improvements and error suppression - Enhanced dashboard and market pages with improved header buttons, logo, and currency symbol display - Stopped animated ticker - Removed pie chart legends - Added error suppressor for external service errors (SSE, Permissions-Policy warnings) - Improved header button prominence and icon appearance - Enhanced logo with glow effects and better design - Fixed currency symbol visibility in market tables
8b7b267
| """ | |
| 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() | |