Skip to content

Commit 20f9d0b

Browse files
committed
Merge pull request #31 from proditis/master
Fix bug that caused the log rotation to stop.
2 parents 6a18605 + 4bf3577 commit 20f9d0b

File tree

2 files changed

+38
-29
lines changed

2 files changed

+38
-29
lines changed

schema/echofish-events.sql

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -38,35 +38,7 @@ CREATE EVENT e_rotate_archive
3838
ON SCHEDULE EVERY 1 DAY COMMENT 'ROTATE OLD ARCHIVE ENTRIES' DO
3939
BEGIN
4040
IF (SELECT count(*) FROM sysconf WHERE id='archive_rotate' and val='yes')>0 THEN
41-
SET @archive_days=IFNULL((SELECT val FROM sysconf WHERE id='archive_delete_days'),7);
42-
SET @archive_limit=IFNULL((SELECT val FROM sysconf WHERE id='archive_delete_limit'),0);
43-
SET @use_mem=IFNULL((SELECT val FROM sysconf WHERE id='archive_delete_use_mem'),'no');
44-
IF @archive_days>0 THEN
45-
IF @use_mem != 'yes' THEN
46-
CREATE TEMPORARY TABLE archive_ids (id BIGINT UNSIGNED NOT NULL PRIMARY KEY);
47-
ELSE
48-
CREATE TEMPORARY TABLE archive_ids (id BIGINT UNSIGNED NOT NULL PRIMARY KEY) ENGINE=MEMORY;
49-
END IF;
50-
51-
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
52-
START TRANSACTION;
53-
IF @archive_limit > 0 THEN
54-
PREPARE choose_archive_ids FROM 'INSERT INTO archive_ids SELECT id FROM `archive` WHERE received_ts < NOW() - INTERVAL ? DAY LIMIT ?';
55-
EXECUTE choose_archive_ids USING @archive_days, @archive_limit;
56-
ELSE
57-
PREPARE choose_archive_ids FROM 'INSERT INTO archive_ids SELECT id FROM `archive` WHERE received_ts < NOW() - INTERVAL ?';
58-
EXECUTE choose_archive_ids USING @archive_days;
59-
END IF;
60-
DEALLOCATE PREPARE choose_archive_ids;
61-
-- Ignore ID's from entries that exist on archive_unparse
62-
DELETE t1.* FROM archive_ids as t1 LEFT JOIN archive_unparse AS t2 ON t1.id=t2.id WHERE t2.id IS NOT NULL;
63-
-- Ignore ID's from entries that exist on syslog
64-
DELETE t1.* FROM archive_ids as t1 LEFT JOIN syslog AS t2 ON t1.id=t2.id WHERE t2.id IS NOT NULL;
65-
-- Ignore ID's from entries that exist on abuser_evidense
66-
DELETE t1.* FROM archive_ids as t1 LEFT JOIN abuser_evidence AS t2 ON t1.id=t2.archive_id WHERE t2.archive_id IS NOT NULL;
67-
DELETE t1.* FROM `archive` AS t1 LEFT JOIN archive_ids AS t2 ON t1.id=t2.id WHERE t2.id IS NOT NULL;
68-
COMMIT;
69-
END IF;
41+
CALL eproc_rotate_archive();
7042
END IF;
7143
END
7244
//

schema/echofish-procedures.sql

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,3 +159,40 @@ SELECT id,pattern,grouping,capture INTO mts,@pattern,@grouping,Ccapture FROM abu
159159
END;//
160160

161161

162+
/*
163+
* Procedure to process old archive log entries and delete them
164+
*/
165+
DROP PROCEDURE IF EXISTS eproc_rotate_archive//
166+
CREATE PROCEDURE eproc_rotate_archive()
167+
BEGIN
168+
DROP TABLE IF EXISTS archive_ids;
169+
SET @archive_days=IFNULL((SELECT val FROM sysconf WHERE id='archive_delete_days'),7);
170+
SET @archive_limit=IFNULL((SELECT val FROM sysconf WHERE id='archive_delete_limit'),0);
171+
SET @use_mem=IFNULL((SELECT val FROM sysconf WHERE id='archive_delete_use_mem'),'no');
172+
IF @archive_days>0 THEN
173+
IF @use_mem != 'yes' THEN
174+
CREATE TEMPORARY TABLE IF NOT EXISTS archive_ids (id BIGINT UNSIGNED NOT NULL PRIMARY KEY);
175+
ELSE
176+
CREATE TEMPORARY TABLE IF NOT EXISTS archive_ids (id BIGINT UNSIGNED NOT NULL PRIMARY KEY) ENGINE=MEMORY;
177+
END IF;
178+
179+
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
180+
START TRANSACTION;
181+
IF @archive_limit > 0 THEN
182+
PREPARE choose_archive_ids FROM 'INSERT INTO archive_ids SELECT id FROM `archive` WHERE received_ts < NOW() - INTERVAL ? DAY LIMIT ?';
183+
EXECUTE choose_archive_ids USING @archive_days, @archive_limit;
184+
ELSE
185+
PREPARE choose_archive_ids FROM 'INSERT INTO archive_ids SELECT id FROM `archive` WHERE received_ts < NOW() - INTERVAL ? DAY';
186+
EXECUTE choose_archive_ids USING @archive_days;
187+
END IF;
188+
DEALLOCATE PREPARE choose_archive_ids;
189+
-- Ignore ID's from entries that exist on archive_unparse
190+
DELETE t1.* FROM archive_ids as t1 LEFT JOIN archive_unparse AS t2 ON t1.id=t2.id WHERE t2.id IS NOT NULL;
191+
-- Ignore ID's from entries that exist on syslog
192+
DELETE t1.* FROM archive_ids as t1 LEFT JOIN syslog AS t2 ON t1.id=t2.id WHERE t2.id IS NOT NULL;
193+
-- Ignore ID's from entries that exist on abuser_evidense
194+
DELETE t1.* FROM archive_ids as t1 LEFT JOIN abuser_evidence AS t2 ON t1.id=t2.archive_id WHERE t2.archive_id IS NOT NULL;
195+
DELETE t1.* FROM `archive` AS t1 LEFT JOIN archive_ids AS t2 ON t1.id=t2.id WHERE t2.id IS NOT NULL;
196+
COMMIT;
197+
END IF;
198+
END;//

0 commit comments

Comments
 (0)