Skip to content

Commit caf0c26

Browse files
ts-codecs
1 parent 792b299 commit caf0c26

File tree

1 file changed

+109
-111
lines changed

1 file changed

+109
-111
lines changed

modules/module-postgres-storage/src/storage/PostgresReportStorageFactory.ts

Lines changed: 109 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,13 @@ export class PostgresReportStorageFactory implements storage.ReportStorageFactor
109109
}
110110
}
111111

112-
private mapListCurrentConnectionsResponse(result: SdkReportingDecoded): ListCurrentConnections {
112+
private mapListCurrentConnectionsResponse(result: SdkReportingDecoded | null): ListCurrentConnections {
113+
if (!result) {
114+
return {
115+
users: 0,
116+
sdks: []
117+
};
118+
}
113119
return {
114120
users: Number(result.users),
115121
sdks: result.sdks?.data || []
@@ -228,140 +234,132 @@ export class PostgresReportStorageFactory implements storage.ReportStorageFactor
228234
const jwtExpIsoString = jwt_exp!.toISOString();
229235
const { gte, lt } = this.updateTableFilter();
230236
const uuid = v4();
231-
const result = await this.db.query({
232-
statement: `
233-
UPDATE sdk_report_events
234-
SET connect_at = $1::timestamptz,
235-
sdk = $2,
236-
user_agent = $3,
237-
jwt_exp = $4::timestamptz,
238-
disconnect_at = NULL
239-
WHERE user_id = $5
240-
AND client_id = $6
241-
AND connect_at >= $7::timestamptz
242-
AND connect_at < $8::timestamptz;
243-
`,
244-
params: [
245-
{ type: 1184, value: connectIsoString },
246-
{ type: 'varchar', value: sdk },
247-
{ type: 'varchar', value: user_agent },
248-
{ type: 1184, value: jwtExpIsoString },
249-
{ type: 'varchar', value: user_id },
250-
{ type: 'varchar', value: client_id },
251-
{ type: 1184, value: gte },
252-
{ type: 1184, value: lt }
253-
]
254-
});
255-
if (result.rows.length === 0) {
256-
await this.db.query({
257-
statement: `
258-
INSERT INTO sdk_report_events (
259-
user_id, client_id, connect_at, sdk, user_agent, jwt_exp, id
260-
)
261-
SELECT $1, $2, $3::timestamptz, $4, $5, $6::timestamptz, $7
262-
WHERE NOT EXISTS (
263-
SELECT 1 FROM sdk_report_events
264-
WHERE user_id = $1
265-
AND client_id = $2
266-
AND connect_at >= $8::timestamptz
267-
AND connect_at < $9::timestamptz
268-
);`,
269-
params: [
270-
{ type: 'varchar', value: user_id },
271-
{ type: 'varchar', value: client_id },
272-
{ type: 1184, value: connectIsoString },
273-
{ type: 'varchar', value: sdk },
274-
{ type: 'varchar', value: user_agent },
275-
{ type: 1184, value: jwtExpIsoString },
276-
{ type: 'varchar', value: uuid },
277-
{ type: 1184, value: gte },
278-
{ type: 1184, value: lt }
279-
]
280-
});
237+
const result = await this.db.sql`
238+
UPDATE sdk_report_events
239+
SET
240+
connect_at = ${{ type: 1184, value: connectIsoString }},
241+
sdk = ${{ type: 'varchar', value: sdk }},
242+
user_agent = ${{ type: 'varchar', value: user_agent }},
243+
jwt_exp = ${{ type: 1184, value: jwtExpIsoString }},
244+
disconnect_at = NULL
245+
WHERE
246+
user_id = ${{ type: 'varchar', value: user_id }}
247+
AND client_id = ${{ type: 'varchar', value: client_id }}
248+
AND connect_at >= ${{ type: 1184, value: gte }}
249+
AND connect_at < ${{ type: 1184, value: lt }};
250+
`.rows();
251+
if (result.length === 0) {
252+
await this.db.sql`
253+
INSERT INTO
254+
sdk_report_events (
255+
user_id,
256+
client_id,
257+
connect_at,
258+
sdk,
259+
user_agent,
260+
jwt_exp,
261+
id
262+
)
263+
SELECT
264+
${{ type: 'varchar', value: user_id }},
265+
${{ type: 'varchar', value: client_id }},
266+
${{ type: 1184, value: connectIsoString }},
267+
${{ type: 'varchar', value: sdk }},
268+
${{ type: 'varchar', value: user_agent }},
269+
${{ type: 1184, value: jwtExpIsoString }},
270+
${{ type: 'varchar', value: uuid }}
271+
WHERE
272+
NOT EXISTS (
273+
SELECT
274+
1
275+
FROM
276+
sdk_report_events
277+
WHERE
278+
user_id = ${{ type: 'varchar', value: user_id }}
279+
AND client_id = ${{ type: 'varchar', value: client_id }}
280+
AND connect_at >= ${{ type: 1184, value: gte }}
281+
AND connect_at < ${{ type: 1184, value: lt }}
282+
);
283+
`.execute();
281284
}
282285
}
283286
async reportSdkDisconnect(data: SdkDisconnectEventData): Promise<void> {
284287
const { user_id, client_id, disconnect_at } = data;
285288
const disconnectIsoString = disconnect_at.toISOString();
286289
const { gte, lt } = this.updateTableFilter();
287-
const query = `
290+
await this.db.sql`
288291
UPDATE sdk_report_events
289292
SET
290-
disconnect_at = CAST($1 AS TIMESTAMP WITH TIME ZONE),
293+
disconnect_at = ${{ type: 1184, value: disconnectIsoString }},
291294
jwt_exp = NULL
292-
WHERE user_id = $2
293-
AND client_id = $3
294-
AND connect_at >= CAST($4 AS TIMESTAMP WITH TIME ZONE)
295-
AND connect_at < CAST($5 AS TIMESTAMP WITH TIME ZONE);`;
296-
297-
const result = await this.db.query({
298-
statement: query,
299-
params: [
300-
{ type: 1184, value: disconnectIsoString },
301-
{ type: 'varchar', value: user_id },
302-
{ type: 'varchar', value: client_id },
303-
{ type: 1184, value: gte },
304-
{ type: 1184, value: lt }
305-
]
306-
});
295+
WHERE
296+
user_id = ${{ type: 'varchar', value: user_id }}
297+
AND client_id = ${{ type: 'varchar', value: client_id }}
298+
AND connect_at >= ${{ type: 1184, value: gte }}
299+
AND connect_at < ${{ type: 1184, value: lt }};
300+
`.execute();
307301
}
308302
async listCurrentConnections(data: ListCurrentConnectionsRequest): Promise<ListCurrentConnections> {
309303
const result = await this.listConnectionsQuery(data);
310-
if (!result) {
311-
return {
312-
users: 0,
313-
sdks: []
314-
};
315-
}
316304
return this.mapListCurrentConnectionsResponse(result);
317305
}
318306

319307
async scrapeSdkData(data: ScrapeSdkDataRequest): Promise<ListCurrentConnections> {
320308
const { timeframe, interval } = data;
321309
const { lt, gt } = this.timeFrameQuery(timeframe, interval);
322-
const query = `
323-
WITH filtered AS (
324-
SELECT *
325-
FROM sdk_report_events
326-
WHERE connect_at > CAST($1 AS TIMESTAMP WITH TIME ZONE)
327-
AND connect_at <= CAST($2 AS TIMESTAMP WITH TIME ZONE)
328-
),
329-
unique_users AS (
330-
SELECT COUNT(DISTINCT user_id) AS count
331-
FROM filtered
332-
),
333-
sdk_versions_array AS (
334-
SELECT sdk,
335-
COUNT(*) AS total,
310+
const result = await this.db.sql`
311+
WITH
312+
filtered AS (
313+
SELECT
314+
*
315+
FROM
316+
sdk_report_events
317+
WHERE
318+
connect_at > ${{ type: 1184, value: gt }}
319+
AND connect_at <= ${{ type: 1184, value: lt }}
320+
),
321+
unique_users AS (
322+
SELECT
323+
COUNT(DISTINCT user_id) AS count
324+
FROM
325+
filtered
326+
),
327+
sdk_versions_array AS (
328+
SELECT
329+
sdk,
336330
COUNT(DISTINCT client_id) AS clients,
337331
COUNT(DISTINCT user_id) AS users
338-
FROM filtered
339-
GROUP BY sdk
340-
)
341-
SELECT COALESCE(u.count, 0) AS users, JSON_AGG(ROW_TO_JSON(s)) AS sdks
342-
FROM unique_users u
343-
JOIN sdk_versions_array s ON TRUE;
344-
`;
345-
const result = await this.db.query({ statement: query, params: [{ value: gt }, { value: lt }] });
346-
console.log(result.rows);
347-
return {
348-
users: 0,
349-
sdks: []
350-
};
332+
FROM
333+
filtered
334+
GROUP BY
335+
sdk
336+
)
337+
SELECT
338+
COALESCE(u.count, 0) AS users,
339+
JSON_AGG(ROW_TO_JSON(s)) AS sdks
340+
FROM
341+
unique_users u
342+
JOIN sdk_versions_array s ON TRUE;
343+
`
344+
.decoded(SdkReporting)
345+
.first();
346+
return this.mapListCurrentConnectionsResponse(result);
351347
}
352348
async deleteOldSdkData(data: DeleteOldSdkData): Promise<void> {
353349
const { timeframe, interval } = data;
354350
const { lt } = this.timeFrameDeleteQuery(timeframe, interval);
355-
const query = `
356-
DELETE FROM sdk_report_events
357-
WHERE connect_at < CAST($1 AS TIMESTAMP WITH TIME ZONE)
358-
AND (
359-
disconnect_at IS NOT NULL
360-
OR (jwt_exp < NOW() AND disconnect_at IS NULL)
361-
);
362-
`;
363-
const params = [{ value: lt }];
364-
await this.db.query({ statement: query, params });
351+
await this.db.sql`
352+
DELETE FROM sdk_report_events
353+
WHERE
354+
connect_at < ${{ type: 1184, value: lt }}
355+
AND (
356+
disconnect_at IS NOT NULL
357+
OR (
358+
jwt_exp < NOW()
359+
AND disconnect_at IS NULL
360+
)
361+
);
362+
`.execute();
365363
}
366364

367365
async [Symbol.asyncDispose]() {

0 commit comments

Comments
 (0)