( telemetryId: string, column: string, filters: BaseQueryFilters )
| 263 | } |
| 264 | |
| 265 | export async function getTelemetrySessionMetrics( |
| 266 | telemetryId: string, |
| 267 | column: string, |
| 268 | filters: BaseQueryFilters |
| 269 | ): Promise<{ x: string; y: number }[]> { |
| 270 | const { filterQuery, joinSession, params } = await parseTelemetryFilters( |
| 271 | telemetryId, |
| 272 | { |
| 273 | ...filters, |
| 274 | }, |
| 275 | { |
| 276 | joinSession: SESSION_COLUMNS.includes(column), |
| 277 | } |
| 278 | ); |
| 279 | const includeCountry = column === 'city' || column === 'subdivision1'; |
| 280 | |
| 281 | return prisma.$queryRaw`select |
| 282 | ${Prisma.sql([`"${column}"`])} x, |
| 283 | count(distinct "TelemetryEvent"."sessionId") y |
| 284 | ${includeCountry ? Prisma.sql([', country']) : Prisma.empty} |
| 285 | from "TelemetryEvent" |
| 286 | ${joinSession} |
| 287 | where "TelemetryEvent"."telemetryId" = ${telemetryId} |
| 288 | and "TelemetryEvent"."createdAt" |
| 289 | between ${params.startDate}::timestamptz and ${ |
| 290 | params.endDate |
| 291 | }::timestamptz |
| 292 | ${filterQuery} |
| 293 | group by 1 |
| 294 | ${includeCountry ? Prisma.sql([', 3']) : Prisma.empty} |
| 295 | order by 2 desc |
| 296 | limit 100`; |
| 297 | } |
| 298 | |
| 299 | export async function getTelemetryPageviewMetrics( |
| 300 | telemetryId: string, |
no test coverage detected