Add conection and remove proxy usage
This commit is contained in:
79
database.py
79
database.py
@@ -45,12 +45,17 @@ def get_latest_proxy() -> Optional[Dict]:
|
||||
conn.close()
|
||||
|
||||
return dict(proxy) if proxy else None
|
||||
except Exception as e:
|
||||
print(f"Erro ao buscar proxy: {e}")
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
def get_all_active_proxies() -> list:
|
||||
"""Retorna todos os proxies ativos do banco"""
|
||||
"""
|
||||
Retorna todos os proxies ativos do banco, priorizando:
|
||||
1. Proxies com sucesso recente
|
||||
2. Proxies com baixo failure_count
|
||||
3. Proxies com boa taxa de sucesso
|
||||
4. Proxies novos ainda não testados
|
||||
"""
|
||||
try:
|
||||
conn = get_db_connection()
|
||||
cursor = conn.cursor()
|
||||
@@ -61,16 +66,23 @@ def get_all_active_proxies() -> list:
|
||||
country_code, country_name, city, is_active, is_anonymous,
|
||||
response_time_ms, last_checked_at, last_successful_at,
|
||||
failure_count, success_count, usage, source, notes,
|
||||
created_at, updated_at
|
||||
FROM proxies
|
||||
WHERE is_active = TRUE
|
||||
ORDER BY
|
||||
last_successful_at DESC NULLS LAST,
|
||||
response_time_ms ASC NULLS LAST,
|
||||
created_at, updated_at,
|
||||
(CASE WHEN success_count + failure_count > 0
|
||||
THEN CAST(success_count AS FLOAT) / (success_count + failure_count)
|
||||
ELSE 0 END) DESC,
|
||||
ELSE 0.5 END) as success_rate
|
||||
FROM proxies
|
||||
WHERE is_active = TRUE
|
||||
AND failure_count < 8 -- Ignora proxies com muitas falhas
|
||||
ORDER BY
|
||||
-- Prioriza proxies com sucesso recente
|
||||
last_successful_at DESC NULLS LAST,
|
||||
-- Depois por taxa de sucesso
|
||||
success_rate DESC,
|
||||
-- Depois por menos falhas
|
||||
failure_count ASC,
|
||||
-- Por último, proxies novos
|
||||
created_at DESC
|
||||
LIMIT 50 -- Limita a 50 melhores proxies para não perder tempo
|
||||
""")
|
||||
|
||||
proxies = cursor.fetchall()
|
||||
@@ -78,8 +90,7 @@ def get_all_active_proxies() -> list:
|
||||
conn.close()
|
||||
|
||||
return [dict(proxy) for proxy in proxies] if proxies else []
|
||||
except Exception as e:
|
||||
print(f"Erro ao buscar proxies: {e}")
|
||||
except Exception:
|
||||
return []
|
||||
|
||||
def delete_proxy(proxy_id: int) -> bool:
|
||||
@@ -101,10 +112,8 @@ def delete_proxy(proxy_id: int) -> bool:
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
print(f"Proxy {proxy_id} desativado: {updated}")
|
||||
return updated
|
||||
except Exception as e:
|
||||
print(f"Erro ao desativar proxy {proxy_id}: {e}")
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
def format_proxy_url(proxy: Dict) -> str:
|
||||
@@ -139,8 +148,42 @@ def mark_proxy_success(proxy_id: int) -> bool:
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
print(f"Proxy (id {proxy_id}) marcado como sucesso")
|
||||
return updated
|
||||
except Exception as e:
|
||||
print(f"Erro ao marcar proxy {proxy_id} como sucesso: {e}")
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
def mark_proxy_failure(proxy_id: int, max_failures: int = 10) -> bool:
|
||||
"""
|
||||
Marca proxy como falha e desativa se atingir max_failures consecutivas.
|
||||
|
||||
Args:
|
||||
proxy_id: ID do proxy
|
||||
max_failures: Número máximo de falhas antes de desativar (padrão: 10)
|
||||
"""
|
||||
try:
|
||||
conn = get_db_connection()
|
||||
cursor = conn.cursor()
|
||||
|
||||
# Incrementa failure_count e desativa se atingir o limite
|
||||
cursor.execute("""
|
||||
UPDATE proxies
|
||||
SET failure_count = failure_count + 1,
|
||||
last_checked_at = NOW(),
|
||||
updated_at = NOW(),
|
||||
is_active = CASE
|
||||
WHEN failure_count + 1 >= %s THEN FALSE
|
||||
ELSE is_active
|
||||
END
|
||||
WHERE id = %s
|
||||
RETURNING failure_count, is_active
|
||||
""", (max_failures, proxy_id))
|
||||
|
||||
result = cursor.fetchone()
|
||||
conn.commit()
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
return result is not None
|
||||
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
Reference in New Issue
Block a user