build a template website
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
CREATE TABLE visits (
|
||||
id bigserial PRIMARY KEY,
|
||||
ts timestamptz NOT NULL DEFAULT now(),
|
||||
visitor text NOT NULL, -- daily-rotating hash, never an IP
|
||||
referrer text, -- host only, NULL = direct
|
||||
country char(2) NOT NULL DEFAULT 'XX',
|
||||
device text NOT NULL -- mobile | tablet | desktop
|
||||
);
|
||||
CREATE TABLE clicks (
|
||||
id bigserial PRIMARY KEY,
|
||||
ts timestamptz NOT NULL DEFAULT now(),
|
||||
link_id text NOT NULL,
|
||||
visitor text NOT NULL,
|
||||
country char(2) NOT NULL DEFAULT 'XX',
|
||||
device text NOT NULL
|
||||
);
|
||||
CREATE TABLE link_health (
|
||||
link_id text PRIMARY KEY,
|
||||
url text NOT NULL,
|
||||
ok boolean NOT NULL,
|
||||
status int,
|
||||
note text,
|
||||
checked_at timestamptz NOT NULL DEFAULT now()
|
||||
);
|
||||
CREATE INDEX visits_ts ON visits (ts);
|
||||
CREATE INDEX clicks_ts ON clicks (ts);
|
||||
CREATE INDEX clicks_link ON clicks (link_id);
|
||||
|
||||
-- Ready-made views for the stats site
|
||||
CREATE VIEW stats_daily AS
|
||||
SELECT ts::date AS day, count(*) AS visits, count(DISTINCT visitor) AS uniques FROM visits GROUP BY 1;
|
||||
CREATE VIEW stats_link_clicks AS
|
||||
SELECT link_id, count(*) AS clicks FROM clicks GROUP BY 1;
|
||||
CREATE VIEW stats_referrers AS
|
||||
SELECT coalesce(referrer, 'direct') AS referrer, count(*) AS visits FROM visits GROUP BY 1;
|
||||
CREATE VIEW stats_countries AS
|
||||
SELECT country, count(*) AS visits FROM visits GROUP BY 1;
|
||||
CREATE VIEW stats_devices AS
|
||||
SELECT device, count(*) AS visits FROM visits GROUP BY 1;
|
||||
Executable
+18
@@ -0,0 +1,18 @@
|
||||
#!/bin/sh
|
||||
# Runs once, on first start of an empty database volume.
|
||||
set -e
|
||||
psql -v ON_ERROR_STOP=1 -U "$POSTGRES_USER" -d "$POSTGRES_DB" <<SQL
|
||||
CREATE ROLE tracker_rw LOGIN PASSWORD '$TRACKER_PASSWORD';
|
||||
GRANT CONNECT ON DATABASE "$POSTGRES_DB" TO tracker_rw;
|
||||
GRANT USAGE ON SCHEMA public TO tracker_rw;
|
||||
GRANT INSERT ON visits, clicks TO tracker_rw;
|
||||
GRANT USAGE ON SEQUENCE visits_id_seq, clicks_id_seq TO tracker_rw;
|
||||
GRANT SELECT, INSERT, UPDATE ON link_health TO tracker_rw;
|
||||
|
||||
CREATE ROLE stats_ro LOGIN PASSWORD '$STATS_RO_PASSWORD';
|
||||
ALTER ROLE stats_ro SET default_transaction_read_only = on;
|
||||
GRANT CONNECT ON DATABASE "$POSTGRES_DB" TO stats_ro;
|
||||
GRANT USAGE ON SCHEMA public TO stats_ro;
|
||||
GRANT SELECT ON ALL TABLES IN SCHEMA public TO stats_ro;
|
||||
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO stats_ro;
|
||||
SQL
|
||||
Reference in New Issue
Block a user