Skip to content

Commit 6a18605

Browse files
committed
Merge pull request #30 from proditis/master
Introduce event for archive rotation of logs
2 parents 52144d7 + a5a7262 commit 6a18605

File tree

2 files changed

+46
-2
lines changed

2 files changed

+46
-2
lines changed

schema/echofish-dataonly.sql

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@ SET time_zone = "+00:00";
2424
-- Dumping data for table `sysconf`
2525
--
2626
insert into sysconf (id,val) VALUES ('archive_activated','yes'),
27-
('whitelist_archived','no')
27+
('whitelist_archived','no'),
28+
('archive_rotate','yes'),
29+
('archive_delete_use_mem','no'),
30+
('archive_delete_days',7),
31+
('archive_delete_limit',0)
2832
ON DUPLICATE KEY UPDATE id=VALUES(id);
2933

3034
--

schema/echofish-events.sql

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
SET FOREIGN_KEY_CHECKS=0;
44
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
55
SET time_zone = "+00:00";
6-
6+
SET NAMES utf8 COLLATE 'utf8_unicode_ci';
77

88
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
99
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
@@ -32,3 +32,43 @@ BEGIN
3232
ALTER EVENT e_archive_parse_unparsed ENABLE;
3333
END
3434
//
35+
36+
DROP EVENT IF EXISTS e_rotate_archive//
37+
CREATE EVENT e_rotate_archive
38+
ON SCHEDULE EVERY 1 DAY COMMENT 'ROTATE OLD ARCHIVE ENTRIES' DO
39+
BEGIN
40+
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;
70+
END IF;
71+
END
72+
//
73+
74+

0 commit comments

Comments
 (0)