haproxy map
This commit is contained in:
@@ -874,7 +874,7 @@ class ConfigGenerator:
|
||||
config += "}\n"
|
||||
|
||||
# Log conversion statistics
|
||||
print(f"[INFO] Generated nginx map: {converted_count} regex patterns", flush=True)
|
||||
#print(f"[INFO] Generated nginx map: {converted_count} regex patterns", flush=True)
|
||||
|
||||
if failed_count > 0:
|
||||
print(f"[WARNING] Failed to convert {failed_count} networks to regex - check config file", flush=True)
|
||||
@@ -1143,7 +1143,69 @@ class ConfigGenerator:
|
||||
default_backend servers
|
||||
"""
|
||||
return config
|
||||
|
||||
|
||||
@staticmethod
|
||||
def generate_haproxy_map(country_networks: dict, aggregate: bool = True, redis_ips: set = None) -> str:
|
||||
"""
|
||||
Generate HAProxy MAP file (IP COUNTRY format)
|
||||
"""
|
||||
countries = sorted(country_networks.keys())
|
||||
|
||||
redisstats = None
|
||||
if redis_ips:
|
||||
redisstats = {"total": len(redis_ips), "unique": len(redis_ips), "deduped": 0}
|
||||
|
||||
handler = GeoIPHandler()
|
||||
metadata = generate_metadata(countries, country_networks, redisstats, handler)
|
||||
|
||||
# Aggregate networks
|
||||
all_networks = []
|
||||
for networks in country_networks.values():
|
||||
all_networks.extend(networks)
|
||||
if redis_ips:
|
||||
all_networks.extend(redis_ips)
|
||||
|
||||
if aggregate:
|
||||
all_networks = ConfigGenerator._aggregate_networks(all_networks)
|
||||
else:
|
||||
all_networks = sorted(list(set(all_networks)))
|
||||
|
||||
# Generate header
|
||||
config = "# " + "="*77 + "\n"
|
||||
config += "# HAProxy MAP Configuration\n"
|
||||
config += f"# Generated: {metadata['timestamp']}\n"
|
||||
config += "# " + "="*77 + "\n"
|
||||
config += "# \n"
|
||||
config += f"# Countries: {metadata['countries_string']} ({metadata['country_count']} countries)\n"
|
||||
config += f"# Total networks: {len(all_networks):,}\n"
|
||||
config += "# \n"
|
||||
config += "# Data sources:\n"
|
||||
config += metadata['sources_formatted'] + "\n"
|
||||
config += "# \n"
|
||||
|
||||
if metadata['redis']:
|
||||
config += f"# {metadata['redis']['formatted']}\n"
|
||||
config += "# \n"
|
||||
|
||||
config += "# Cache settings:\n"
|
||||
config += f"# Max age: {metadata['cache_max_age_hours']} hours ({metadata['cache_max_age_days']:.1f} days)\n"
|
||||
config += f"# Database: {metadata['cache_db_path']}\n"
|
||||
config += "# \n"
|
||||
config += "# Usage in HAProxy:\n"
|
||||
config += "# acl banned_ips src -f /path/to/this_file.acl\n"
|
||||
config += "# http-request deny if banned_ips\n"
|
||||
config += "# \n"
|
||||
config += "# " + "="*77 + "\n"
|
||||
config += "\n"
|
||||
|
||||
# MAP BODY
|
||||
for network in all_networks:
|
||||
country = next((c for c, nets in country_networks.items() if network in nets), 'XX')
|
||||
config += f"{network} {country}\n"
|
||||
|
||||
return config
|
||||
|
||||
|
||||
@staticmethod
|
||||
def generate_haproxy_lua(country_networks: dict, aggregate: bool = True, redis_ips: set = None) -> str:
|
||||
"""Generate HAProxy Lua script with detailed metadata header"""
|
||||
@@ -1283,7 +1345,6 @@ class ConfigGenerator:
|
||||
|
||||
return config
|
||||
|
||||
|
||||
@staticmethod
|
||||
def generate_csv(country_networks: dict, aggregate: bool = True, redis_ips: set = None) -> str:
|
||||
"""Generate CSV format with detailed metadata header"""
|
||||
|
||||
Reference in New Issue
Block a user