@meyicloud/meyi-insight-server 1.0.8 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants/incidentCategories.d.ts +38 -9
- package/dist/constants/incidentCategories.d.ts.map +1 -1
- package/dist/constants/incidentCategories.js +70 -10
- package/dist/constants/incidentCategories.js.map +1 -1
- package/dist/controllers/incident.controller.d.ts.map +1 -1
- package/dist/controllers/incident.controller.js +10 -1
- package/dist/controllers/incident.controller.js.map +1 -1
- package/dist/database/schema.d.ts +114 -1
- package/dist/database/schema.d.ts.map +1 -1
- package/dist/database/schema.js +22 -3
- package/dist/database/schema.js.map +1 -1
- package/dist/features/sla/domain/sla.defaults.d.ts +9 -5
- package/dist/features/sla/domain/sla.defaults.d.ts.map +1 -1
- package/dist/features/sla/domain/sla.defaults.js +24 -9
- package/dist/features/sla/domain/sla.defaults.js.map +1 -1
- package/dist/features/sla/domain/sla.evaluator.d.ts +22 -2
- package/dist/features/sla/domain/sla.evaluator.d.ts.map +1 -1
- package/dist/features/sla/domain/sla.evaluator.js +24 -3
- package/dist/features/sla/domain/sla.evaluator.js.map +1 -1
- package/dist/features/sla/domain/sla.resolver.d.ts +41 -9
- package/dist/features/sla/domain/sla.resolver.d.ts.map +1 -1
- package/dist/features/sla/domain/sla.resolver.js +91 -23
- package/dist/features/sla/domain/sla.resolver.js.map +1 -1
- package/dist/features/sla/domain/sla.types.d.ts +32 -11
- package/dist/features/sla/domain/sla.types.d.ts.map +1 -1
- package/dist/features/sla/domain/sla.types.js +1 -0
- package/dist/features/sla/domain/sla.types.js.map +1 -1
- package/dist/features/sla/sla-policy.model.d.ts +10 -3
- package/dist/features/sla/sla-policy.model.d.ts.map +1 -1
- package/dist/features/sla/sla-policy.model.js +23 -9
- package/dist/features/sla/sla-policy.model.js.map +1 -1
- package/dist/features/sla/sla-policy.service.d.ts +12 -3
- package/dist/features/sla/sla-policy.service.d.ts.map +1 -1
- package/dist/features/sla/sla-policy.service.js +50 -13
- package/dist/features/sla/sla-policy.service.js.map +1 -1
- package/dist/features/sla/sla.schema.d.ts +70 -5
- package/dist/features/sla/sla.schema.d.ts.map +1 -1
- package/dist/features/sla/sla.schema.js +20 -3
- package/dist/features/sla/sla.schema.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/migrations/run.d.ts.map +1 -1
- package/dist/migrations/run.js +137 -7
- package/dist/migrations/run.js.map +1 -1
- package/dist/models/incident.model.d.ts +44 -2
- package/dist/models/incident.model.d.ts.map +1 -1
- package/dist/models/incident.model.js +121 -21
- package/dist/models/incident.model.js.map +1 -1
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -1
- package/dist/server.js.map +1 -1
- package/dist/service.d.ts +26 -2
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +13 -1
- package/dist/service.js.map +1 -1
- package/dist/services/incident.service.d.ts +42 -2
- package/dist/services/incident.service.d.ts.map +1 -1
- package/dist/services/incident.service.js +95 -13
- package/dist/services/incident.service.js.map +1 -1
- package/dist/services/retention.service.d.ts +63 -0
- package/dist/services/retention.service.d.ts.map +1 -0
- package/dist/services/retention.service.js +264 -0
- package/dist/services/retention.service.js.map +1 -0
- package/package.json +2 -1
package/dist/migrations/run.js
CHANGED
|
@@ -1230,23 +1230,84 @@ export async function runMigrations(db) {
|
|
|
1230
1230
|
"id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
1231
1231
|
"tenant_id" TEXT NOT NULL,
|
|
1232
1232
|
"account_id" TEXT NOT NULL,
|
|
1233
|
+
"incident_group" TEXT NOT NULL DEFAULT 'default',
|
|
1233
1234
|
"priority" TEXT NOT NULL,
|
|
1234
1235
|
"ack_minutes" INTEGER NOT NULL,
|
|
1235
|
-
"resolve_minutes" INTEGER
|
|
1236
|
+
"resolve_minutes" INTEGER,
|
|
1236
1237
|
"created_at" TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
1237
1238
|
"updated_at" TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
1238
1239
|
CONSTRAINT insight_connector_sla_targets_priority_chk CHECK (priority IN ('P1','P2','P3','P4')),
|
|
1240
|
+
CONSTRAINT insight_connector_sla_targets_group_chk
|
|
1241
|
+
CHECK (incident_group IN ('default','operations','security','cost')),
|
|
1239
1242
|
CONSTRAINT insight_connector_sla_targets_limits_chk
|
|
1240
|
-
CHECK (ack_minutes
|
|
1243
|
+
CHECK (ack_minutes BETWEEN 1 AND 43200 AND (resolve_minutes IS NULL OR (resolve_minutes >= ack_minutes AND resolve_minutes <= 43200)))
|
|
1241
1244
|
)
|
|
1242
|
-
`));
|
|
1243
|
-
await db.execute(sql.raw(`
|
|
1244
|
-
CREATE UNIQUE INDEX IF NOT EXISTS insight_connector_sla_targets_tenant_account_priority_unique
|
|
1245
|
-
ON "meyiconnect"."insight_connector_sla_targets" ("tenant_id", "account_id", "priority")
|
|
1246
1245
|
`));
|
|
1247
1246
|
await db.execute(sql.raw(`
|
|
1248
1247
|
CREATE INDEX IF NOT EXISTS insight_connector_sla_targets_tenant_idx
|
|
1249
1248
|
ON "meyiconnect"."insight_connector_sla_targets" ("tenant_id")
|
|
1249
|
+
`));
|
|
1250
|
+
// SLA per incident group (insight-server 1.1.0). Upgrades a 1.0.8 table in place:
|
|
1251
|
+
// existing rows become the account default ('default' group), so evaluation is unchanged.
|
|
1252
|
+
await db.execute(sql.raw(`
|
|
1253
|
+
ALTER TABLE "meyiconnect"."insight_connector_sla_policies"
|
|
1254
|
+
ADD COLUMN IF NOT EXISTS "applies_to" TEXT[] NOT NULL DEFAULT '{operations,security,cost}'::text[]
|
|
1255
|
+
`));
|
|
1256
|
+
await db.execute(sql.raw(`
|
|
1257
|
+
DO $$ BEGIN
|
|
1258
|
+
IF NOT EXISTS (
|
|
1259
|
+
SELECT 1 FROM pg_constraint
|
|
1260
|
+
WHERE conname = 'insight_connector_sla_policies_applies_to_chk'
|
|
1261
|
+
AND conrelid = '"meyiconnect"."insight_connector_sla_policies"'::regclass
|
|
1262
|
+
) THEN
|
|
1263
|
+
ALTER TABLE "meyiconnect"."insight_connector_sla_policies" ADD CONSTRAINT insight_connector_sla_policies_applies_to_chk
|
|
1264
|
+
CHECK ("applies_to" <@ ARRAY['operations','security','cost']::text[]);
|
|
1265
|
+
END IF;
|
|
1266
|
+
END $$
|
|
1267
|
+
`));
|
|
1268
|
+
await db.execute(sql.raw(`
|
|
1269
|
+
ALTER TABLE "meyiconnect"."insight_connector_sla_targets"
|
|
1270
|
+
ADD COLUMN IF NOT EXISTS "incident_group" TEXT NOT NULL DEFAULT 'default'
|
|
1271
|
+
`));
|
|
1272
|
+
await db.execute(sql.raw(`ALTER TABLE "meyiconnect"."insight_connector_sla_targets" ALTER COLUMN "resolve_minutes" DROP NOT NULL`));
|
|
1273
|
+
await db.execute(sql.raw(`
|
|
1274
|
+
DO $$ BEGIN
|
|
1275
|
+
IF NOT EXISTS (
|
|
1276
|
+
SELECT 1 FROM pg_constraint
|
|
1277
|
+
WHERE conname = 'insight_connector_sla_targets_group_chk'
|
|
1278
|
+
AND conrelid = '"meyiconnect"."insight_connector_sla_targets"'::regclass
|
|
1279
|
+
) THEN
|
|
1280
|
+
ALTER TABLE "meyiconnect"."insight_connector_sla_targets" ADD CONSTRAINT insight_connector_sla_targets_group_chk
|
|
1281
|
+
CHECK ("incident_group" IN ('default','operations','security','cost'));
|
|
1282
|
+
END IF;
|
|
1283
|
+
-- Replace the 1.0.8 limits CHECK (resolve NOT NULL) with one that allows best effort (NULL resolve).
|
|
1284
|
+
IF EXISTS (
|
|
1285
|
+
SELECT 1 FROM pg_constraint
|
|
1286
|
+
WHERE conname = 'insight_connector_sla_targets_limits_chk'
|
|
1287
|
+
AND conrelid = '"meyiconnect"."insight_connector_sla_targets"'::regclass
|
|
1288
|
+
AND pg_get_constraintdef(oid) NOT ILIKE '%resolve_minutes IS NULL%'
|
|
1289
|
+
) THEN
|
|
1290
|
+
ALTER TABLE "meyiconnect"."insight_connector_sla_targets" DROP CONSTRAINT insight_connector_sla_targets_limits_chk;
|
|
1291
|
+
END IF;
|
|
1292
|
+
IF NOT EXISTS (
|
|
1293
|
+
SELECT 1 FROM pg_constraint
|
|
1294
|
+
WHERE conname = 'insight_connector_sla_targets_limits_chk'
|
|
1295
|
+
AND conrelid = '"meyiconnect"."insight_connector_sla_targets"'::regclass
|
|
1296
|
+
) THEN
|
|
1297
|
+
ALTER TABLE "meyiconnect"."insight_connector_sla_targets" ADD CONSTRAINT insight_connector_sla_targets_limits_chk
|
|
1298
|
+
CHECK (ack_minutes BETWEEN 1 AND 43200 AND (resolve_minutes IS NULL OR (resolve_minutes >= ack_minutes AND resolve_minutes <= 43200)));
|
|
1299
|
+
END IF;
|
|
1300
|
+
END $$
|
|
1301
|
+
`));
|
|
1302
|
+
// The 1.0.8 unique key (tenant, account, priority) would reject group overrides; replace it.
|
|
1303
|
+
await db.execute(sql.raw(`
|
|
1304
|
+
ALTER TABLE "meyiconnect"."insight_connector_sla_targets"
|
|
1305
|
+
DROP CONSTRAINT IF EXISTS insight_connector_sla_targets_tenant_account_priority_unique
|
|
1306
|
+
`));
|
|
1307
|
+
await db.execute(sql.raw(`DROP INDEX IF EXISTS "meyiconnect"."insight_connector_sla_targets_tenant_account_priority_unique"`));
|
|
1308
|
+
await db.execute(sql.raw(`
|
|
1309
|
+
CREATE UNIQUE INDEX IF NOT EXISTS insight_connector_sla_targets_tenant_account_group_priority_unique
|
|
1310
|
+
ON "meyiconnect"."insight_connector_sla_targets" ("tenant_id", "account_id", "incident_group", "priority")
|
|
1250
1311
|
`));
|
|
1251
1312
|
// Upgrade from the single-limit policy: copy each account's limits to all four priorities (so behaviour is
|
|
1252
1313
|
// unchanged), then relax the old columns. They stay in place, unread, until a later release drops them.
|
|
@@ -1261,7 +1322,10 @@ export async function runMigrations(db) {
|
|
|
1261
1322
|
FROM "meyiconnect"."insight_connector_sla_policies" p
|
|
1262
1323
|
CROSS JOIN (VALUES ('P1'), ('P2'), ('P3'), ('P4')) AS v("priority")
|
|
1263
1324
|
WHERE p."ack_minutes" IS NOT NULL AND p."resolve_minutes" IS NOT NULL
|
|
1264
|
-
|
|
1325
|
+
AND NOT EXISTS (
|
|
1326
|
+
SELECT 1 FROM "meyiconnect"."insight_connector_sla_targets" t
|
|
1327
|
+
WHERE t."tenant_id" = p."tenant_id" AND t."account_id" = p."account_id" AND t."priority" = v."priority"
|
|
1328
|
+
);
|
|
1265
1329
|
|
|
1266
1330
|
ALTER TABLE "meyiconnect"."insight_connector_sla_policies" ALTER COLUMN "ack_minutes" DROP NOT NULL;
|
|
1267
1331
|
ALTER TABLE "meyiconnect"."insight_connector_sla_policies" ALTER COLUMN "resolve_minutes" DROP NOT NULL;
|
|
@@ -1370,5 +1434,71 @@ export async function runMigrations(db) {
|
|
|
1370
1434
|
CREATE INDEX IF NOT EXISTS insight_incidents_tenant_priority_idx
|
|
1371
1435
|
ON "meyiconnect"."insight_incidents" ("tenant_id", "priority")
|
|
1372
1436
|
`));
|
|
1437
|
+
// ─── insight_incidents: structured cost data (1.1.0) ──────────────────────
|
|
1438
|
+
// external_ref: stable producer key; savings_monthly: sort key (USD/month); savings_detail: display range.
|
|
1439
|
+
await db.execute(sql.raw(`ALTER TABLE "meyiconnect"."insight_incidents" ADD COLUMN IF NOT EXISTS "external_ref" TEXT`));
|
|
1440
|
+
await db.execute(sql.raw(`ALTER TABLE "meyiconnect"."insight_incidents" ADD COLUMN IF NOT EXISTS "savings_monthly" NUMERIC(14,2)`));
|
|
1441
|
+
await db.execute(sql.raw(`ALTER TABLE "meyiconnect"."insight_incidents" ADD COLUMN IF NOT EXISTS "savings_detail" JSONB`));
|
|
1442
|
+
// One OPEN incident per (tenant, source, external_ref). A resolved/closed one leaves room for a new incident.
|
|
1443
|
+
await createIndexConcurrently(db, "insight_incidents_tenant_source_ref_uq", `
|
|
1444
|
+
CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS insight_incidents_tenant_source_ref_uq
|
|
1445
|
+
ON "meyiconnect"."insight_incidents" ("tenant_id", "source", "external_ref")
|
|
1446
|
+
WHERE "external_ref" IS NOT NULL AND "status" NOT IN ('resolved','closed')
|
|
1447
|
+
`);
|
|
1448
|
+
// Cost list order: priority, savings, newest.
|
|
1449
|
+
await createIndexConcurrently(db, "insight_incidents_cost_sort_idx", `
|
|
1450
|
+
CREATE INDEX CONCURRENTLY IF NOT EXISTS insight_incidents_cost_sort_idx
|
|
1451
|
+
ON "meyiconnect"."insight_incidents" ("tenant_id", "priority", "savings_monthly" DESC NULLS LAST, "created_at" DESC)
|
|
1452
|
+
`);
|
|
1453
|
+
// ─── Retention indexes (1.1.0) ────────────────────────────────────────────
|
|
1454
|
+
// Support the tenant-scoped, time-bounded batched purge. Built CONCURRENTLY so large tables stay writable.
|
|
1455
|
+
await createIndexConcurrently(db, "insight_alerts_tenant_created_idx", `
|
|
1456
|
+
CREATE INDEX CONCURRENTLY IF NOT EXISTS insight_alerts_tenant_created_idx
|
|
1457
|
+
ON "meyiconnect"."insight_alerts" ("tenant_id", "created_at")
|
|
1458
|
+
`);
|
|
1459
|
+
await createIndexConcurrently(db, "insight_incidents_tenant_status_resolved_idx", `
|
|
1460
|
+
CREATE INDEX CONCURRENTLY IF NOT EXISTS insight_incidents_tenant_status_resolved_idx
|
|
1461
|
+
ON "meyiconnect"."insight_incidents" ("tenant_id", "status", "resolved_at")
|
|
1462
|
+
`);
|
|
1463
|
+
await createIndexConcurrently(db, "insight_workflow_executions_tenant_triggered_idx", `
|
|
1464
|
+
CREATE INDEX CONCURRENTLY IF NOT EXISTS insight_workflow_executions_tenant_triggered_idx
|
|
1465
|
+
ON "meyiconnect"."insight_workflow_executions" ("tenant_id", "triggered_at")
|
|
1466
|
+
`);
|
|
1467
|
+
}
|
|
1468
|
+
function rowsOf(res) {
|
|
1469
|
+
return res?.rows ?? (Array.isArray(res) ? res : []);
|
|
1470
|
+
}
|
|
1471
|
+
/**
|
|
1472
|
+
* Creates an index with CREATE INDEX CONCURRENTLY (no write lock on large tables), idempotently.
|
|
1473
|
+
* A previous interrupted CONCURRENTLY build leaves an INVALID index that IF NOT EXISTS would skip
|
|
1474
|
+
* forever, so an invalid index is dropped and rebuilt. If the host runs migrations inside a
|
|
1475
|
+
* transaction (where CONCURRENTLY is not allowed), it falls back to a plain CREATE INDEX.
|
|
1476
|
+
*/
|
|
1477
|
+
async function createIndexConcurrently(db, name, concurrentDdl) {
|
|
1478
|
+
const lookup = await db.execute(sql `
|
|
1479
|
+
SELECT i.indisvalid AS valid
|
|
1480
|
+
FROM pg_class c
|
|
1481
|
+
JOIN pg_index i ON i.indexrelid = c.oid
|
|
1482
|
+
JOIN pg_namespace n ON n.oid = c.relnamespace
|
|
1483
|
+
WHERE n.nspname = 'meyiconnect' AND c.relname = ${name}
|
|
1484
|
+
`);
|
|
1485
|
+
const existing = rowsOf(lookup)[0];
|
|
1486
|
+
if (existing && (existing.valid === true || existing.valid === "t"))
|
|
1487
|
+
return;
|
|
1488
|
+
try {
|
|
1489
|
+
if (existing) {
|
|
1490
|
+
await db.execute(sql.raw(`DROP INDEX CONCURRENTLY IF EXISTS "meyiconnect"."${name}"`));
|
|
1491
|
+
}
|
|
1492
|
+
await db.execute(sql.raw(concurrentDdl));
|
|
1493
|
+
}
|
|
1494
|
+
catch (err) {
|
|
1495
|
+
const code = err?.code ?? err?.cause?.code;
|
|
1496
|
+
// 25001 = active_sql_transaction: CONCURRENTLY cannot run inside a transaction block.
|
|
1497
|
+
if (code !== "25001")
|
|
1498
|
+
throw err;
|
|
1499
|
+
if (existing)
|
|
1500
|
+
await db.execute(sql.raw(`DROP INDEX IF EXISTS "meyiconnect"."${name}"`));
|
|
1501
|
+
await db.execute(sql.raw(concurrentDdl.replace(/\bCONCURRENTLY\s+/i, "")));
|
|
1502
|
+
}
|
|
1373
1503
|
}
|
|
1374
1504
|
//# sourceMappingURL=run.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/migrations/run.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/migrations/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
import type { ConnectorEnvironment } from "../features/connector-environment/environment.types.js";
|
|
2
2
|
import { type IncidentPriority } from "../features/incident-priority/priority.types.js";
|
|
3
|
+
import type { IncidentSort } from "../constants/incidentCategories.js";
|
|
4
|
+
/** Structured savings range shown next to a cost incident. */
|
|
5
|
+
export interface IncidentSavingsDetail {
|
|
6
|
+
min?: number | null;
|
|
7
|
+
max?: number | null;
|
|
8
|
+
basis?: string | null;
|
|
9
|
+
method?: string | null;
|
|
10
|
+
currency?: string;
|
|
11
|
+
}
|
|
12
|
+
/** Value for the numeric `savings_monthly` column: a 2-dp string, or null. */
|
|
13
|
+
export declare function toSavingsColumn(value: unknown): string | null;
|
|
14
|
+
/** Normalises a savings detail object to its known keys; anything else is dropped. */
|
|
15
|
+
export declare function toSavingsDetail(value: unknown): IncidentSavingsDetail | null;
|
|
16
|
+
/** Postgres unique_violation, possibly wrapped by drizzle (DrizzleQueryError.cause). */
|
|
17
|
+
export declare function isUniqueViolation(err: any, constraint?: string): boolean;
|
|
18
|
+
export declare const EXTERNAL_REF_UNIQUE_INDEX = "insight_incidents_tenant_source_ref_uq";
|
|
3
19
|
export declare class IncidentModel {
|
|
4
20
|
private db;
|
|
5
21
|
private tbl;
|
|
@@ -7,6 +23,11 @@ export declare class IncidentModel {
|
|
|
7
23
|
findById(id: string, tenantId?: string): Promise<any>;
|
|
8
24
|
searchUsers(search: string, limit: number, tenantId?: string): Promise<any>;
|
|
9
25
|
findByIds(ids: string[], tenantId?: string): Promise<any>;
|
|
26
|
+
/** "source not in (...)" — a NULL source counts as operations, so it is never excluded. */
|
|
27
|
+
private excludeSourcesCondition;
|
|
28
|
+
private includeSourcesCondition;
|
|
29
|
+
/** ORDER BY for an allowlisted sort key. The id tiebreak keeps pagination stable. */
|
|
30
|
+
private orderFor;
|
|
10
31
|
list(params: {
|
|
11
32
|
page: number;
|
|
12
33
|
limit: number;
|
|
@@ -15,10 +36,13 @@ export declare class IncidentModel {
|
|
|
15
36
|
assigneeIds?: string[];
|
|
16
37
|
statuses?: string[];
|
|
17
38
|
sourceTypes?: string[];
|
|
39
|
+
/** Sources to exclude (operations = not security and not cost). */
|
|
40
|
+
excludeSourceTypes?: string[];
|
|
18
41
|
accountNames?: string[];
|
|
19
42
|
environment?: ConnectorEnvironment;
|
|
20
43
|
priorities?: IncidentPriority[];
|
|
21
44
|
tenantId?: string;
|
|
45
|
+
sort?: IncidentSort;
|
|
22
46
|
}): Promise<{
|
|
23
47
|
incidents: any;
|
|
24
48
|
total: number;
|
|
@@ -30,14 +54,14 @@ export declare class IncidentModel {
|
|
|
30
54
|
* Returns only the columns needed for stat computation, optionally scoped
|
|
31
55
|
* to a tenant and/or a createdAt lower bound.
|
|
32
56
|
*/
|
|
33
|
-
findForAggregation(tenantId?: string, sinceIso?: string, sourceTypes?: string[], accountNames?: string[]): Promise<any>;
|
|
57
|
+
findForAggregation(tenantId?: string, sinceIso?: string, sourceTypes?: string[], accountNames?: string[], excludeSourceTypes?: string[]): Promise<any>;
|
|
34
58
|
create(input: {
|
|
35
59
|
name: string;
|
|
36
60
|
source: string;
|
|
37
61
|
resourceName: string;
|
|
38
62
|
resourceType: string;
|
|
39
63
|
downMessage?: string | null;
|
|
40
|
-
tags?: Record<string,
|
|
64
|
+
tags?: Record<string, unknown>;
|
|
41
65
|
downTime?: string;
|
|
42
66
|
alertId?: string | null;
|
|
43
67
|
assigneeIds?: string[];
|
|
@@ -46,7 +70,25 @@ export declare class IncidentModel {
|
|
|
46
70
|
accountId?: string | null;
|
|
47
71
|
accountName?: string | null;
|
|
48
72
|
priority?: IncidentPriority;
|
|
73
|
+
externalRef?: string | null;
|
|
74
|
+
savingsMonthly?: number | null;
|
|
75
|
+
savingsDetail?: IncidentSavingsDetail | null;
|
|
49
76
|
}): Promise<any>;
|
|
77
|
+
/** The open (not resolved/closed) incident with this producer key, if any. Always tenant-scoped. */
|
|
78
|
+
findOpenByExternalRef(tenantId: string, source: string, externalRef: string): Promise<any>;
|
|
79
|
+
/**
|
|
80
|
+
* Refreshes an open incident from its producer. Only updates while the incident is still open, so a
|
|
81
|
+
* concurrent resolve wins; returns false when nothing was updated. Tags are merged, not replaced.
|
|
82
|
+
*/
|
|
83
|
+
refreshOpenByExternalRef(id: string, tenantId: string, data: {
|
|
84
|
+
name?: string;
|
|
85
|
+
description?: string | null;
|
|
86
|
+
priority?: IncidentPriority;
|
|
87
|
+
savingsMonthly?: number | null;
|
|
88
|
+
savingsDetail?: IncidentSavingsDetail | null;
|
|
89
|
+
accountName?: string | null;
|
|
90
|
+
tags?: Record<string, unknown>;
|
|
91
|
+
}): Promise<boolean>;
|
|
50
92
|
update(id: string, data: Record<string, any>, tenantId?: string): Promise<void>;
|
|
51
93
|
delete(id: string, tenantId?: string): Promise<void>;
|
|
52
94
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"incident.model.d.ts","sourceRoot":"","sources":["../../src/models/incident.model.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wDAAwD,CAAC;AACnG,OAAO,EAA6B,KAAK,gBAAgB,EAAE,MAAM,iDAAiD,CAAC;
|
|
1
|
+
{"version":3,"file":"incident.model.d.ts","sourceRoot":"","sources":["../../src/models/incident.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,45 @@
|
|
|
1
|
-
import { eq, desc, count, and, inArray, sql, isNull, or } from "drizzle-orm";
|
|
1
|
+
import { eq, asc, desc, count, and, inArray, sql, isNull, or } from "drizzle-orm";
|
|
2
2
|
import { connectorEnvironmentCondition } from "../features/connector-environment/environment.scope.js";
|
|
3
3
|
import { DEFAULT_INCIDENT_PRIORITY } from "../features/incident-priority/priority.types.js";
|
|
4
|
+
/** numeric(14,2) bounds; out-of-range or non-finite values are stored as NULL rather than failing the write. */
|
|
5
|
+
const MAX_SAVINGS = 999_999_999_999.99;
|
|
6
|
+
/** Value for the numeric `savings_monthly` column: a 2-dp string, or null. */
|
|
7
|
+
export function toSavingsColumn(value) {
|
|
8
|
+
if (value === null || value === undefined || value === "")
|
|
9
|
+
return null;
|
|
10
|
+
const n = typeof value === "number" ? value : Number(value);
|
|
11
|
+
if (!Number.isFinite(n) || n < 0 || n > MAX_SAVINGS)
|
|
12
|
+
return null;
|
|
13
|
+
return n.toFixed(2);
|
|
14
|
+
}
|
|
15
|
+
/** Normalises a savings detail object to its known keys; anything else is dropped. */
|
|
16
|
+
export function toSavingsDetail(value) {
|
|
17
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
18
|
+
return null;
|
|
19
|
+
const v = value;
|
|
20
|
+
const num = (x) => {
|
|
21
|
+
if (x === null || x === undefined || x === "")
|
|
22
|
+
return null;
|
|
23
|
+
const n = Number(x);
|
|
24
|
+
return Number.isFinite(n) ? n : null;
|
|
25
|
+
};
|
|
26
|
+
const str = (x) => (typeof x === "string" && x.trim() ? x.trim().slice(0, 500) : null);
|
|
27
|
+
return {
|
|
28
|
+
min: num(v.min),
|
|
29
|
+
max: num(v.max),
|
|
30
|
+
basis: str(v.basis),
|
|
31
|
+
method: str(v.method),
|
|
32
|
+
currency: typeof v.currency === "string" && v.currency.trim() ? v.currency.trim().toUpperCase().slice(0, 8) : "USD",
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/** Postgres unique_violation, possibly wrapped by drizzle (DrizzleQueryError.cause). */
|
|
36
|
+
export function isUniqueViolation(err, constraint) {
|
|
37
|
+
const e = err?.code ? err : err?.cause;
|
|
38
|
+
if (!e || e.code !== "23505")
|
|
39
|
+
return false;
|
|
40
|
+
return !constraint || !e.constraint || e.constraint === constraint;
|
|
41
|
+
}
|
|
42
|
+
export const EXTERNAL_REF_UNIQUE_INDEX = "insight_incidents_tenant_source_ref_uq";
|
|
4
43
|
export class IncidentModel {
|
|
5
44
|
db;
|
|
6
45
|
tbl;
|
|
@@ -46,6 +85,33 @@ export class IncidentModel {
|
|
|
46
85
|
.from(this.tbl)
|
|
47
86
|
.where(conditions.length > 1 ? and(...conditions) : conditions[0]);
|
|
48
87
|
}
|
|
88
|
+
/** "source not in (...)" — a NULL source counts as operations, so it is never excluded. */
|
|
89
|
+
excludeSourcesCondition(excludeSourceTypes) {
|
|
90
|
+
if (!excludeSourceTypes?.length)
|
|
91
|
+
return undefined;
|
|
92
|
+
const lower = excludeSourceTypes.map((s) => s.toLowerCase());
|
|
93
|
+
return or(isNull(this.tbl.source), sql `LOWER(${this.tbl.source}) NOT IN (${sql.join(lower.map((s) => sql `${s}`), sql `, `)})`);
|
|
94
|
+
}
|
|
95
|
+
includeSourcesCondition(sourceTypes) {
|
|
96
|
+
if (sourceTypes === undefined)
|
|
97
|
+
return undefined;
|
|
98
|
+
if (sourceTypes.length === 0)
|
|
99
|
+
return sql `1 = 0`;
|
|
100
|
+
const lowerSources = sourceTypes.map((s) => s.toLowerCase());
|
|
101
|
+
return inArray(sql `LOWER(${this.tbl.source})`, lowerSources);
|
|
102
|
+
}
|
|
103
|
+
/** ORDER BY for an allowlisted sort key. The id tiebreak keeps pagination stable. */
|
|
104
|
+
orderFor(sort) {
|
|
105
|
+
if (sort === "priority_savings") {
|
|
106
|
+
return [
|
|
107
|
+
asc(this.tbl.priority),
|
|
108
|
+
sql `${this.tbl.savingsMonthly} DESC NULLS LAST`,
|
|
109
|
+
desc(this.tbl.createdAt),
|
|
110
|
+
desc(this.tbl.id),
|
|
111
|
+
];
|
|
112
|
+
}
|
|
113
|
+
return [desc(this.tbl.createdAt), desc(this.tbl.id)];
|
|
114
|
+
}
|
|
49
115
|
async list(params) {
|
|
50
116
|
const { page, limit } = params;
|
|
51
117
|
const offset = (page - 1) * limit;
|
|
@@ -54,15 +120,12 @@ export class IncidentModel {
|
|
|
54
120
|
conditions.push(eq(this.tbl.name, params.name));
|
|
55
121
|
if (params.tenantId)
|
|
56
122
|
conditions.push(eq(this.tbl.tenantId, params.tenantId));
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
conditions.push(inArray(sql `LOWER(${this.tbl.source})`, lowerSources));
|
|
64
|
-
}
|
|
65
|
-
}
|
|
123
|
+
const include = this.includeSourcesCondition(params.sourceTypes);
|
|
124
|
+
if (include)
|
|
125
|
+
conditions.push(include);
|
|
126
|
+
const exclude = this.excludeSourcesCondition(params.excludeSourceTypes);
|
|
127
|
+
if (exclude)
|
|
128
|
+
conditions.push(exclude);
|
|
66
129
|
if (params.accountNames?.length) {
|
|
67
130
|
const accountConditions = params.accountNames.map((acc) => {
|
|
68
131
|
if (acc === "unassigned" || acc === "none" || acc === "no_account") {
|
|
@@ -108,7 +171,7 @@ export class IncidentModel {
|
|
|
108
171
|
let q = this.db
|
|
109
172
|
.select()
|
|
110
173
|
.from(this.tbl)
|
|
111
|
-
.orderBy(
|
|
174
|
+
.orderBy(...this.orderFor(params.sort))
|
|
112
175
|
.limit(limit)
|
|
113
176
|
.offset(offset);
|
|
114
177
|
if (whereClause)
|
|
@@ -125,21 +188,18 @@ export class IncidentModel {
|
|
|
125
188
|
* Returns only the columns needed for stat computation, optionally scoped
|
|
126
189
|
* to a tenant and/or a createdAt lower bound.
|
|
127
190
|
*/
|
|
128
|
-
async findForAggregation(tenantId, sinceIso, sourceTypes, accountNames) {
|
|
191
|
+
async findForAggregation(tenantId, sinceIso, sourceTypes, accountNames, excludeSourceTypes) {
|
|
129
192
|
const conditions = [];
|
|
130
193
|
if (tenantId)
|
|
131
194
|
conditions.push(eq(this.tbl.tenantId, tenantId));
|
|
132
195
|
if (sinceIso)
|
|
133
196
|
conditions.push(sql `${this.tbl.createdAt} >= ${sinceIso}`);
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
conditions.push(inArray(sql `LOWER(${this.tbl.source})`, lowerSources));
|
|
141
|
-
}
|
|
142
|
-
}
|
|
197
|
+
const include = this.includeSourcesCondition(sourceTypes);
|
|
198
|
+
if (include)
|
|
199
|
+
conditions.push(include);
|
|
200
|
+
const exclude = this.excludeSourcesCondition(excludeSourceTypes);
|
|
201
|
+
if (exclude)
|
|
202
|
+
conditions.push(exclude);
|
|
143
203
|
if (accountNames?.length) {
|
|
144
204
|
const accountConditions = accountNames.map((acc) => {
|
|
145
205
|
if (acc === "unassigned" || acc === "none" || acc === "no_account") {
|
|
@@ -225,6 +285,9 @@ export class IncidentModel {
|
|
|
225
285
|
accountId: resolvedAccountId,
|
|
226
286
|
accountName: resolvedAccountName,
|
|
227
287
|
priority: input.priority ?? DEFAULT_INCIDENT_PRIORITY,
|
|
288
|
+
externalRef: input.externalRef ? String(input.externalRef) : null,
|
|
289
|
+
savingsMonthly: toSavingsColumn(input.savingsMonthly),
|
|
290
|
+
savingsDetail: toSavingsDetail(input.savingsDetail),
|
|
228
291
|
assigneeIds: input.assigneeIds ?? [],
|
|
229
292
|
status: "open",
|
|
230
293
|
analysisStatus: "pending",
|
|
@@ -232,6 +295,43 @@ export class IncidentModel {
|
|
|
232
295
|
.returning({ id: this.tbl.id });
|
|
233
296
|
return row;
|
|
234
297
|
}
|
|
298
|
+
/** The open (not resolved/closed) incident with this producer key, if any. Always tenant-scoped. */
|
|
299
|
+
async findOpenByExternalRef(tenantId, source, externalRef) {
|
|
300
|
+
const [row] = await this.db
|
|
301
|
+
.select()
|
|
302
|
+
.from(this.tbl)
|
|
303
|
+
.where(and(eq(this.tbl.tenantId, tenantId), eq(this.tbl.source, source), eq(this.tbl.externalRef, externalRef), sql `${this.tbl.status} NOT IN ('resolved','closed')`))
|
|
304
|
+
.limit(1);
|
|
305
|
+
return row ?? null;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Refreshes an open incident from its producer. Only updates while the incident is still open, so a
|
|
309
|
+
* concurrent resolve wins; returns false when nothing was updated. Tags are merged, not replaced.
|
|
310
|
+
*/
|
|
311
|
+
async refreshOpenByExternalRef(id, tenantId, data) {
|
|
312
|
+
const set = { updatedAt: new Date() };
|
|
313
|
+
if (data.name !== undefined)
|
|
314
|
+
set.name = data.name;
|
|
315
|
+
if (data.description !== undefined)
|
|
316
|
+
set.description = data.description;
|
|
317
|
+
if (data.priority !== undefined)
|
|
318
|
+
set.priority = data.priority;
|
|
319
|
+
if (data.savingsMonthly !== undefined)
|
|
320
|
+
set.savingsMonthly = toSavingsColumn(data.savingsMonthly);
|
|
321
|
+
if (data.savingsDetail !== undefined)
|
|
322
|
+
set.savingsDetail = toSavingsDetail(data.savingsDetail);
|
|
323
|
+
if (data.accountName !== undefined && data.accountName !== null)
|
|
324
|
+
set.accountName = data.accountName;
|
|
325
|
+
if (data.tags && Object.keys(data.tags).length > 0) {
|
|
326
|
+
set.tags = sql `COALESCE(${this.tbl.tags}, '{}'::jsonb) || ${JSON.stringify(data.tags)}::jsonb`;
|
|
327
|
+
}
|
|
328
|
+
const rows = await this.db
|
|
329
|
+
.update(this.tbl)
|
|
330
|
+
.set(set)
|
|
331
|
+
.where(and(eq(this.tbl.id, id), eq(this.tbl.tenantId, tenantId), sql `${this.tbl.status} NOT IN ('resolved','closed')`))
|
|
332
|
+
.returning({ id: this.tbl.id });
|
|
333
|
+
return rows.length > 0;
|
|
334
|
+
}
|
|
235
335
|
async update(id, data, tenantId) {
|
|
236
336
|
const updateData = { ...data, updatedAt: new Date() };
|
|
237
337
|
const conditions = [eq(this.tbl.id, id)];
|