Module: Sentiero::Stores::SQLite::Schema

Defined in:
lib/sentiero/stores/sqlite/schema.rb

Overview

Table/index definitions for the store's single SQLite3 connection.

Class Method Summary collapse

Class Method Details

.create(db) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/sentiero/stores/sqlite/schema.rb', line 8

def self.create(db)
  db.execute_batch(<<~SQL)
    CREATE TABLE IF NOT EXISTS sessions (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      session_id TEXT NOT NULL UNIQUE,
      created_at REAL NOT NULL,
      updated_at REAL NOT NULL,
      first_event_at REAL,
      last_event_at REAL,
      metadata TEXT
    );

    CREATE INDEX IF NOT EXISTS idx_sessions_session_id ON sessions(session_id);
    CREATE INDEX IF NOT EXISTS idx_sessions_updated_at ON sessions(updated_at);

    CREATE TABLE IF NOT EXISTS events (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      session_id TEXT NOT NULL,
      window_id TEXT NOT NULL,
      timestamp REAL,
      data TEXT NOT NULL
    );

    CREATE INDEX IF NOT EXISTS idx_events_session_window_ts ON events(session_id, window_id, timestamp);

    CREATE TABLE IF NOT EXISTS problems (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      fingerprint TEXT NOT NULL UNIQUE,
      project TEXT NOT NULL,
      exception_class TEXT NOT NULL,
      title TEXT NOT NULL,
      message TEXT,
      count INTEGER NOT NULL,
      status TEXT NOT NULL,
      first_seen REAL NOT NULL,
      last_seen REAL NOT NULL,
      resolved_at REAL
    );
    CREATE INDEX IF NOT EXISTS idx_problems_project ON problems(project);
    CREATE INDEX IF NOT EXISTS idx_problems_status ON problems(status);
    CREATE INDEX IF NOT EXISTS idx_problems_last_seen ON problems(last_seen);

    CREATE TABLE IF NOT EXISTS occurrences (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      occurrence_id TEXT NOT NULL,
      fingerprint TEXT NOT NULL,
      session_id TEXT,
      timestamp REAL NOT NULL,
      data TEXT NOT NULL
    );
    CREATE INDEX IF NOT EXISTS idx_occurrences_fp_ts ON occurrences(fingerprint, timestamp);
    CREATE INDEX IF NOT EXISTS idx_occurrences_session ON occurrences(session_id);

    CREATE TABLE IF NOT EXISTS server_events (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      event_id TEXT NOT NULL,
      project TEXT NOT NULL,
      name TEXT NOT NULL,
      level TEXT,
      session_id TEXT,
      timestamp REAL NOT NULL,
      data TEXT NOT NULL
    );
    CREATE INDEX IF NOT EXISTS idx_server_events_event_id ON server_events(event_id);
    CREATE INDEX IF NOT EXISTS idx_server_events_project ON server_events(project);
    CREATE INDEX IF NOT EXISTS idx_server_events_session ON server_events(session_id);
  SQL
end