Skip to content

Commit c3fafb4

Browse files
committed
(cleanup) remove minute level agg
1 parent cb8b1eb commit c3fafb4

File tree

7 files changed

+2
-248
lines changed

7 files changed

+2
-248
lines changed

backend/src/data-source.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import {
1212
ApiKey,
1313
BlockFields,
1414
InstanceSettings,
15-
AggregateTraceDataMinutely,
1615
AuthenticationConfig,
1716
AggregateTraceDataHourly,
1817
Attack,
@@ -34,7 +33,6 @@ export const AppDataSource: DataSource = new DataSource({
3433
ApiKey,
3534
BlockFields,
3635
InstanceSettings,
37-
AggregateTraceDataMinutely,
3836
AuthenticationConfig,
3937
AggregateTraceDataHourly,
4038
Attack,

backend/src/models/aggregate-trace-data-minutely.ts

Lines changed: 0 additions & 42 deletions
This file was deleted.

backend/src/models/index.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import { ApiEndpointTest } from "./api-endpoint-test"
99
import { ApiKey } from "./keys"
1010
import { BlockFields } from "./block-fields"
1111
import { InstanceSettings } from "./instance-settings"
12-
import { AggregateTraceDataMinutely } from "./aggregate-trace-data-minutely"
1312
import { AuthenticationConfig } from "./authentication-config"
1413
import { AggregateTraceDataHourly } from "./aggregate-trace-data-hourly"
1514
import { Attack } from "./attack"
@@ -26,7 +25,6 @@ export type DatabaseModel =
2625
| ApiKey
2726
| BlockFields
2827
| InstanceSettings
29-
| AggregateTraceDataMinutely
3028
| AuthenticationConfig
3129
| AggregateTraceDataHourly
3230
| Attack
@@ -43,7 +41,6 @@ export {
4341
ApiKey,
4442
BlockFields,
4543
InstanceSettings,
46-
AggregateTraceDataMinutely,
4744
AuthenticationConfig,
4845
AggregateTraceDataHourly,
4946
Attack,

backend/src/services/jobs/clearApiTraces.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
import { DateTime } from "luxon"
22
import { ApiTrace } from "models"
33
import { AppDataSource } from "data-source"
4-
import {
5-
aggregateTracesDataHourlyQuery,
6-
aggregateTracesDataMinutelyQuery,
7-
} from "./queries"
4+
import { aggregateTracesDataHourlyQuery } from "./queries"
85

96
const clearApiTraces = async (): Promise<void> => {
107
const queryRunner = AppDataSource.createQueryRunner()
118
await queryRunner.connect()
129
try {
13-
const now = DateTime.now().startOf("hour")
10+
const now = DateTime.now()
1411
const oneHourAgo = now.minus({ hours: 1 }).toJSDate()
1512

1613
const maxTimeRes = await queryRunner.manager
@@ -25,7 +22,6 @@ const clearApiTraces = async (): Promise<void> => {
2522

2623
if (maxTime) {
2724
await queryRunner.startTransaction()
28-
await queryRunner.query(aggregateTracesDataMinutelyQuery, [maxTime])
2925
await queryRunner.query(aggregateTracesDataHourlyQuery, [maxTime])
3026
await queryRunner.manager
3127
.createQueryBuilder()

backend/src/services/jobs/queries.ts

Lines changed: 0 additions & 134 deletions
Original file line numberDiff line numberDiff line change
@@ -1,137 +1,3 @@
1-
const tracesBySecondStatus = `
2-
WITH traces_by_second_status AS (
3-
SELECT
4-
"apiEndpointUuid",
5-
DATE_TRUNC('second', traces."createdAt") as second,
6-
"responseStatus" as status,
7-
COUNT(*) as "numTraces"
8-
FROM api_trace traces
9-
WHERE
10-
"apiEndpointUuid" IS NOT NULL
11-
AND analyzed = TRUE
12-
AND "createdAt" <= $1
13-
GROUP BY 1, 2, 3
14-
)
15-
`
16-
const newTracesByMinuteStatus = `
17-
SELECT
18-
"apiEndpointUuid",
19-
DATE_TRUNC('minute', second) as minute,
20-
status,
21-
SUM("numTraces") as "numTraces"
22-
FROM traces_by_second_status
23-
GROUP BY 1, 2, 3
24-
`
25-
const savedTracesByMinuteStatus = `
26-
SELECT
27-
"apiEndpointUuid",
28-
minute,
29-
CAST(d.key AS INTEGER) as "status",
30-
SUM(CAST(d.value AS BIGINT)) as "numTraces"
31-
FROM "aggregate_trace_data_minutely" tmp
32-
JOIN jsonb_each_text(tmp."countByStatusCode") d ON TRUE
33-
WHERE "minute" <= $1
34-
GROUP BY 1, 2, 3
35-
`
36-
const tracesByMinuteStatus = `
37-
traces_by_minute_status_union AS (
38-
${newTracesByMinuteStatus}
39-
UNION ALL
40-
${savedTracesByMinuteStatus}
41-
),
42-
traces_by_minute_status AS (
43-
SELECT
44-
"apiEndpointUuid",
45-
minute,
46-
status,
47-
SUM("numTraces") as "numTraces"
48-
FROM traces_by_minute_status_union
49-
GROUP BY 1, 2, 3
50-
)
51-
`
52-
const newTracesByMinute = `
53-
SELECT
54-
"apiEndpointUuid",
55-
DATE_TRUNC('minute', second) as minute,
56-
MAX("numTraces") as "maxRPS",
57-
MIN("numTraces") as "minRPS",
58-
SUM("numTraces"::numeric)/60.0 as "meanRPS",
59-
SUM("numTraces") as "numTraces",
60-
COUNT(*) as num_secs_with_data
61-
FROM traces_by_second_status
62-
GROUP BY 1, 2
63-
`
64-
const savedTracesByMinute = `
65-
SELECT
66-
"apiEndpointUuid",
67-
"minute",
68-
"maxRPS",
69-
"minRPS",
70-
"meanRPS",
71-
"numCalls" as "numTraces",
72-
CASE WHEN "minRPS" > 0 THEN 60 ELSE 0 END as num_secs_with_data
73-
FROM aggregate_trace_data_minutely
74-
WHERE minute <= $1
75-
`
76-
const tracesByMinute = `
77-
traces_by_minute_union AS (
78-
${newTracesByMinute}
79-
UNION ALL
80-
${savedTracesByMinute}
81-
),
82-
traces_by_minute AS (
83-
SELECT
84-
"apiEndpointUuid",
85-
minute,
86-
MAX("maxRPS") as "maxRPS",
87-
MIN("minRPS") as "minRPS",
88-
SUM("numTraces"::numeric)/60.0 as "meanRPS",
89-
SUM("numTraces") as "numTraces",
90-
MAX("num_secs_with_data") as num_secs_with_data
91-
FROM traces_by_minute_union
92-
GROUP BY 1, 2
93-
)
94-
`
95-
const minuteCountByStatusCode = `
96-
minute_count_by_status_code AS (
97-
SELECT
98-
"apiEndpointUuid",
99-
minute,
100-
replace(
101-
array_to_string(array_agg(json_build_object(status, "numTraces")), ''),
102-
'}{',
103-
', '
104-
)::json AS "countByStatusCode"
105-
FROM traces_by_minute_status
106-
GROUP BY 1, 2
107-
)
108-
`
109-
export const aggregateTracesDataMinutelyQuery = `
110-
${tracesBySecondStatus},
111-
${tracesByMinuteStatus},
112-
${tracesByMinute},
113-
${minuteCountByStatusCode}
114-
INSERT INTO aggregate_trace_data_minutely ("apiEndpointUuid", "minute", "maxRPS", "minRPS", "meanRPS", "numCalls", "countByStatusCode")
115-
SELECT
116-
traces."apiEndpointUuid",
117-
traces.minute,
118-
traces."maxRPS",
119-
CASE WHEN traces.num_secs_with_data < 60 THEN 0 ELSE traces."minRPS" END as "minRPS",
120-
traces."meanRPS",
121-
traces."numTraces" as "numCalls",
122-
status_code_map."countByStatusCode"
123-
FROM traces_by_minute traces
124-
JOIN minute_count_by_status_code status_code_map ON
125-
traces.minute = status_code_map.minute AND traces."apiEndpointUuid" = status_code_map."apiEndpointUuid"
126-
ON CONFLICT ("apiEndpointUuid", "minute")
127-
DO UPDATE SET
128-
"maxRPS" = EXCLUDED."maxRPS",
129-
"minRPS" = EXCLUDED."minRPS",
130-
"meanRPS" = EXCLUDED."meanRPS",
131-
"numCalls" = EXCLUDED."numCalls",
132-
"countByStatusCode" = EXCLUDED."countByStatusCode"
133-
`
134-
1351
export const aggregateTracesDataHourlyQuery = `
1362
INSERT INTO aggregate_trace_data_hourly ("apiEndpointUuid", "hour", "numCalls")
1373
SELECT

backend/src/services/spec/index.ts

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import {
1515
DataField,
1616
OpenApiSpec,
1717
Alert,
18-
AggregateTraceDataMinutely,
1918
AggregateTraceDataHourly,
2019
} from "models"
2120
import { JSONValue, OpenApiSpec as OpenApiSpecResponse } from "@common/types"
@@ -39,15 +38,13 @@ import {
3938
getServersV3,
4039
} from "./utils"
4140
import { AlertService } from "services/alert"
42-
import { DatabaseService } from "services/database"
4341
import Error404NotFound from "errors/error-404-not-found"
4442
import { BlockFieldsService } from "services/block-fields"
4543
import Error500InternalServer from "errors/error-500-internal-server"
4644
import { RISK_SCORE_ORDER } from "~/constants"
4745
import {
4846
insertDataFieldQuery,
4947
insertAggregateHourlyQuery,
50-
insertAggregateMinutelyQuery,
5148
deleteOpenAPISpecDiffAlerts,
5249
} from "./queries"
5350

@@ -385,13 +382,6 @@ export class SpecService {
385382
.andWhere(`type IN(:...types)`, {
386383
types: [AlertType.NEW_ENDPOINT, AlertType.OPEN_API_SPEC_DIFF],
387384
})
388-
const deleteAggregateMinutelyQb = queryRunner.manager
389-
.createQueryBuilder()
390-
.delete()
391-
.from(AggregateTraceDataMinutely)
392-
.where(`"apiEndpointUuid" IN(:...ids)`, {
393-
ids: similarEndpointUuids,
394-
})
395385
const deleteAggregateHourlyQb = queryRunner.manager
396386
.createQueryBuilder()
397387
.delete()
@@ -408,15 +398,10 @@ export class SpecService {
408398
await deleteDataFieldsQb.execute()
409399
await updateAlertsQb.execute()
410400
await deleteAlertsQb.execute()
411-
await queryRunner.query(insertAggregateMinutelyQuery, [
412-
similarEndpointUuids,
413-
item.endpoint.uuid,
414-
])
415401
await queryRunner.query(insertAggregateHourlyQuery, [
416402
item.endpoint.uuid,
417403
similarEndpointUuids,
418404
])
419-
await deleteAggregateMinutelyQb.execute()
420405
await deleteAggregateHourlyQb.execute()
421406
await queryRunner.manager
422407
.createQueryBuilder()

backend/src/services/spec/queries.ts

Lines changed: 0 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -54,49 +54,3 @@ export const insertAggregateHourlyQuery = `
5454
WHERE "apiEndpointUuid" = ANY($2)
5555
GROUP BY hour
5656
`
57-
58-
export const insertAggregateMinutelyQuery = `
59-
WITH traces_by_minute AS (
60-
SELECT
61-
minute,
62-
SUM("numCalls") as "numCalls",
63-
SUM("maxRPS") as "maxRPS",
64-
SUM("minRPS") as "minRPS",
65-
SUM("meanRPS") as "meanRPS"
66-
FROM "aggregate_trace_data_minutely"
67-
WHERE "apiEndpointUuid" = ANY($1)
68-
GROUP BY minute
69-
),
70-
traces_by_minute_status AS (
71-
SELECT
72-
minute,
73-
CAST(d.key AS INTEGER) as "status",
74-
SUM(CAST(d.value AS BIGINT)) as "numTraces"
75-
FROM "aggregate_trace_data_minutely" tmp
76-
JOIN jsonb_each_text(tmp."countByStatusCode") d ON TRUE
77-
WHERE tmp."apiEndpointUuid" = ANY($1)
78-
GROUP BY 1, 2
79-
),
80-
minute_count_by_status_code AS (
81-
SELECT
82-
minute,
83-
replace(
84-
array_to_string(array_agg(json_build_object(status, "numTraces")), ''),
85-
'}{',
86-
', '
87-
)::json AS "countByStatusCode"
88-
FROM traces_by_minute_status
89-
GROUP BY 1
90-
)
91-
INSERT INTO aggregate_trace_data_minutely ("minute", "numCalls", "maxRPS", "minRPS", "meanRPS", "countByStatusCode", "apiEndpointUuid")
92-
SELECT
93-
traces.minute,
94-
traces."numCalls",
95-
traces."maxRPS",
96-
traces."minRPS",
97-
traces."meanRPS",
98-
status_code_map."countByStatusCode",
99-
$2 as "apiEndpointUuid"
100-
FROM traces_by_minute traces
101-
JOIN minute_count_by_status_code status_code_map ON traces.minute = status_code_map.minute
102-
`

0 commit comments

Comments
 (0)