BestCDN/config.py
2025-07-26 12:59:57 +08:00

95 lines
3.0 KiB
Python

"""
Configuration settings for BestCDN IP accessibility tester
"""
import json
from typing import Dict, List, Optional
from dataclasses import dataclass
@dataclass
class PerformanceConfig:
concurrent_requests: int = 100
request_timeout: float = 3.0
max_retries: int = 2
batch_size: int = 1000
worker_threads: int = 4
@dataclass
class CDNProviderConfig:
name: str
enabled: bool = True
test_domain: str = ""
@dataclass
class TestingConfig:
protocols: List[str] = None
user_agent: str = "BestCDN-Tester/1.0"
follow_redirects: bool = False
validate_ssl: bool = False
@dataclass
class OutputConfig:
format: str = "json"
save_results: bool = True
output_file: str = "results/accessible_ips.json"
log_level: str = "info"
class Config:
def __init__(self, config_file: str = "config.json"):
self.performance = PerformanceConfig()
self.testing = TestingConfig(protocols=["http", "https"])
self.output = OutputConfig()
# CDN Providers configuration
self.cdn_providers = {
"edgeone": CDNProviderConfig(
name="EdgeOne (Tencent Cloud)"
),
"esa": CDNProviderConfig(
name="ESA (Alibaba Cloud)"
),
"fastly": CDNProviderConfig(
name="Fastly"
),
"cloudflare": CDNProviderConfig(
name="Cloudflare"
)
}
# Load from file if exists
try:
with open(config_file, 'r') as f:
self._load_from_dict(json.load(f))
except FileNotFoundError:
pass
def _load_from_dict(self, config_dict: Dict):
"""Load configuration from dictionary"""
if "performance" in config_dict:
perf = config_dict["performance"]
self.performance = PerformanceConfig(**perf)
if "testing" in config_dict:
test = config_dict["testing"]
self.testing = TestingConfig(**test)
if "output" in config_dict:
output = config_dict["output"]
self.output = OutputConfig(**output)
if "cdnProviders" in config_dict:
for provider_key, provider_config in config_dict["cdnProviders"].items():
if provider_key in self.cdn_providers:
# Update existing provider config
for key, value in provider_config.items():
if hasattr(self.cdn_providers[provider_key], key):
setattr(self.cdn_providers[provider_key], key, value)
def set_test_domain(self, provider: str, domain: str):
"""Set test domain for a specific CDN provider"""
if provider in self.cdn_providers:
self.cdn_providers[provider].test_domain = domain
def get_enabled_providers(self) -> Dict[str, CDNProviderConfig]:
"""Get all enabled CDN providers"""
return {k: v for k, v in self.cdn_providers.items() if v.enabled}