log.schema 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. CREATE TABLE IF NOT EXISTS seen_hosts (
  2. id INTEGER PRIMARY KEY AUTOINCREMENT,
  3. ip_address TEXT NOT NULL UNIQUE
  4. );
  5. CREATE TABLE IF NOT EXISTS seen_users (
  6. id INTEGER PRIMARY KEY AUTOINCREMENT,
  7. user TEXT NOT NULL UNIQUE
  8. );
  9. CREATE TABLE IF NOT EXISTS seen_routes (
  10. id INTEGER PRIMARY KEY AUTOINCREMENT,
  11. route TEXT NOT NULL,
  12. method TEXT NOT NULL,
  13. UNIQUE(route, method)
  14. );
  15. CREATE TABLE IF NOT EXISTS response_code (
  16. id INTEGER PRIMARY KEY AUTOINCREMENT,
  17. code INTEGER NOT NULL UNIQUE
  18. );
  19. CREATE TABLE IF NOT EXISTS referer (
  20. id INTEGER PRIMARY KEY AUTOINCREMENT,
  21. referer TEXT NOT NULL UNIQUE
  22. );
  23. CREATE TABLE IF NOT EXISTS ua (
  24. id INTEGER PRIMARY KEY AUTOINCREMENT,
  25. ua TEXT NOT NULL UNIQUE
  26. );
  27. CREATE TABLE IF NOT EXISTS requests (
  28. uuid TEXT PRIMARY KEY,
  29. date TEXT NOT NULL,
  30. host_id INTEGER NOT NULL REFERENCES seen_hosts(id) ON DELETE CASCADE,
  31. user_id INTEGER NOT NULL REFERENCES seen_users(id) ON DELETE CASCADE,
  32. route_id INTEGER NOT NULL REFERENCES seen_routes(id) ON DELETE CASCADE,
  33. referer_id INTEGER NOT NULL REFERENCES referer(id) ON DELETE CASCADE,
  34. ua_id INTEGER NOT NULL REFERENCES ua(id) ON DELETE CASCADE,
  35. response_code_id INTEGER NOT NULL REFERENCES response_code(id) ON DELETE RESTRICT
  36. );
  37. CREATE VIEW IF NOT EXISTS all_requests AS
  38. SELECT
  39. q.uuid,
  40. q.date,
  41. h.ip_address,
  42. u.user,
  43. r.method,
  44. r.route,
  45. f.referer,
  46. ua.ua,
  47. c.code
  48. FROM
  49. requests AS q
  50. JOIN
  51. seen_hosts AS h ON q.host_id = h.id
  52. JOIN
  53. seen_users AS u ON q.user_id = u.id
  54. JOIN
  55. seen_routes AS r ON q.route_id = r.id
  56. JOIN
  57. referer AS f ON q.referer_id = f.id
  58. JOIN
  59. ua ON q.ua_id = ua.id
  60. JOIN
  61. response_code AS c on q.response_code_id = c.id;
  62. /* Make all_requests a writable view via triggers. We will always stomp the main row, as the last update will be what we want. */
  63. CREATE TRIGGER IF NOT EXISTS insert_all_requests INSTEAD OF INSERT ON all_requests BEGIN
  64. INSERT OR IGNORE INTO response_code (code) VALUES (NEW.code);
  65. INSERT OR IGNORE INTO seen_routes (route,method) VALUES (NEW.route, NEW.method);
  66. INSERT OR IGNORE INTO seen_users (user) VALUES (NEW.user);
  67. INSERT OR IGNORE INTO seen_hosts (ip_address) VALUES (NEW.ip_address);
  68. INSERT OR IGNORE INTO referer (referer) VALUES (NEW.referer);
  69. INSERT OR IGNORE INTO ua (ua) VALUES (NEW.ua);
  70. INSERT OR REPLACE INTO requests SELECT
  71. NEW.uuid,
  72. NEW.date,
  73. h.id AS host_id,
  74. u.id AS user_id,
  75. r.id AS route_id,
  76. f.id AS referer_id,
  77. ua.id AS ua_id,
  78. c.id AS response_code_id
  79. FROM seen_hosts AS h
  80. JOIN seen_users AS u ON u.user = NEW.user
  81. JOIN seen_routes AS r ON r.route = NEW.route AND r.method = NEW.method
  82. JOIN referer AS f ON f.referer = NEW.referer
  83. JOIN ua ON ua.ua = NEW.ua
  84. JOIN response_code AS c ON c.code = NEW.code
  85. WHERE h.ip_address = NEW.ip_address;
  86. END;
  87. /* This is just to store various messages associated with requests, which are usually errors. */
  88. CREATE TABLE IF NOT EXISTS messages (
  89. uuid TEXT NOT NULL REFERENCES requests ON DELETE NO ACTION,
  90. message TEXT NOT NULL
  91. );