ids.alfacom.it/extracted_idf/cleanup_ddos_ips_hours_fixed.sql
marco370 0bfe3258b5 Saved progress at the end of the loop
Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 7a657272-55ba-4a79-9a2e-f1ed9bc7a528
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: 1c71ce6e-1a3e-4f53-bb5d-77cdd22b8ea3
2025-11-11 09:15:10 +00:00

256 lines
10 KiB
SQL
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ============================================
-- STORED PROCEDURE PULIZIA IP ORARIA - FIXED
-- Risolve il problema di collation nel CONCAT
-- ============================================
DELIMITER //
DROP PROCEDURE IF EXISTS cleanup_ddos_ips_hours_fixed//
CREATE PROCEDURE cleanup_ddos_ips_hours_fixed(
IN retention_hours INT,
IN list_name_filter VARCHAR(100),
IN dry_run BOOLEAN
)
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE total_ips INT DEFAULT 0;
DECLARE old_ips INT DEFAULT 0;
DECLARE deleted_count INT DEFAULT 0;
DECLARE report_message TEXT DEFAULT '';
-- Gestione errori
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
GET DIAGNOSTICS CONDITION 1
@p1 = RETURNED_SQLSTATE, @p2 = MESSAGE_TEXT;
INSERT INTO ip_cleanup_log (operation_time, operation_type, list_name, status, message)
VALUES (NOW(), 'CLEANUP_HOURS', list_name_filter, 'ERROR',
CONCAT('ERRORE: ', CAST(@p1 AS CHAR), ' - ', CAST(@p2 AS CHAR)));
END;
-- Gestione valori default
IF retention_hours IS NULL THEN
SET retention_hours = 24;
END IF;
IF list_name_filter IS NULL OR list_name_filter = '' THEN
SET list_name_filter = 'ddos_detect_v03';
END IF;
IF dry_run IS NULL THEN
SET dry_run = FALSE;
END IF;
-- Inizio transazione
START TRANSACTION;
-- Log inizio operazione (FIX: conversione esplicita di INT)
INSERT INTO ip_cleanup_log (operation_time, operation_type, list_name, status, message)
VALUES (NOW(), 'CLEANUP_HOURS', list_name_filter, 'START',
CONCAT('Inizio pulizia ORARIA - Ritenzione: ', CAST(retention_hours AS CHAR), ' ore - Dry run: ', CAST(dry_run AS CHAR)));
-- Conta totale IP nella lista
SELECT COUNT(*) INTO total_ips
FROM ip_list
WHERE list_name = list_name_filter;
-- Conta IP da rimuovere (basato su ore)
SELECT COUNT(*) INTO old_ips
FROM ip_list
WHERE list_name = list_name_filter
AND retrieved_at < DATE_SUB(NOW(), INTERVAL retention_hours HOUR);
-- Prepara messaggio report (FIX: conversioni esplicite)
SET report_message = CONCAT(
'Lista: ', list_name_filter,
' | Totale IP: ', CAST(total_ips AS CHAR),
' | IP da rimuovere: ', CAST(old_ips AS CHAR),
' | Ritenzione: ', CAST(retention_hours AS CHAR), ' ore'
);
IF old_ips > 0 THEN
IF dry_run = FALSE THEN
-- Esegui pulizia reale
DELETE FROM ip_list
WHERE list_name = list_name_filter
AND retrieved_at < DATE_SUB(NOW(), INTERVAL retention_hours HOUR);
-- Ottieni numero righe eliminate
SET deleted_count = ROW_COUNT();
-- Log successo (FIX: conversioni esplicite)
INSERT INTO ip_cleanup_log (operation_time, operation_type, list_name,
records_before, records_removed, records_after, status, message)
VALUES (NOW(), 'CLEANUP_HOURS', list_name_filter,
total_ips, deleted_count, (total_ips - deleted_count), 'SUCCESS',
CONCAT(report_message, ' | Rimossi: ', CAST(deleted_count AS CHAR)));
SELECT CONCAT('✅ PULIZIA ORARIA COMPLETATA: Rimossi ', CAST(deleted_count AS CHAR), ' IP dalla lista ', list_name_filter, ' (>', CAST(retention_hours AS CHAR), 'h)') as result;
ELSE
-- Modalità dry run - solo log (FIX: conversioni esplicite)
INSERT INTO ip_cleanup_log (operation_time, operation_type, list_name,
records_before, records_removed, status, message)
VALUES (NOW(), 'DRY_RUN_HOURS', list_name_filter,
total_ips, old_ips, 'INFO',
CONCAT(report_message, ' | SIMULAZIONE - Nessuna modifica eseguita'));
SELECT CONCAT('🔍 DRY RUN ORARIO: Verrebbero rimossi ', CAST(old_ips AS CHAR), ' IP dalla lista ', list_name_filter, ' (>', CAST(retention_hours AS CHAR), 'h)') as result;
END IF;
ELSE
-- Nessun IP da rimuovere (FIX: conversioni esplicite)
INSERT INTO ip_cleanup_log (operation_time, operation_type, list_name,
records_before, records_removed, status, message)
VALUES (NOW(), 'CLEANUP_HOURS', list_name_filter,
total_ips, 0, 'INFO',
CONCAT(report_message, ' | Nessun IP da rimuovere'));
SELECT CONCAT(' NESSUNA PULIZIA ORARIA NECESSARIA: Tutti gli IP in ', list_name_filter, ' sono più recenti di ', CAST(retention_hours AS CHAR), ' ore') as result;
END IF;
-- Commit transazione
COMMIT;
END//
DELIMITER ;
-- ============================================
-- STORED PROCEDURE GIORNI CORRETTA
-- ============================================
DROP PROCEDURE IF EXISTS cleanup_ddos_ips_fixed//
CREATE PROCEDURE cleanup_ddos_ips_fixed(
IN retention_days INT,
IN list_name_filter VARCHAR(100),
IN dry_run BOOLEAN
)
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE total_ips INT DEFAULT 0;
DECLARE old_ips INT DEFAULT 0;
DECLARE deleted_count INT DEFAULT 0;
DECLARE report_message TEXT DEFAULT '';
-- Gestione errori
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
GET DIAGNOSTICS CONDITION 1
@p1 = RETURNED_SQLSTATE, @p2 = MESSAGE_TEXT;
INSERT INTO ip_cleanup_log (operation_time, operation_type, list_name, status, message)
VALUES (NOW(), 'CLEANUP', list_name_filter, 'ERROR',
CONCAT('ERRORE: ', CAST(@p1 AS CHAR), ' - ', CAST(@p2 AS CHAR)));
END;
-- Gestione valori default
IF retention_days IS NULL THEN
SET retention_days = 7;
END IF;
IF list_name_filter IS NULL OR list_name_filter = '' THEN
SET list_name_filter = 'ddos_detect_v03';
END IF;
IF dry_run IS NULL THEN
SET dry_run = FALSE;
END IF;
-- Inizio transazione
START TRANSACTION;
-- Log inizio operazione (FIX: conversione esplicita)
INSERT INTO ip_cleanup_log (operation_time, operation_type, list_name, status, message)
VALUES (NOW(), 'CLEANUP', list_name_filter, 'START',
CONCAT('Inizio pulizia - Ritenzione: ', CAST(retention_days AS CHAR), ' giorni - Dry run: ', CAST(dry_run AS CHAR)));
-- Conta totale IP nella lista
SELECT COUNT(*) INTO total_ips
FROM ip_list
WHERE list_name = list_name_filter;
-- Conta IP da rimuovere
SELECT COUNT(*) INTO old_ips
FROM ip_list
WHERE list_name = list_name_filter
AND retrieved_at < DATE_SUB(NOW(), INTERVAL retention_days DAY);
-- Prepara messaggio report (FIX: conversioni esplicite)
SET report_message = CONCAT(
'Lista: ', list_name_filter,
' | Totale IP: ', CAST(total_ips AS CHAR),
' | IP da rimuovere: ', CAST(old_ips AS CHAR),
' | Ritenzione: ', CAST(retention_days AS CHAR), ' giorni'
);
IF old_ips > 0 THEN
IF dry_run = FALSE THEN
-- Esegui pulizia reale
DELETE FROM ip_list
WHERE list_name = list_name_filter
AND retrieved_at < DATE_SUB(NOW(), INTERVAL retention_days DAY);
-- Ottieni numero righe eliminate
SET deleted_count = ROW_COUNT();
-- Log successo (FIX: conversioni esplicite)
INSERT INTO ip_cleanup_log (operation_time, operation_type, list_name,
records_before, records_removed, records_after, status, message)
VALUES (NOW(), 'CLEANUP', list_name_filter,
total_ips, deleted_count, (total_ips - deleted_count), 'SUCCESS',
CONCAT(report_message, ' | Rimossi: ', CAST(deleted_count AS CHAR)));
SELECT CONCAT('✅ PULIZIA COMPLETATA: Rimossi ', CAST(deleted_count AS CHAR), ' IP dalla lista ', list_name_filter) as result;
ELSE
-- Modalità dry run - solo log
INSERT INTO ip_cleanup_log (operation_time, operation_type, list_name,
records_before, records_removed, status, message)
VALUES (NOW(), 'DRY_RUN', list_name_filter,
total_ips, old_ips, 'INFO',
CONCAT(report_message, ' | SIMULAZIONE - Nessuna modifica eseguita'));
SELECT CONCAT('🔍 DRY RUN: Verrebbero rimossi ', CAST(old_ips AS CHAR), ' IP dalla lista ', list_name_filter) as result;
END IF;
ELSE
-- Nessun IP da rimuovere
INSERT INTO ip_cleanup_log (operation_time, operation_type, list_name,
records_before, records_removed, status, message)
VALUES (NOW(), 'CLEANUP', list_name_filter,
total_ips, 0, 'INFO',
CONCAT(report_message, ' | Nessun IP da rimuovere'));
SELECT CONCAT(' NESSUNA PULIZIA NECESSARIA: Tutti gli IP in ', list_name_filter, ' sono recenti') as result;
END IF;
-- Commit transazione
COMMIT;
END//
DELIMITER ;
-- ============================================
-- PROCEDURE WRAPPER CORRETTE
-- ============================================
-- Procedure wrapper per dry run orario con valori default
DROP PROCEDURE IF EXISTS cleanup_ddos_ips_hours_dry_default_fixed//
CREATE PROCEDURE cleanup_ddos_ips_hours_dry_default_fixed()
BEGIN
CALL cleanup_ddos_ips_hours_fixed(24, 'ddos_detect_v03', TRUE);
END//
-- Procedure wrapper per pulizia oraria con valori default
DROP PROCEDURE IF EXISTS cleanup_ddos_ips_hours_default_fixed//
CREATE PROCEDURE cleanup_ddos_ips_hours_default_fixed()
BEGIN
CALL cleanup_ddos_ips_hours_fixed(24, 'ddos_detect_v03', FALSE);
END//
DELIMITER ;