From 3296d35c3c3a1e88d14b64aac28e8302c478eb91 Mon Sep 17 00:00:00 2001 From: Martin Donadieu Date: Thu, 16 Jul 2026 01:40:49 +0200 Subject: [PATCH 1/5] feat(dashboard): add update delivery latency percentiles Show p50/p75/p95/p99 time-to-deliver metrics at platform, org, and app scope using the same Observe-style cards and trend chart. Co-authored-by: Cursor --- cloudflare_workers/api/index.ts | 2 + messages/en.json | 14 + .../dashboard/DeliveryLatencyPanel.vue | 289 +++++++++++++ src/components/dashboard/Usage.vue | 10 + src/composables/useUpdateDeliveryStats.ts | 143 +++++++ src/pages/admin/dashboard/updates.vue | 3 + .../_backend/private/update_delivery_stats.ts | 393 ++++++++++++++++++ tests/update-delivery-stats.unit.test.ts | 65 +++ 8 files changed, 919 insertions(+) create mode 100644 src/components/dashboard/DeliveryLatencyPanel.vue create mode 100644 src/composables/useUpdateDeliveryStats.ts create mode 100644 supabase/functions/_backend/private/update_delivery_stats.ts create mode 100644 tests/update-delivery-stats.unit.test.ts diff --git a/cloudflare_workers/api/index.ts b/cloudflare_workers/api/index.ts index 723f1556d1..e04f7391aa 100644 --- a/cloudflare_workers/api/index.ts +++ b/cloudflare_workers/api/index.ts @@ -6,6 +6,7 @@ import { app as admin_stats } from '../../supabase/functions/_backend/private/ad import { app as channel_device } from '../../supabase/functions/_backend/private/channel_device.ts' import { app as channel_stats } from '../../supabase/functions/_backend/private/channel_stats.ts' import { app as native_observe_stats } from '../../supabase/functions/_backend/private/native_observe_stats.ts' +import { app as update_delivery_stats } from '../../supabase/functions/_backend/private/update_delivery_stats.ts' import { app as config } from '../../supabase/functions/_backend/private/config.ts' import { app as configBuilder } from '../../supabase/functions/_backend/private/config_builder.ts' import { app as create_device } from '../../supabase/functions/_backend/private/create_device.ts' @@ -129,6 +130,7 @@ appPrivate.route('/admin_stats', admin_stats) appPrivate.route('/stats', stats_priv) appPrivate.route('/channel_stats', channel_stats) appPrivate.route('/native_observe_stats', native_observe_stats) +appPrivate.route('/update_delivery_stats', update_delivery_stats) appPrivate.route('/stripe_checkout', stripe_checkout) appPrivate.route('/stripe_portal', stripe_portal) appPrivate.route('/verify_email_otp', verify_email_otp) diff --git a/messages/en.json b/messages/en.json index 57ee226108..f962740c4b 100644 --- a/messages/en.json +++ b/messages/en.json @@ -880,6 +880,7 @@ "created-app-within-7-days": "Created App (within 7 days)", "created-channel-within-7-days": "Created Channel (within 7 days)", "demo-apps-created": "Demo Apps Created", + "demo": "Demo", "credits-pagination-label": "Page {current} / {total}", "credits-plan-overage": "{included}, then {price}", "credits-pricing-price": "{price} {unit}", @@ -1248,6 +1249,7 @@ "failed-to-create-api-key": "Failed to create API key", "failed-to-fetch-release-status": "Failed to fetch release status", "failed-to-fetch-native-observe-stats": "Failed to fetch native observe statistics", + "failed-to-fetch-update-delivery-stats": "Failed to fetch update delivery latency", "failed-to-fetch-statistics": "Failed to fetch statistics", "failed-to-get-user": "Failed to load the user", "failed-to-regenerate-api-key": "Failed to regenerate API key", @@ -2316,6 +2318,18 @@ "unsafe": "Unsafe", "update": "Update", "update-password-now": "Update Password Now", + "update-delivery-devices": "Devices measured", + "update-delivery-latency": "Time to update deliver", + "update-delivery-latency-help": "Device-side download delivery latency percentiles from download start to download complete.", + "update-delivery-no-data": "No delivery latency data yet", + "update-delivery-no-data-help": "Percentiles appear when devices report download timing via stats metadata, or when download start and complete events can be paired.", + "update-delivery-p50": "P50", + "update-delivery-p75": "P75", + "update-delivery-p95": "P95", + "update-delivery-p99": "P99", + "update-delivery-samples": "Deliveries measured", + "update-delivery-trend": "Delivery latency trend", + "update-delivery-trend-help": "Daily P50, P75, P95, and P99 for time to deliver an update to devices.", "update_statistics": "Updates statistics", "updated-at": "Updated at", "updated-default-download-channel": "Updated default download channel.", diff --git a/src/components/dashboard/DeliveryLatencyPanel.vue b/src/components/dashboard/DeliveryLatencyPanel.vue new file mode 100644 index 0000000000..3650279a28 --- /dev/null +++ b/src/components/dashboard/DeliveryLatencyPanel.vue @@ -0,0 +1,289 @@ + + + diff --git a/src/components/dashboard/Usage.vue b/src/components/dashboard/Usage.vue index fa0cf0e222..13297471ce 100644 --- a/src/components/dashboard/Usage.vue +++ b/src/components/dashboard/Usage.vue @@ -30,6 +30,7 @@ import { useDashboardAppsStore } from '~/stores/dashboardApps' import { useDialogV2Store } from '~/stores/dialogv2' import { useMainStore } from '~/stores/main' import { useOrganizationStore } from '~/stores/organization' +import DeliveryLatencyPanel from './DeliveryLatencyPanel.vue' import DeploymentStatsCard from './DeploymentStatsCard.vue' import UpdateStatsCard from './UpdateStatsCard.vue' import UsageCard from './UsageCard.vue' @@ -1168,4 +1169,13 @@ onBeforeUnmount(() => { + +
+ +
diff --git a/src/composables/useUpdateDeliveryStats.ts b/src/composables/useUpdateDeliveryStats.ts new file mode 100644 index 0000000000..355fd6b03b --- /dev/null +++ b/src/composables/useUpdateDeliveryStats.ts @@ -0,0 +1,143 @@ +import type { Ref } from 'vue' +import { ref } from 'vue' +import { useI18n } from 'vue-i18n' +import { toast } from 'vue-sonner' +import { defaultApiHost, useSupabase } from '~/services/supabase' + +export type UpdateDeliveryScope = 'app' | 'org' | 'platform' + +export interface UpdateDeliveryStatsResponse { + scope: UpdateDeliveryScope + labels: string[] + period: { + requested_days: 1 | 3 | 7 | 30 + actual_days: number + start: string + end: string + } + overview: { + samples: number + devices: number + p50_ms: number | null + p75_ms: number | null + p95_ms: number | null + p99_ms: number | null + } + daily: { + samples: number[] + p50_ms: Array + p75_ms: Array + p95_ms: Array + p99_ms: Array + } +} + +export function useUpdateDeliveryStats( + params: () => { + scope: UpdateDeliveryScope + app_id?: string + org_id?: string + days: 1 | 3 | 7 | 30 + }, + logContext = 'update delivery stats', +) { + const supabase = useSupabase() + const { t } = useI18n() + const stats = ref(null) as Ref + const statsLoading = ref(false) + let latestRequest = 0 + + async function fetchStats() { + const body = params() + if (body.scope === 'app' && !body.app_id) + return + if (body.scope === 'org' && !body.org_id) + return + + const requestId = ++latestRequest + statsLoading.value = true + try { + const { data: sessionData } = await supabase.auth.getSession() + if (!sessionData.session) { + if (requestId === latestRequest) + toast.error(t('not-authenticated')) + return + } + + const response = await fetch(`${defaultApiHost}/private/update_delivery_stats`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'authorization': `Bearer ${sessionData.session.access_token}`, + }, + body: JSON.stringify(body), + }) + + if (requestId !== latestRequest) + return + + if (!response.ok) { + const errorData = await response.json().catch(() => ({})) + console.error(`Failed to fetch ${logContext}:`, errorData) + toast.error(t('failed-to-fetch-update-delivery-stats')) + return + } + + stats.value = await response.json() as UpdateDeliveryStatsResponse + } + catch (error) { + if (requestId !== latestRequest) + return + console.error(`Error fetching ${logContext}:`, error) + toast.error(t('failed-to-fetch-update-delivery-stats')) + } + finally { + if (requestId === latestRequest) + statsLoading.value = false + } + } + + return { stats, statsLoading, fetchStats } +} + +export function buildDemoUpdateDeliveryStats(days: 1 | 3 | 7 | 30): UpdateDeliveryStatsResponse { + const labels: string[] = [] + const end = new Date() + for (let i = days - 1; i >= 0; i -= 1) { + const date = new Date(end) + date.setUTCDate(end.getUTCDate() - i) + labels.push(date.toISOString().slice(0, 10)) + } + + const p50_ms = labels.map((_, index) => 700 + index * 18) + const p75_ms = labels.map((_, index) => 1100 + index * 24) + const p95_ms = labels.map((_, index) => 2200 + index * 40) + const p99_ms = labels.map((_, index) => 3800 + index * 55) + const samples = labels.map((_, index) => 20 + index * 3) + + return { + scope: 'app', + labels, + period: { + requested_days: days, + actual_days: labels.length, + start: `${labels[0]}T00:00:00.000Z`, + end: `${labels[labels.length - 1]}T23:59:59.999Z`, + }, + overview: { + samples: samples.reduce((sum, value) => sum + value, 0), + devices: 42, + p50_ms: p50_ms[p50_ms.length - 1] ?? null, + p75_ms: p75_ms[p75_ms.length - 1] ?? null, + p95_ms: p95_ms[p95_ms.length - 1] ?? null, + p99_ms: p99_ms[p99_ms.length - 1] ?? null, + }, + daily: { + samples, + p50_ms, + p75_ms, + p95_ms, + p99_ms, + }, + } +} diff --git a/src/pages/admin/dashboard/updates.vue b/src/pages/admin/dashboard/updates.vue index fbce52e299..087992e43d 100644 --- a/src/pages/admin/dashboard/updates.vue +++ b/src/pages/admin/dashboard/updates.vue @@ -10,6 +10,7 @@ import { useRouter } from 'vue-router' import AdminFilterBar from '~/components/admin/AdminFilterBar.vue' import AdminMultiLineChart from '~/components/admin/AdminMultiLineChart.vue' import ChartCard from '~/components/dashboard/ChartCard.vue' +import DeliveryLatencyPanel from '~/components/dashboard/DeliveryLatencyPanel.vue' import PageLoader from '~/components/PageLoader.vue' import { formatNumberValue, formatOneDecimal } from '~/services/formatLocale' import { useAdminDashboardStore } from '~/stores/adminDashboard' @@ -290,6 +291,8 @@ displayStore.defaultBack = '/dashboard' /> + + diff --git a/supabase/functions/_backend/private/update_delivery_stats.ts b/supabase/functions/_backend/private/update_delivery_stats.ts new file mode 100644 index 0000000000..8370f16781 --- /dev/null +++ b/supabase/functions/_backend/private/update_delivery_stats.ts @@ -0,0 +1,393 @@ +import type { Context } from 'hono' +import type { MiddlewareKeyVariables } from '../utils/hono.ts' +import dayjs from 'dayjs' +import utc from 'dayjs/plugin/utc.js' +import { Hono } from 'hono/tiny' +import { middlewareAuth, parseBody, simpleError, useCors } from '../utils/hono.ts' +import { cloudlog } from '../utils/logging.ts' +import { closeClient, getPgClient, logPgError } from '../utils/pg.ts' +import { checkPermission } from '../utils/rbac.ts' +import { supabaseClient as useSupabaseClient } from '../utils/supabase.ts' + +dayjs.extend(utc) + +const supportedPeriodDays = [1, 3, 7, 30] as const +type UpdateDeliveryPeriodDays = typeof supportedPeriodDays[number] +type UpdateDeliveryScope = 'app' | 'org' | 'platform' + +interface UpdateDeliveryStatsRequest { + scope?: UpdateDeliveryScope + app_id?: string + org_id?: string + days?: number +} + +interface UpdateDeliveryDailyRow { + day: string + samples: number | string + p50_ms: number | string | null + p75_ms: number | string | null + p95_ms: number | string | null + p99_ms: number | string | null +} + +interface UpdateDeliveryOverviewRow { + samples: number | string + devices: number | string + p50_ms: number | string | null + p75_ms: number | string | null + p95_ms: number | string | null + p99_ms: number | string | null +} + +type NumericValue = number | string | null | undefined + +const endActions = ['download_complete', 'download_zip_complete'] as const +const startActions = ['download_0', 'download_zip_start', 'download_manifest_start'] as const +const timingActions = [...endActions, ...startActions] as const + +const durationExpression = String.raw`CASE + WHEN s.metadata ? 'duration_ms' AND s.metadata ->> 'duration_ms' ~ '^[0-9]+(\.[0-9]+)?$' THEN (s.metadata ->> 'duration_ms')::double precision + WHEN s.metadata ? 'duration' AND s.metadata ->> 'duration' ~ '^[0-9]+(\.[0-9]+)?$' THEN (s.metadata ->> 'duration')::double precision + ELSE NULL +END` + +function buildScopedDeliveriesCte(scope: UpdateDeliveryScope) { + const appFilter = scope === 'app' + ? 'AND s.app_id = $1' + : scope === 'org' + ? 'AND s.app_id IN (SELECT apps.app_id FROM public.apps WHERE apps.owner_org = $1)' + : '' + + // Platform stays metadata-only to avoid unbounded start/end pairing across all apps. + if (scope === 'platform') { + return `WITH deliveries AS ( + SELECT + to_char(date_trunc('day', s.created_at AT TIME ZONE 'UTC'), 'YYYY-MM-DD') AS day, + s.device_id, + duration_ms + FROM ( + SELECT + s.created_at, + s.device_id, + ${durationExpression} AS duration_ms + FROM public.stats s + WHERE s.created_at >= $1::timestamptz + AND s.created_at < $2::timestamptz + AND s.action = ANY($3::public.stats_action[]) + ) s + WHERE duration_ms IS NOT NULL + AND duration_ms >= 0 + AND duration_ms <= 7200000 +)` + } + + return `WITH scoped AS ( + SELECT + s.app_id, + s.device_id, + COALESCE(NULLIF(s.version_name, ''), 'unknown') AS version_name, + s.action, + s.created_at, + ${durationExpression} AS meta_duration_ms + FROM public.stats s + WHERE s.created_at >= $2::timestamptz + AND s.created_at < $3::timestamptz + AND s.action = ANY($4::public.stats_action[]) + ${appFilter} +), +ends AS ( + SELECT * + FROM scoped + WHERE action = ANY($5::public.stats_action[]) +), +starts AS ( + SELECT * + FROM scoped + WHERE action = ANY($6::public.stats_action[]) +), +deliveries AS ( + SELECT + to_char(date_trunc('day', e.created_at AT TIME ZONE 'UTC'), 'YYYY-MM-DD') AS day, + e.device_id, + COALESCE( + e.meta_duration_ms, + EXTRACT(EPOCH FROM (e.created_at - start_event.created_at)) * 1000 + ) AS duration_ms + FROM ends e + LEFT JOIN LATERAL ( + SELECT s.created_at + FROM starts s + WHERE s.app_id = e.app_id + AND s.device_id = e.device_id + AND s.version_name = e.version_name + AND s.created_at <= e.created_at + AND s.created_at > e.created_at - INTERVAL '2 hours' + ORDER BY s.created_at DESC + LIMIT 1 + ) AS start_event ON TRUE + WHERE COALESCE( + e.meta_duration_ms, + EXTRACT(EPOCH FROM (e.created_at - start_event.created_at)) * 1000 + ) IS NOT NULL + AND COALESCE( + e.meta_duration_ms, + EXTRACT(EPOCH FROM (e.created_at - start_event.created_at)) * 1000 + ) >= 0 + AND COALESCE( + e.meta_duration_ms, + EXTRACT(EPOCH FROM (e.created_at - start_event.created_at)) * 1000 + ) <= 7200000 +)` +} + +function buildDailyQuery(scope: UpdateDeliveryScope) { + return `${buildScopedDeliveriesCte(scope)} +SELECT + day, + count(*)::integer AS samples, + percentile_cont(0.50) WITHIN GROUP (ORDER BY duration_ms) AS p50_ms, + percentile_cont(0.75) WITHIN GROUP (ORDER BY duration_ms) AS p75_ms, + percentile_cont(0.95) WITHIN GROUP (ORDER BY duration_ms) AS p95_ms, + percentile_cont(0.99) WITHIN GROUP (ORDER BY duration_ms) AS p99_ms +FROM deliveries +GROUP BY day +ORDER BY day ASC` +} + +function buildOverviewQuery(scope: UpdateDeliveryScope) { + return `${buildScopedDeliveriesCte(scope)} +SELECT + count(*)::integer AS samples, + count(DISTINCT device_id)::integer AS devices, + percentile_cont(0.50) WITHIN GROUP (ORDER BY duration_ms) AS p50_ms, + percentile_cont(0.75) WITHIN GROUP (ORDER BY duration_ms) AS p75_ms, + percentile_cont(0.95) WITHIN GROUP (ORDER BY duration_ms) AS p95_ms, + percentile_cont(0.99) WITHIN GROUP (ORDER BY duration_ms) AS p99_ms +FROM deliveries` +} + +function normalizePeriodDays(days: number | undefined = 7): UpdateDeliveryPeriodDays | null { + if (!Number.isInteger(days) || !supportedPeriodDays.includes(days as UpdateDeliveryPeriodDays)) + return null + return days as UpdateDeliveryPeriodDays +} + +function normalizeScope(value: unknown): UpdateDeliveryScope | null { + if (value === undefined || value === 'app') + return 'app' + if (value === 'org' || value === 'platform') + return value + return null +} + +function generateDateLabels(from: Date, to: Date) { + const start = dayjs(from).utc().startOf('day') + const end = dayjs(to).utc().startOf('day') + if (start.isAfter(end)) + return [] as string[] + + const labels: string[] = [] + let cursor = start + while (cursor.isBefore(end) || cursor.isSame(end)) { + labels.push(cursor.format('YYYY-MM-DD')) + cursor = cursor.add(1, 'day') + } + return labels +} + +function toCount(value: NumericValue) { + const numeric = Number(value ?? 0) + return Number.isFinite(numeric) ? Math.max(0, Math.round(numeric)) : 0 +} + +function toMetric(value: NumericValue, decimals = 0) { + const numeric = Number(value) + if (!Number.isFinite(numeric)) + return null + const factor = 10 ** decimals + return Math.round(numeric * factor) / factor +} + +function buildUpdateDeliveryResponse(input: { + labels: string[] + days: UpdateDeliveryPeriodDays + start: string + end: string + scope: UpdateDeliveryScope + dailyRows: UpdateDeliveryDailyRow[] + overviewRow: UpdateDeliveryOverviewRow | undefined +}) { + const labelIndex = new Map(input.labels.map((label, index) => [label, index])) + const samples = Array.from({ length: input.labels.length }, () => 0) + const p50 = Array.from({ length: input.labels.length }).fill(null) + const p75 = Array.from({ length: input.labels.length }).fill(null) + const p95 = Array.from({ length: input.labels.length }).fill(null) + const p99 = Array.from({ length: input.labels.length }).fill(null) + + for (const row of input.dailyRows) { + const index = labelIndex.get(row.day) + if (index === undefined) + continue + samples[index] = toCount(row.samples) + p50[index] = toMetric(row.p50_ms) + p75[index] = toMetric(row.p75_ms) + p95[index] = toMetric(row.p95_ms) + p99[index] = toMetric(row.p99_ms) + } + + const overview = input.overviewRow ?? { + samples: 0, + devices: 0, + p50_ms: null, + p75_ms: null, + p95_ms: null, + p99_ms: null, + } + + return { + scope: input.scope, + labels: input.labels, + period: { + requested_days: input.days, + actual_days: input.labels.length, + start: input.start, + end: input.end, + }, + overview: { + samples: toCount(overview.samples), + devices: toCount(overview.devices), + p50_ms: toMetric(overview.p50_ms), + p75_ms: toMetric(overview.p75_ms), + p95_ms: toMetric(overview.p95_ms), + p99_ms: toMetric(overview.p99_ms), + }, + daily: { + samples, + p50_ms: p50, + p75_ms: p75, + p95_ms: p95, + p99_ms: p99, + }, + } +} + +async function assertPlatformAdmin(c: Context) { + const authToken = c.req.header('authorization') + if (!authToken) + throw simpleError('not_authorized', 'Not authorized') + + const supabaseClient = useSupabaseClient(c, authToken) + const { data: isAdmin, error: adminError } = await supabaseClient.rpc('is_platform_admin') + if (adminError) { + cloudlog({ requestId: c.get('requestId'), message: 'is_admin_error', error: adminError }) + throw simpleError('is_admin_error', 'Is admin error', { adminError }) + } + if (!isAdmin) + throw simpleError('not_admin', 'Not admin - only admin users can access platform delivery latency') +} + +async function readUpdateDeliveryStats( + c: Context, + scope: UpdateDeliveryScope, + days: UpdateDeliveryPeriodDays, + scopeId?: string, +) { + const endExclusive = dayjs().utc().add(1, 'day').startOf('day') + const start = endExclusive.subtract(days, 'day') + const endInclusive = endExclusive.subtract(1, 'millisecond') + const labels = generateDateLabels(start.toDate(), endExclusive.subtract(1, 'day').toDate()) + const db = getPgClient(c, true) + + try { + const dailyQuery = buildDailyQuery(scope) + const overviewQuery = buildOverviewQuery(scope) + const params = scope === 'platform' + ? [start.toISOString(), endExclusive.toISOString(), [...endActions]] + : [scopeId, start.toISOString(), endExclusive.toISOString(), [...timingActions], [...endActions], [...startActions]] + + const [dailyResult, overviewResult] = await Promise.all([ + db.query(dailyQuery, params), + db.query(overviewQuery, params), + ]) + + return buildUpdateDeliveryResponse({ + labels, + days, + start: start.toISOString(), + end: endInclusive.toISOString(), + scope, + dailyRows: dailyResult.rows, + overviewRow: overviewResult.rows[0], + }) + } + catch (error) { + logPgError(c, 'readUpdateDeliveryStats', error) + throw error + } + finally { + await closeClient(c, db) + } +} + +export const app = new Hono() + +app.use('/', useCors) + +app.post('/', middlewareAuth, async (c) => { + const body = await parseBody(c) + cloudlog({ requestId: c.get('requestId'), message: 'post update_delivery_stats body', body }) + + const scope = normalizeScope(body.scope) + if (!scope) + throw simpleError('invalid_scope', 'scope must be app, org, or platform') + + const days = normalizePeriodDays(body.days) + if (!days) + throw simpleError('invalid_days', 'days must be one of 1, 3, 7, or 30') + + if (scope === 'platform') { + await assertPlatformAdmin(c) + try { + return c.json(await readUpdateDeliveryStats(c, scope, days)) + } + catch (error) { + cloudlog({ requestId: c.get('requestId'), message: 'Error fetching platform update delivery stats', error }) + throw simpleError('fetch_error', 'Failed to fetch update delivery statistics', { error: String(error) }) + } + } + + if (scope === 'app') { + if (!body.app_id) + throw simpleError('missing_params', 'app_id is required for app scope') + if (!(await checkPermission(c, 'app.read', { appId: body.app_id }))) + throw simpleError('app_access_denied', 'You can\'t access this app', { app_id: body.app_id }) + try { + return c.json(await readUpdateDeliveryStats(c, scope, days, body.app_id)) + } + catch (error) { + cloudlog({ requestId: c.get('requestId'), message: 'Error fetching app update delivery stats', error }) + throw simpleError('fetch_error', 'Failed to fetch update delivery statistics', { error: String(error) }) + } + } + + if (!body.org_id) + throw simpleError('missing_params', 'org_id is required for org scope') + if (!(await checkPermission(c, 'org.read', { orgId: body.org_id }))) + throw simpleError('org_access_denied', 'You can\'t access this organization', { org_id: body.org_id }) + + try { + return c.json(await readUpdateDeliveryStats(c, scope, days, body.org_id)) + } + catch (error) { + cloudlog({ requestId: c.get('requestId'), message: 'Error fetching org update delivery stats', error }) + throw simpleError('fetch_error', 'Failed to fetch update delivery statistics', { error: String(error) }) + } +}) + +export const updateDeliveryStatsTestUtils = { + buildUpdateDeliveryResponse, + generateDateLabels, + normalizePeriodDays, + normalizeScope, +} diff --git a/tests/update-delivery-stats.unit.test.ts b/tests/update-delivery-stats.unit.test.ts new file mode 100644 index 0000000000..c019c2d95a --- /dev/null +++ b/tests/update-delivery-stats.unit.test.ts @@ -0,0 +1,65 @@ +import { describe, expect, it } from 'vitest' +import { updateDeliveryStatsTestUtils } from '../supabase/functions/_backend/private/update_delivery_stats.ts' + +describe('update delivery stats helpers', () => { + it.concurrent('normalizes supported period presets', () => { + expect(updateDeliveryStatsTestUtils.normalizePeriodDays(undefined)).toBe(7) + expect(updateDeliveryStatsTestUtils.normalizePeriodDays(1)).toBe(1) + expect(updateDeliveryStatsTestUtils.normalizePeriodDays(3)).toBe(3) + expect(updateDeliveryStatsTestUtils.normalizePeriodDays(7)).toBe(7) + expect(updateDeliveryStatsTestUtils.normalizePeriodDays(30)).toBe(30) + expect(updateDeliveryStatsTestUtils.normalizePeriodDays(2)).toBeNull() + expect(updateDeliveryStatsTestUtils.normalizePeriodDays(7.5)).toBeNull() + }) + + it.concurrent('normalizes supported scopes', () => { + expect(updateDeliveryStatsTestUtils.normalizeScope(undefined)).toBe('app') + expect(updateDeliveryStatsTestUtils.normalizeScope('app')).toBe('app') + expect(updateDeliveryStatsTestUtils.normalizeScope('org')).toBe('org') + expect(updateDeliveryStatsTestUtils.normalizeScope('platform')).toBe('platform') + expect(updateDeliveryStatsTestUtils.normalizeScope('unknown')).toBeNull() + }) + + it.concurrent('generates inclusive UTC day labels', () => { + expect(updateDeliveryStatsTestUtils.generateDateLabels( + new Date('2026-07-01T18:00:00Z'), + new Date('2026-07-03T02:00:00Z'), + )).toEqual(['2026-07-01', '2026-07-02', '2026-07-03']) + }) + + it('builds overview and daily percentile series', () => { + const response = updateDeliveryStatsTestUtils.buildUpdateDeliveryResponse({ + labels: ['2026-07-01', '2026-07-02'], + days: 7, + start: '2026-07-01T00:00:00.000Z', + end: '2026-07-02T23:59:59.999Z', + scope: 'app', + dailyRows: [ + { day: '2026-07-01', samples: 12, p50_ms: 820.4, p75_ms: 1100, p95_ms: 2400.2, p99_ms: 4100 }, + { day: '2026-07-02', samples: 8, p50_ms: 900, p75_ms: 1300, p95_ms: 2800, p99_ms: 5000 }, + ], + overviewRow: { + samples: 20, + devices: 9, + p50_ms: 860.2, + p75_ms: 1200, + p95_ms: 2600.8, + p99_ms: 4500, + }, + }) + + expect(response.scope).toBe('app') + expect(response.overview).toMatchObject({ + samples: 20, + devices: 9, + p50_ms: 860, + p75_ms: 1200, + p95_ms: 2601, + p99_ms: 4500, + }) + expect(response.daily.samples).toEqual([12, 8]) + expect(response.daily.p50_ms).toEqual([820, 900]) + expect(response.daily.p95_ms).toEqual([2400, 2800]) + expect(response.daily.p99_ms).toEqual([4100, 5000]) + }) +}) From d61f2a8d18b46cc4593973a1ad5d22188f1ae99d Mon Sep 17 00:00:00 2001 From: Martin Donadieu Date: Thu, 16 Jul 2026 01:42:43 +0200 Subject: [PATCH 2/5] docs(pr): add delivery latency UI preview webp Co-authored-by: Cursor --- docs/pr-assets/update-delivery-latency.webp | Bin 0 -> 26170 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/pr-assets/update-delivery-latency.webp diff --git a/docs/pr-assets/update-delivery-latency.webp b/docs/pr-assets/update-delivery-latency.webp new file mode 100644 index 0000000000000000000000000000000000000000..86ed2ffa9b513617312c6a3acc9a44ef2dbfa22c GIT binary patch literal 26170 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
hJ;;H@W{vNh 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 literal 0 HcmV?d00001 From d63ab390cc7d1e5ef3252c3d5b1e17f1223970f6 Mon Sep 17 00:00:00 2001 From: Martin Donadieu Date: Thu, 16 Jul 2026 01:46:47 +0200 Subject: [PATCH 3/5] fix(types): restore Discord and GitHub username fields Auto-sync on main dropped the users social username columns from generated types while tests still require them. Co-authored-by: Cursor --- src/types/supabase.types.ts | 6 ++++++ supabase/functions/_backend/utils/supabase.types.ts | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/src/types/supabase.types.ts b/src/types/supabase.types.ts index 700a29f9f8..3249cd7c4c 100644 --- a/src/types/supabase.types.ts +++ b/src/types/supabase.types.ts @@ -3324,11 +3324,13 @@ export type Database = { country: string | null created_at: string | null created_via_invite: boolean + discord_username: string | null email: string email_preferences: Json enable_notifications: boolean first_name: string | null format_locale: string | null + github_username: string | null id: string image_url: string | null last_name: string | null @@ -3340,11 +3342,13 @@ export type Database = { country?: string | null created_at?: string | null created_via_invite?: boolean + discord_username?: string | null email: string email_preferences?: Json enable_notifications?: boolean first_name?: string | null format_locale?: string | null + github_username?: string | null id: string image_url?: string | null last_name?: string | null @@ -3356,11 +3360,13 @@ export type Database = { country?: string | null created_at?: string | null created_via_invite?: boolean + discord_username?: string | null email?: string email_preferences?: Json enable_notifications?: boolean first_name?: string | null format_locale?: string | null + github_username?: string | null id?: string image_url?: string | null last_name?: string | null diff --git a/supabase/functions/_backend/utils/supabase.types.ts b/supabase/functions/_backend/utils/supabase.types.ts index 700a29f9f8..3249cd7c4c 100644 --- a/supabase/functions/_backend/utils/supabase.types.ts +++ b/supabase/functions/_backend/utils/supabase.types.ts @@ -3324,11 +3324,13 @@ export type Database = { country: string | null created_at: string | null created_via_invite: boolean + discord_username: string | null email: string email_preferences: Json enable_notifications: boolean first_name: string | null format_locale: string | null + github_username: string | null id: string image_url: string | null last_name: string | null @@ -3340,11 +3342,13 @@ export type Database = { country?: string | null created_at?: string | null created_via_invite?: boolean + discord_username?: string | null email: string email_preferences?: Json enable_notifications?: boolean first_name?: string | null format_locale?: string | null + github_username?: string | null id: string image_url?: string | null last_name?: string | null @@ -3356,11 +3360,13 @@ export type Database = { country?: string | null created_at?: string | null created_via_invite?: boolean + discord_username?: string | null email?: string email_preferences?: Json enable_notifications?: boolean first_name?: string | null format_locale?: string | null + github_username?: string | null id?: string image_url?: string | null last_name?: string | null From 66982944cbc0c572f2ea4a8a0931b9d20e85d25f Mon Sep 17 00:00:00 2001 From: Martin Donadieu Date: Thu, 16 Jul 2026 02:27:45 +0200 Subject: [PATCH 4/5] fix(observe): show update delivery latency on Observe Move the app-scoped delivery latency panel to Native Observe, sync it with the page period, and replace the fake PR preview with a real Observe screenshot. Co-authored-by: Cursor --- .../update-delivery-latency-observe.webp | Bin 0 -> 60602 bytes docs/pr-assets/update-delivery-latency.webp | Bin 26170 -> 30216 bytes src/auto-imports.d.ts | 7 +++++++ src/components.d.ts | 1 + .../dashboard/DeliveryLatencyPanel.vue | 14 +++++++++----- src/components/dashboard/Usage.vue | 5 ++--- src/pages/app/[app].observe.vue | 7 +++++++ 7 files changed, 26 insertions(+), 8 deletions(-) create mode 100644 docs/pr-assets/update-delivery-latency-observe.webp diff --git a/docs/pr-assets/update-delivery-latency-observe.webp b/docs/pr-assets/update-delivery-latency-observe.webp new file mode 100644 index 0000000000000000000000000000000000000000..ef04062e49f30e0117cc203f757c01a64665c999 GIT binary patch literal 60602 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 U00002bLglD#ANXXFm?a{03mr#@Bjb+ literal 26170 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

hJ;;H@W{vNh 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 diff --git a/src/auto-imports.d.ts b/src/auto-imports.d.ts index 11e3a0b58e..696a00bca1 100644 --- a/src/auto-imports.d.ts +++ b/src/auto-imports.d.ts @@ -11,6 +11,7 @@ declare global { const WEBHOOK_EVENT_TYPES: typeof import('./stores/webhooks').WEBHOOK_EVENT_TYPES const asyncComputed: typeof import('@vueuse/core').asyncComputed const autoResetRef: typeof import('@vueuse/core').autoResetRef + const buildDemoUpdateDeliveryStats: typeof import('./composables/useUpdateDeliveryStats').buildDemoUpdateDeliveryStats const computed: typeof import('vue').computed const computedAsync: typeof import('@vueuse/core').computedAsync const computedEager: typeof import('@vueuse/core').computedEager @@ -294,6 +295,7 @@ declare global { const useToString: typeof import('@vueuse/core').useToString const useToggle: typeof import('@vueuse/core').useToggle const useTransition: typeof import('@vueuse/core').useTransition + const useUpdateDeliveryStats: typeof import('./composables/useUpdateDeliveryStats').useUpdateDeliveryStats const useUrlSearchParams: typeof import('@vueuse/core').useUrlSearchParams const useUserMedia: typeof import('@vueuse/core').useUserMedia const useVModel: typeof import('@vueuse/core').useVModel @@ -338,6 +340,9 @@ declare global { export type { CheckDomainResponse } from './composables/useSSORouting' import('./composables/useSSORouting') // @ts-ignore + export type { UpdateDeliveryScope, UpdateDeliveryStatsResponse } from './composables/useUpdateDeliveryStats' + import('./composables/useUpdateDeliveryStats') + // @ts-ignore export type { MetricCategory, DateRangeMode } from './stores/adminDashboard' import('./stores/adminDashboard') // @ts-ignore @@ -364,6 +369,7 @@ declare module 'vue' { readonly WEBHOOK_EVENT_TYPES: UnwrapRef readonly asyncComputed: UnwrapRef readonly autoResetRef: UnwrapRef + readonly buildDemoUpdateDeliveryStats: UnwrapRef readonly computed: UnwrapRef readonly computedAsync: UnwrapRef readonly computedEager: UnwrapRef @@ -644,6 +650,7 @@ declare module 'vue' { readonly useToString: UnwrapRef readonly useToggle: UnwrapRef readonly useTransition: UnwrapRef + readonly useUpdateDeliveryStats: UnwrapRef readonly useUrlSearchParams: UnwrapRef readonly useUserMedia: UnwrapRef readonly useVModel: UnwrapRef diff --git a/src/components.d.ts b/src/components.d.ts index 1a20483e87..ba9cb52d15 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -50,6 +50,7 @@ declare module 'vue' { ConnectAppPicker: typeof import('./components/connect/ConnectAppPicker.vue')['default'] CreditsCta: typeof import('./components/CreditsCta.vue')['default'] DataTable: typeof import('./components/DataTable.vue')['default'] + DeliveryLatencyPanel: typeof import('./components/dashboard/DeliveryLatencyPanel.vue')['default'] DemoOnboardingGate: typeof import('./components/dashboard/DemoOnboardingGate.vue')['default'] DemoOnboardingModal: typeof import('./components/dashboard/DemoOnboardingModal.vue')['default'] DeploymentBanner: typeof import('./components/dashboard/DeploymentBanner.vue')['default'] diff --git a/src/components/dashboard/DeliveryLatencyPanel.vue b/src/components/dashboard/DeliveryLatencyPanel.vue index 3650279a28..0ab2e11e20 100644 --- a/src/components/dashboard/DeliveryLatencyPanel.vue +++ b/src/components/dashboard/DeliveryLatencyPanel.vue @@ -18,16 +18,20 @@ const props = withDefaults(defineProps<{ appId?: string orgId?: string forceDemo?: boolean + days?: PeriodDayOption + hidePeriodSelector?: boolean }>(), { appId: '', orgId: '', forceDemo: false, + hidePeriodSelector: false, }) Chart.register(CategoryScale, LinearScale, PointElement, LineElement, Tooltip, Legend) const { t } = useI18n() -const days = ref(7) +const localDays = ref(7) +const days = computed(() => props.days ?? localDays.value) const periodDayOptions: PeriodDayOption[] = [1, 3, 7, 30] const { stats, statsLoading, fetchStats } = useUpdateDeliveryStats(() => ({ @@ -164,9 +168,9 @@ function periodButtonLabel(option: PeriodDayOption) { } function selectPeriod(option: PeriodDayOption) { - if (days.value === option) + if (props.days !== undefined || localDays.value === option) return - days.value = option + localDays.value = option } watch( @@ -181,7 +185,7 @@ watch(