diff --git a/libs/medic-users-meta/migrations/202105171933.do.86.usersMeta.sql b/libs/medic-users-meta/migrations/202105171933.do.86.usersMeta.sql index 2116e1c..6ef1184 100644 --- a/libs/medic-users-meta/migrations/202105171933.do.86.usersMeta.sql +++ b/libs/medic-users-meta/migrations/202105171933.do.86.usersMeta.sql @@ -24,26 +24,29 @@ CREATE INDEX idx_useview_feedback_period_start_user ON useview_feedback(period_s CREATE MATERIALIZED VIEW useview_telemetry AS SELECT doc->>'_id' AS uuid, - CONCAT_WS( --> Date concatenation from JSON fields, eg. 2021-5-17 - '-', - doc#>>'{metadata,year}', --> year - CASE --> month of the year - WHEN - string_to_array(substring(doc#>>'{metadata,versions,app}' FROM '(\d+.\d+.\d+)'),'.')::int[] < '{3,8,0}'::int[] - THEN - (doc#>>'{metadata,month}')::int+1 --> Legacy, months zero-indexed (0 - 11) - ELSE - (doc#>>'{metadata,month}')::int --> Month is between 1 - 12 - END, - CASE --> day of the month, else 1 - WHEN - (doc#>>'{metadata,day}') IS NOT NULL - THEN - doc#>>'{metadata,day}' - ELSE - '1' - END - )::date AS period_start, + (CASE + WHEN doc#>>'{metadata,year}' IS NULL THEN '1970-1-1' + ELSE + CONCAT_WS( --> Date concatenation from JSON fields, eg. 2021-5-17 + '-', + doc#>>'{metadata,year}', --> year + CASE --> month of the year + WHEN + string_to_array(substring(doc#>>'{metadata,versions,app}' FROM '(\d+.\d+.\d+)'),'.')::int[] < '{3,8,0}'::int[] + THEN + (doc#>>'{metadata,month}')::int+1 --> Legacy, months zero-indexed (0 - 11) + ELSE + (doc#>>'{metadata,month}')::int --> Month is between 1 - 12 + END, + CASE --> day of the month, else 1 + WHEN + (doc#>>'{metadata,day}') IS NOT NULL + THEN + doc#>>'{metadata,day}' + ELSE + '1' + END) + END)::date AS period_start, doc#>>'{metadata,user}' AS user_name, doc#>>'{metadata,versions,app}' AS app_version, doc#>>'{metrics,boot_time,min}' AS boot_time_min, diff --git a/libs/medic-users-meta/migrations/202304140052.do.telemetry_devices.sql b/libs/medic-users-meta/migrations/202304140052.do.telemetry_devices.sql index e45e115..92333ed 100644 --- a/libs/medic-users-meta/migrations/202304140052.do.telemetry_devices.sql +++ b/libs/medic-users-meta/migrations/202304140052.do.telemetry_devices.sql @@ -9,26 +9,28 @@ SELECT doc #>> '{_id}' AS telemetry_doc_id, doc #>> '{metadata,deviceId}' AS device_id, doc #>> '{metadata,user}' AS user_name, - - concat_ws( - '-', - doc #>> '{metadata,year}', - CASE - WHEN - doc #>> '{metadata,day}' IS NULL - AND ( - doc #>> '{metadata,versions,app}' IS NULL - OR string_to_array("substring"(doc #>> '{metadata,versions,app}', '(\d+.\d+.\d+)'), '.')::integer[] < '{3,8,0}'::integer[] - ) - THEN (doc #>> '{metadata,month}')::integer + 1 - ELSE (doc #>> '{metadata,month}')::integer - END, - CASE - WHEN doc #>> '{metadata,day}' IS NOT NULL - THEN doc #>> '{metadata,day}' - ELSE '1' - END - )::date AS period_start, + (CASE + WHEN doc#>>'{metadata,year}' IS NULL THEN '1970-1-1' + ELSE + concat_ws( + '-', + doc #>> '{metadata,year}', + CASE + WHEN + doc #>> '{metadata,day}' IS NULL + AND ( + doc #>> '{metadata,versions,app}' IS NULL + OR string_to_array("substring"(doc #>> '{metadata,versions,app}', '(\d+.\d+.\d+)'), '.')::integer[] < '{3,8,0}'::integer[] + ) + THEN (doc #>> '{metadata,month}')::integer + 1 + ELSE (doc #>> '{metadata,month}')::integer + END, + CASE + WHEN doc #>> '{metadata,day}' IS NOT NULL + THEN doc #>> '{metadata,day}' + ELSE '1' + END) + END)::date AS period_start, doc #>> '{device,deviceInfo,hardware,manufacturer}' AS device_manufacturer, diff --git a/libs/medic-users-meta/migrations/202304140054.do.telemetry_metrics.sql b/libs/medic-users-meta/migrations/202304140054.do.telemetry_metrics.sql index 97b8266..e69aac2 100644 --- a/libs/medic-users-meta/migrations/202304140054.do.telemetry_metrics.sql +++ b/libs/medic-users-meta/migrations/202304140054.do.telemetry_metrics.sql @@ -8,17 +8,20 @@ WITH telemetry_docs_with_metric_blob AS ( doc #>> '{metadata,deviceId}' AS device_id, doc #>> '{_id}' AS telemetry_doc_id, doc #>> '{metadata,user}' AS user_name, - concat_ws( - '-', doc #>> '{metadata,year}', - CASE - WHEN (doc #>> '{metadata,day}') IS NULL AND ((doc #>> '{metadata,versions,app}') IS NULL OR string_to_array("substring"(doc #>> '{metadata,versions,app}', '(\d+.\d+.\d+)'::text), '.'::text)::integer[] < '{3,8,0}'::integer[]) THEN ((doc #>> '{metadata,month}')::integer) + 1 - ELSE (doc #>> '{metadata,month}')::integer - END, - CASE - WHEN (doc #>> '{metadata,day}') IS NOT NULL THEN doc #>> '{metadata,day}' - ELSE '1'::text - END - )::date AS period_start, + (CASE + WHEN doc#>>'{metadata,year}' IS NULL THEN '1970-1-1' + ELSE + concat_ws( + '-', doc #>> '{metadata,year}', + CASE + WHEN (doc #>> '{metadata,day}') IS NULL AND ((doc #>> '{metadata,versions,app}') IS NULL OR string_to_array("substring"(doc #>> '{metadata,versions,app}', '(\d+.\d+.\d+)'::text), '.'::text)::integer[] < '{3,8,0}'::integer[]) THEN ((doc #>> '{metadata,month}')::integer) + 1 + ELSE (doc #>> '{metadata,month}')::integer + END, + CASE + WHEN (doc #>> '{metadata,day}') IS NOT NULL THEN doc #>> '{metadata,day}' + ELSE '1'::text + END) + END)::date AS period_start, jsonb_object_keys(doc -> 'metrics'::text) AS metric, doc -> 'metrics' -> jsonb_object_keys(doc -> 'metrics') AS metric_values FROM couchdb_users_meta