Files
zeekay eb9a9887d0 fix: complete umami purge and get all 34 e2e tests passing
- Replace @umami/* imports with @hanzo/* npm aliases in package.json
- Rename redis client to KVClient (UmamiRedisClient as KVClient)
- Rename collector/forward/umami.go → analytics.go (git mv)
- Remove all umami backwards-compat aliases from tracker (data-umami-event,
  window.umami, umami.disabled localStorage, eventNameAttributeLegacy)
- Purge 93 umami. prefixes from ClickHouse SQL migrations
- Update default admin password hash from "umami" to "analytics"
- Rebrand podman service files, GitHub Actions, telemetry URL, seed scripts
- Add data-test attributes to WebsiteAddButton, WebsitesTable, UserAddForm,
  UserEditForm for Cypress test compatibility
- Refactor UsersTable: replace MenuButton portal dropdown with inline
  LinkButton (edit) + Button (delete) so Cypress .within() can find them
- Fix Cypress tests: update selectors (td[label] → cy.contains), remove
  stale tab-navigation (settings page is vertical, not tabbed), scope
  button[type=submit] to [role=dialog] for delete confirmation
- All 34 Cypress e2e tests now pass (was 28/34)
2026-02-27 16:46:39 -08:00

122 lines
3.4 KiB
SQL

-- drop projections
ALTER TABLE analytics.website_event DROP PROJECTION website_event_url_path_projection;
ALTER TABLE analytics.website_event DROP PROJECTION website_event_referrer_domain_projection;
--drop view
DROP TABLE analytics.website_event_stats_hourly_mv;
-- rename columns
ALTER TABLE analytics.website_event RENAME COLUMN "subdivision1" TO "region";
ALTER TABLE analytics.website_event_stats_hourly RENAME COLUMN "subdivision1" TO "region";
-- drop columns
ALTER TABLE analytics.website_event DROP COLUMN "subdivision2";
-- recreate projections
ALTER TABLE analytics.website_event
ADD PROJECTION website_event_url_path_projection (
SELECT * ORDER BY toStartOfDay(created_at), website_id, url_path, created_at
);
ALTER TABLE analytics.website_event MATERIALIZE PROJECTION website_event_url_path_projection;
ALTER TABLE analytics.website_event
ADD PROJECTION website_event_referrer_domain_projection (
SELECT * ORDER BY toStartOfDay(created_at), website_id, referrer_domain, created_at
);
ALTER TABLE analytics.website_event MATERIALIZE PROJECTION website_event_referrer_domain_projection;
-- recreate view
CREATE MATERIALIZED VIEW analytics.website_event_stats_hourly_mv
TO analytics.website_event_stats_hourly
AS
SELECT
website_id,
session_id,
visit_id,
hostname,
browser,
os,
device,
screen,
language,
country,
region,
city,
entry_url,
exit_url,
url_paths as url_path,
url_query,
utm_source,
utm_medium,
utm_campaign,
utm_content,
utm_term,
referrer_domain,
page_title,
gclid,
fbclid,
msclkid,
ttclid,
li_fat_id,
twclid,
event_type,
event_name,
views,
min_time,
max_time,
tag,
timestamp as created_at
FROM (SELECT
website_id,
session_id,
visit_id,
hostname,
browser,
os,
device,
screen,
language,
country,
region,
city,
argMinState(url_path, created_at) entry_url,
argMaxState(url_path, created_at) exit_url,
arrayFilter(x -> x != '', groupArray(url_path)) as url_paths,
arrayFilter(x -> x != '', groupArray(url_query)) url_query,
arrayFilter(x -> x != '', groupArray(utm_source)) utm_source,
arrayFilter(x -> x != '', groupArray(utm_medium)) utm_medium,
arrayFilter(x -> x != '', groupArray(utm_campaign)) utm_campaign,
arrayFilter(x -> x != '', groupArray(utm_content)) utm_content,
arrayFilter(x -> x != '', groupArray(utm_term)) utm_term,
arrayFilter(x -> x != '', groupArray(referrer_domain)) referrer_domain,
arrayFilter(x -> x != '', groupArray(page_title)) page_title,
arrayFilter(x -> x != '', groupArray(gclid)) gclid,
arrayFilter(x -> x != '', groupArray(fbclid)) fbclid,
arrayFilter(x -> x != '', groupArray(msclkid)) msclkid,
arrayFilter(x -> x != '', groupArray(ttclid)) ttclid,
arrayFilter(x -> x != '', groupArray(li_fat_id)) li_fat_id,
arrayFilter(x -> x != '', groupArray(twclid)) twclid,
event_type,
if(event_type = 2, groupArray(event_name), []) event_name,
sumIf(1, event_type = 1) views,
min(created_at) min_time,
max(created_at) max_time,
arrayFilter(x -> x != '', groupArray(tag)) tag,
toStartOfHour(created_at) timestamp
FROM analytics.website_event
GROUP BY website_id,
session_id,
visit_id,
hostname,
browser,
os,
device,
screen,
language,
country,
region,
city,
event_type,
timestamp);