95 lines
3.0 KiB
Python
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} |