repos
/ analytics-rust master

analytics-rust

mirror archived upstream

Single-binary self-hosted website analytics on Rust axum: collector API, dashboards, world map, and PDF reports.

analyticsaxumdockerrustself-hostedsqliteviteweb-analytics

1.8 KB · 60 lines · MySQL Raw History
 1CREATE TABLE properties (
 2    id            BLOB PRIMARY KEY,
 3    name          TEXT NOT NULL,
 4    custom_cards  TEXT NOT NULL DEFAULT '[]',
 5    is_protected  INTEGER NOT NULL DEFAULT 0,
 6    is_public     INTEGER NOT NULL DEFAULT 0,
 7    created_at    INTEGER NOT NULL,
 8    updated_at    INTEGER NOT NULL
 9);
10
11CREATE TABLE events (
12    id              INTEGER PRIMARY KEY AUTOINCREMENT,
13    property_id     BLOB NOT NULL REFERENCES properties(id) ON DELETE CASCADE,
14    event           TEXT NOT NULL,
15    created_at      INTEGER NOT NULL,
16    user_id         TEXT,
17    url             TEXT,
18    title           TEXT,
19    referrer        TEXT,
20    user_agent      TEXT,
21    platform        TEXT,
22    browser         TEXT,
23    device          TEXT,
24    screen_width    INTEGER,
25    screen_height   INTEGER,
26    country         TEXT,
27    region          TEXT,
28    city            TEXT,
29    lat             REAL,
30    lon             REAL,
31    utm_source      TEXT,
32    utm_medium      TEXT,
33    utm_campaign    TEXT,
34    utm_term        TEXT,
35    utm_content     TEXT,
36    time_on_page_ms INTEGER,
37    extra           TEXT NOT NULL DEFAULT '{}'
38);
39CREATE INDEX events_property_created       ON events(property_id, created_at);
40CREATE INDEX events_property_event_created ON events(property_id, event, created_at);
41
42CREATE TABLE bot_events (
43    id           INTEGER PRIMARY KEY AUTOINCREMENT,
44    property_id  BLOB NOT NULL REFERENCES properties(id) ON DELETE CASCADE,
45    event        TEXT NOT NULL,
46    created_at   INTEGER NOT NULL,
47    bot_name     TEXT,
48    url          TEXT,
49    user_agent   TEXT,
50    country      TEXT,
51    extra        TEXT NOT NULL DEFAULT '{}'
52);
53CREATE INDEX bot_events_property_created ON bot_events(property_id, created_at);
54
55-- meta key-value table for things like the Proprium property id
56CREATE TABLE meta (
57    key   TEXT PRIMARY KEY,
58    value TEXT NOT NULL
59);