feat: index asn ownership

This commit is contained in:
f
2025-11-04 18:00:09 -03:00
parent be75ab83f2
commit a2c12edea9
3 changed files with 27 additions and 5 deletions

11
contrib/asn.sql Normal file
View File

@ -0,0 +1,11 @@
BEGIN;
CREATE TABLE IF NOT EXISTS asn_import (range_start INTEGER, range_end INTEGER, id INTEGER, country STRING, description TEXT);
CREATE TABLE IF NOT EXISTS asns (range_start INTEGER, range_end INTEGER, id INTEGER, country STRING, owner_id INTEGER);
CREATE UNIQUE INDEX IF NOT EXISTS asn_import_range_id ON asn_import (range_start, range_end);
CREATE UNIQUE INDEX IF NOT EXISTS asns_range_id ON asns (range_start, range_end);
CREATE INDEX IF NOT EXISTS asns_id_idx ON asns (id);
CREATE INDEX IF NOT EXISTS asns_owner_id_idx ON asns (owner_id);
CREATE TABLE IF NOT EXISTS owners (id INTEGER PRIMARY KEY, description TEXT);
CREATE TABLE IF NOT EXISTS status (id INTEGER PRIMARY KEY, blocked BOOLEAN DEFAULT FALSE);
DELETE FROM asn_import;
COMMIT;

12
contrib/asn_2.sql Normal file
View File

@ -0,0 +1,12 @@
BEGIN;
INSERT INTO owners (description) SELECT DISTINCT asn_import.description FROM asn_import LEFT JOIN owners ON asn_import.description = owners.description WHERE owners.description IS NULL;
INSERT INTO asns (range_start, range_end, id, country, owner_id)
SELECT asn_import.range_start, asn_import.range_end, asn_import.id, asn_import.country, owners.id
FROM asn_import
LEFT JOIN owners
ON owners.description = asn_import.description
ON CONFLICT DO UPDATE SET id = excluded.id, country = excluded.country, owner_id = excluded.owner_id;
DROP TABLE asn_import;
DROP INDEX asns_range_id;
COMMIT;
VACUUM;

View File

@ -1,11 +1,10 @@
#!/bin/sh
set -e
cr="$(dirname "$(readlink -f "$0")")"
db="${1:-$PWD/asn.sqlite3}"
sqlite3 "$db" "CREATE TABLE IF NOT EXISTS asn (range_start INTEGER, range_end INTEGER, id INTEGER, country STRING, description TEXT);"
sqlite3 "$db" "CREATE INDEX IF NOT EXISTS asn_id_idx ON asn (id);"
sqlite3 "$db" "CREATE TABLE IF NOT EXISTS status (id INTEGER PRIMARY KEY, blocked BOOLEAN DEFAULT FALSE);"
sqlite3 "$db" "DELETE from asn;"
wget https://iptoasn.com/data/ip2asn-v4-u32.tsv.gz -O - | gunzip | sqlite3 -tabs "$db" ".import '|cat -' asn"
cat "$cr/asn.sql" | sqlite3 "$db"
wget https://iptoasn.com/data/ip2asn-v4-u32.tsv.gz -O - | gunzip | sqlite3 -tabs "$db" ".import '|cat -' asn_import"
cat "$cr/asn_2.sql" | sqlite3 "$db"
echo "ASN database created/updated at $db"