MWX/SpamFerret/tables/client: Difference between revisions
< MWX | SpamFerret | tables
Jump to navigation
Jump to search
(8/8: dropping ID field) |
(renamed table; migration) |
||
| Line 1: | Line 1: | ||
==About== | ==About== | ||
* '''History''': | * '''History''': | ||
** '''2009-08-08''' Dropping "ID" field, because "Address" should be the key | ** '''2009-08-08''' Dropping "ID" field, because "Address" should be the key; renaming table to "client" | ||
*** This helps keep legacy code working (leaving "clients" table in place) while I try to get access to upgrade it | |||
* '''Fields''': | * '''Fields''': | ||
** '''Retries''': | ** '''Retries''': | ||
| Line 10: | Line 11: | ||
==SQL== | ==SQL== | ||
<mysql>CREATE TABLE ` | <mysql>CREATE TABLE `client` ( | ||
`Address` VARCHAR(15) NOT NULL COMMENT 'IP address', | `Address` VARCHAR(15) NOT NULL COMMENT 'IP address', | ||
`WhenFirst` DATETIME COMMENT 'when this IP address first submitted a spam', | `WhenFirst` DATETIME COMMENT 'when this IP address first submitted a spam', | ||
| Line 21: | Line 22: | ||
) | ) | ||
ENGINE = MYISAM;</mysql> | ENGINE = MYISAM;</mysql> | ||
===migration=== | |||
<mysql>INSERT INTO client (Address,WhenFirst,WhenLast,Retries,Count) | |||
SELECT | |||
Address, | |||
MIN(WhenFirst) AS WhenFirst, | |||
MAX(WhenLast) AS WhenLast, | |||
SUM(Retries) AS Retries, | |||
SUM(Count) AS Count | |||
FROM clients | |||
GROUP BY Address;</mysql> | |||
Revision as of 01:43, 9 August 2009
About
- History:
- 2009-08-08 Dropping "ID" field, because "Address" should be the key; renaming table to "client"
- This helps keep legacy code working (leaving "clients" table in place) while I try to get access to upgrade it
- 2009-08-08 Dropping "ID" field, because "Address" should be the key; renaming table to "client"
- Fields:
- Retries:
- Each time a client submits spam, clients.Retries increments...
- ...unless clients.WhenLast was sufficiently long ago, in which case clients.Retries is reset to 0 (and WhenLast is updated).
- Each time a client submits non-spam, if clients.Retries is too high and WhenLast is recent enough, the content is refused without checking for a spam match.
- Net effect is that too many spams within a certain period of time causes an IP to be temporarily blacklisted.
- Retries:
SQL
<mysql>CREATE TABLE `client` (
`Address` VARCHAR(15) NOT NULL COMMENT 'IP address', `WhenFirst` DATETIME COMMENT 'when this IP address first submitted a spam', `WhenLast` DATETIME COMMENT 'when this IP address last submitted a spam', `Retries` INT DEFAULT NULL COMMENT 'number of spam retries', `Count` INT DEFAULT 0 COMMENT 'number of attempts', `doBlock` TINYINT(1) COMMENT "TRUE = permanent block", `Notes` VARCHAR(255) DEFAULT NULL COMMENT "human-added notes", PRIMARY KEY(`Address`)
) ENGINE = MYISAM;</mysql>
migration
<mysql>INSERT INTO client (Address,WhenFirst,WhenLast,Retries,Count) SELECT
Address, MIN(WhenFirst) AS WhenFirst, MAX(WhenLast) AS WhenLast, SUM(Retries) AS Retries, SUM(Count) AS Count
FROM clients GROUP BY Address;</mysql>