@oneuptime/common 9.3.7 → 9.3.9
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/Models/DatabaseModels/AIAgentTask.ts +18 -3
- package/Models/DatabaseModels/Index.ts +12 -17
- package/Models/DatabaseModels/MetricType.ts +7 -7
- package/Models/DatabaseModels/{ServiceCatalog.ts → Service.ts} +74 -48
- package/Models/DatabaseModels/{ServiceCatalogCodeRepository.ts → ServiceCodeRepository.ts} +54 -56
- package/Models/DatabaseModels/{ServiceCatalogDependency.ts → ServiceDependency.ts} +49 -53
- package/Models/DatabaseModels/{ServiceCatalogMonitor.ts → ServiceMonitor.ts} +41 -43
- package/Models/DatabaseModels/{ServiceCatalogOwnerTeam.ts → ServiceOwnerTeam.ts} +41 -43
- package/Models/DatabaseModels/{ServiceCatalogOwnerUser.ts → ServiceOwnerUser.ts} +41 -43
- package/Models/DatabaseModels/TelemetryException.ts +11 -13
- package/Models/DatabaseModels/TelemetryUsageBilling.ts +11 -13
- package/Server/API/AIAgentDataAPI.ts +73 -111
- package/Server/Infrastructure/Postgres/SchemaMigrations/1767966850199-RenameServiceCatalogToService.ts +171 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1767979055522-MigrationName.ts +743 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1767979448478-MigrationName.ts +224 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
- package/Server/Services/Index.ts +12 -17
- package/Server/Services/OpenTelemetryIngestService.ts +26 -28
- package/Server/Services/{ServiceCatalogCodeRepositoryService.ts → ServiceCodeRepositoryService.ts} +7 -7
- package/Server/Services/ServiceDependencyService.ts +48 -0
- package/Server/Services/{ServiceCatalogMonitorService.ts → ServiceMonitorService.ts} +8 -8
- package/Server/Services/{ServiceCatalogOwnerTeamService.ts → ServiceOwnerTeamService.ts} +1 -1
- package/Server/Services/{ServiceCatalogOwnerUserService.ts → ServiceOwnerUserService.ts} +1 -1
- package/Server/Services/{TelemetryServiceService.ts → ServiceService.ts} +7 -9
- package/Server/Services/TelemetryExceptionService.ts +3 -4
- package/Server/Services/TelemetryUsageBillingService.ts +30 -32
- package/Server/Utils/Telemetry/Telemetry.ts +24 -23
- package/Types/AI/AIAgentTaskMetadata.ts +1 -1
- package/Types/Permission.ts +112 -115
- package/UI/Components/LogsViewer/LogsViewer.tsx +20 -23
- package/UI/Components/LogsViewer/components/LogDetailsPanel.tsx +3 -3
- package/UI/Components/LogsViewer/components/LogsTable.tsx +3 -4
- package/UI/Components/Navbar/NavBarMenuItem.tsx +2 -2
- package/Utils/TechStack.ts +1 -1
- package/build/dist/Models/DatabaseModels/AIAgentTask.js +18 -3
- package/build/dist/Models/DatabaseModels/AIAgentTask.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +12 -16
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MetricType.js +8 -8
- package/build/dist/Models/DatabaseModels/MetricType.js.map +1 -1
- package/build/dist/Models/DatabaseModels/{ServiceCatalog.js → Service.js} +93 -65
- package/build/dist/Models/DatabaseModels/Service.js.map +1 -0
- package/build/dist/Models/DatabaseModels/{ServiceCatalogCodeRepository.js → ServiceCodeRepository.js} +72 -72
- package/build/dist/Models/DatabaseModels/ServiceCodeRepository.js.map +1 -0
- package/build/dist/Models/DatabaseModels/{ServiceCatalogDependency.js → ServiceDependency.js} +65 -65
- package/build/dist/Models/DatabaseModels/ServiceDependency.js.map +1 -0
- package/build/dist/Models/DatabaseModels/{ServiceCatalogMonitor.js → ServiceMonitor.js} +56 -56
- package/build/dist/Models/DatabaseModels/ServiceMonitor.js.map +1 -0
- package/build/dist/Models/DatabaseModels/{ServiceCatalogOwnerTeam.js → ServiceOwnerTeam.js} +56 -56
- package/build/dist/Models/DatabaseModels/ServiceOwnerTeam.js.map +1 -0
- package/build/dist/Models/DatabaseModels/{ServiceCatalogOwnerUser.js → ServiceOwnerUser.js} +56 -56
- package/build/dist/Models/DatabaseModels/ServiceOwnerUser.js.map +1 -0
- package/build/dist/Models/DatabaseModels/TelemetryException.js +14 -14
- package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TelemetryUsageBilling.js +14 -14
- package/build/dist/Models/DatabaseModels/TelemetryUsageBilling.js.map +1 -1
- package/build/dist/Server/API/AIAgentDataAPI.js +48 -77
- package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1767966850199-RenameServiceCatalogToService.js +72 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1767966850199-RenameServiceCatalogToService.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1767979055522-MigrationName.js +254 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1767979055522-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1767979448478-MigrationName.js +140 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1767979448478-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Services/Index.js +12 -16
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/OpenTelemetryIngestService.js +7 -7
- package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
- package/build/dist/Server/Services/{ServiceCatalogCodeRepositoryService.js → ServiceCodeRepositoryService.js} +7 -7
- package/build/dist/Server/Services/ServiceCodeRepositoryService.js.map +1 -0
- package/build/dist/Server/Services/{ServiceCatalogDependencyService.js → ServiceDependencyService.js} +11 -12
- package/build/dist/Server/Services/ServiceDependencyService.js.map +1 -0
- package/build/dist/Server/Services/{ServiceCatalogMonitorService.js → ServiceMonitorService.js} +8 -8
- package/build/dist/Server/Services/ServiceMonitorService.js.map +1 -0
- package/build/dist/Server/Services/{ServiceCatalogOwnerUserService.js → ServiceOwnerTeamService.js} +2 -2
- package/build/dist/Server/Services/ServiceOwnerTeamService.js.map +1 -0
- package/build/dist/Server/Services/{ServiceCatalogOwnerTeamService.js → ServiceOwnerUserService.js} +2 -2
- package/build/dist/Server/Services/ServiceOwnerUserService.js.map +1 -0
- package/build/dist/Server/Services/{TelemetryServiceService.js → ServiceService.js} +8 -9
- package/build/dist/Server/Services/ServiceService.js.map +1 -0
- package/build/dist/Server/Services/TelemetryExceptionService.js +3 -4
- package/build/dist/Server/Services/TelemetryExceptionService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryUsageBillingService.js +15 -16
- package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/Telemetry.js +20 -20
- package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
- package/build/dist/Types/Permission.js +112 -112
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Service/CodeRepositoryImprovementAction.js.map +1 -0
- package/build/dist/Types/Service/TechStack.js.map +1 -0
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js +5 -5
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsTable.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBarMenuItem.js +1 -1
- package/build/dist/UI/Components/Navbar/NavBarMenuItem.js.map +1 -1
- package/build/dist/Utils/TechStack.js +1 -1
- package/build/dist/Utils/TechStack.js.map +1 -1
- package/package.json +1 -1
- package/Models/DatabaseModels/ServiceCatalogTelemetryService.ts +0 -421
- package/Models/DatabaseModels/TelemetryService.ts +0 -529
- package/Server/Services/ServiceCatalogDependencyService.ts +0 -51
- package/Server/Services/ServiceCatalogService.ts +0 -28
- package/Server/Services/ServiceCatalogTelemetryServiceService.ts +0 -59
- package/build/dist/Models/DatabaseModels/ServiceCatalog.js.map +0 -1
- package/build/dist/Models/DatabaseModels/ServiceCatalogCodeRepository.js.map +0 -1
- package/build/dist/Models/DatabaseModels/ServiceCatalogDependency.js.map +0 -1
- package/build/dist/Models/DatabaseModels/ServiceCatalogMonitor.js.map +0 -1
- package/build/dist/Models/DatabaseModels/ServiceCatalogOwnerTeam.js.map +0 -1
- package/build/dist/Models/DatabaseModels/ServiceCatalogOwnerUser.js.map +0 -1
- package/build/dist/Models/DatabaseModels/ServiceCatalogTelemetryService.js +0 -436
- package/build/dist/Models/DatabaseModels/ServiceCatalogTelemetryService.js.map +0 -1
- package/build/dist/Models/DatabaseModels/TelemetryService.js +0 -545
- package/build/dist/Models/DatabaseModels/TelemetryService.js.map +0 -1
- package/build/dist/Server/Services/ServiceCatalogCodeRepositoryService.js.map +0 -1
- package/build/dist/Server/Services/ServiceCatalogDependencyService.js.map +0 -1
- package/build/dist/Server/Services/ServiceCatalogMonitorService.js.map +0 -1
- package/build/dist/Server/Services/ServiceCatalogOwnerTeamService.js.map +0 -1
- package/build/dist/Server/Services/ServiceCatalogOwnerUserService.js.map +0 -1
- package/build/dist/Server/Services/ServiceCatalogService.js +0 -35
- package/build/dist/Server/Services/ServiceCatalogService.js.map +0 -1
- package/build/dist/Server/Services/ServiceCatalogTelemetryServiceService.js +0 -56
- package/build/dist/Server/Services/ServiceCatalogTelemetryServiceService.js.map +0 -1
- package/build/dist/Server/Services/TelemetryServiceService.js.map +0 -1
- package/build/dist/Types/ServiceCatalog/CodeRepositoryImprovementAction.js.map +0 -1
- package/build/dist/Types/ServiceCatalog/TechStack.js.map +0 -1
- /package/Types/{ServiceCatalog → Service}/CodeRepositoryImprovementAction.ts +0 -0
- /package/Types/{ServiceCatalog → Service}/TechStack.ts +0 -0
- /package/build/dist/Types/{ServiceCatalog → Service}/CodeRepositoryImprovementAction.js +0 -0
- /package/build/dist/Types/{ServiceCatalog → Service}/TechStack.js +0 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { MigrationInterface, QueryRunner } from "typeorm";
|
|
2
|
+
|
|
3
|
+
// Schema + Data migration: Move TelemetryService to Service table
|
|
4
|
+
export class MigrationName1767979448478 implements MigrationInterface {
|
|
5
|
+
public name = "MigrationName1767979448478";
|
|
6
|
+
|
|
7
|
+
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
8
|
+
// Step 1: Drop old FK constraints (pointing to TelemetryService)
|
|
9
|
+
await queryRunner.query(
|
|
10
|
+
`ALTER TABLE "TelemetryException" DROP CONSTRAINT IF EXISTS "FK_6470c69cb5f53c5899c0483df5f"`,
|
|
11
|
+
);
|
|
12
|
+
await queryRunner.query(
|
|
13
|
+
`ALTER TABLE "TelemetryUsageBilling" DROP CONSTRAINT IF EXISTS "FK_91333210492e5d2f334231468a7"`,
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
// Step 2: Drop old indexes
|
|
17
|
+
await queryRunner.query(
|
|
18
|
+
`DROP INDEX IF EXISTS "public"."IDX_6470c69cb5f53c5899c0483df5"`,
|
|
19
|
+
);
|
|
20
|
+
await queryRunner.query(
|
|
21
|
+
`DROP INDEX IF EXISTS "public"."IDX_91333210492e5d2f334231468a"`,
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
// Step 3: Add retainTelemetryDataForDays column to Service (needed before data migration)
|
|
25
|
+
await queryRunner.query(
|
|
26
|
+
`ALTER TABLE "Service" ADD COLUMN IF NOT EXISTS "retainTelemetryDataForDays" integer DEFAULT '15'`,
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
/*
|
|
30
|
+
* Step 4: Migrate TelemetryService data to Service table (BEFORE renaming columns and adding FK)
|
|
31
|
+
* Preserve the same _id so existing references remain valid
|
|
32
|
+
*/
|
|
33
|
+
const telemetryServiceTableExists: Array<{ exists: boolean }> =
|
|
34
|
+
await queryRunner.query(`
|
|
35
|
+
SELECT EXISTS (
|
|
36
|
+
SELECT FROM information_schema.tables
|
|
37
|
+
WHERE table_schema = 'public'
|
|
38
|
+
AND table_name = 'TelemetryService'
|
|
39
|
+
)
|
|
40
|
+
`);
|
|
41
|
+
|
|
42
|
+
if (telemetryServiceTableExists[0]?.exists) {
|
|
43
|
+
await queryRunner.query(`
|
|
44
|
+
INSERT INTO "Service" (
|
|
45
|
+
"_id",
|
|
46
|
+
"createdAt",
|
|
47
|
+
"updatedAt",
|
|
48
|
+
"deletedAt",
|
|
49
|
+
"version",
|
|
50
|
+
"projectId",
|
|
51
|
+
"name",
|
|
52
|
+
"slug",
|
|
53
|
+
"description",
|
|
54
|
+
"createdByUserId",
|
|
55
|
+
"deletedByUserId",
|
|
56
|
+
"serviceColor",
|
|
57
|
+
"retainTelemetryDataForDays"
|
|
58
|
+
)
|
|
59
|
+
SELECT
|
|
60
|
+
"_id",
|
|
61
|
+
"createdAt",
|
|
62
|
+
"updatedAt",
|
|
63
|
+
"deletedAt",
|
|
64
|
+
"version",
|
|
65
|
+
"projectId",
|
|
66
|
+
"name",
|
|
67
|
+
"slug",
|
|
68
|
+
"description",
|
|
69
|
+
"createdByUserId",
|
|
70
|
+
"deletedByUserId",
|
|
71
|
+
"serviceColor",
|
|
72
|
+
"retainTelemetryDataForDays"
|
|
73
|
+
FROM "TelemetryService"
|
|
74
|
+
ON CONFLICT ("_id") DO NOTHING
|
|
75
|
+
`);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Step 5: Migrate TelemetryServiceLabel to ServiceLabel
|
|
79
|
+
const telemetryServiceLabelExists: Array<{ exists: boolean }> =
|
|
80
|
+
await queryRunner.query(`
|
|
81
|
+
SELECT EXISTS (
|
|
82
|
+
SELECT FROM information_schema.tables
|
|
83
|
+
WHERE table_schema = 'public'
|
|
84
|
+
AND table_name = 'TelemetryServiceLabel'
|
|
85
|
+
)
|
|
86
|
+
`);
|
|
87
|
+
|
|
88
|
+
if (telemetryServiceLabelExists[0]?.exists) {
|
|
89
|
+
await queryRunner.query(`
|
|
90
|
+
INSERT INTO "ServiceLabel" ("serviceId", "labelId")
|
|
91
|
+
SELECT "telemetryServiceId", "labelId"
|
|
92
|
+
FROM "TelemetryServiceLabel"
|
|
93
|
+
ON CONFLICT DO NOTHING
|
|
94
|
+
`);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Step 6: Rename columns (telemetryServiceId -> serviceId)
|
|
98
|
+
await queryRunner.query(
|
|
99
|
+
`ALTER TABLE "TelemetryException" RENAME COLUMN "telemetryServiceId" TO "serviceId"`,
|
|
100
|
+
);
|
|
101
|
+
await queryRunner.query(
|
|
102
|
+
`ALTER TABLE "TelemetryUsageBilling" RENAME COLUMN "telemetryServiceId" TO "serviceId"`,
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
// Step 7: Create MetricTypeService table
|
|
106
|
+
await queryRunner.query(
|
|
107
|
+
`CREATE TABLE IF NOT EXISTS "MetricTypeService" ("metricTypeId" uuid NOT NULL, "serviceId" uuid NOT NULL, CONSTRAINT "PK_21b7a84eea5b71922ac5ccc92e9" PRIMARY KEY ("metricTypeId", "serviceId"))`,
|
|
108
|
+
);
|
|
109
|
+
await queryRunner.query(
|
|
110
|
+
`CREATE INDEX IF NOT EXISTS "IDX_e6b6e365ad502b487cb63d2891" ON "MetricTypeService" ("metricTypeId") `,
|
|
111
|
+
);
|
|
112
|
+
await queryRunner.query(
|
|
113
|
+
`CREATE INDEX IF NOT EXISTS "IDX_c67839207ff53f33eb22648b56" ON "MetricTypeService" ("serviceId") `,
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
// Step 8: Migrate MetricTypeTelemetryService to MetricTypeService
|
|
117
|
+
const metricTypeTelemetryServiceExists: Array<{ exists: boolean }> =
|
|
118
|
+
await queryRunner.query(`
|
|
119
|
+
SELECT EXISTS (
|
|
120
|
+
SELECT FROM information_schema.tables
|
|
121
|
+
WHERE table_schema = 'public'
|
|
122
|
+
AND table_name = 'MetricTypeTelemetryService'
|
|
123
|
+
)
|
|
124
|
+
`);
|
|
125
|
+
|
|
126
|
+
if (metricTypeTelemetryServiceExists[0]?.exists) {
|
|
127
|
+
await queryRunner.query(`
|
|
128
|
+
INSERT INTO "MetricTypeService" ("metricTypeId", "serviceId")
|
|
129
|
+
SELECT "metricTypeId", "telemetryServiceId"
|
|
130
|
+
FROM "MetricTypeTelemetryService"
|
|
131
|
+
ON CONFLICT DO NOTHING
|
|
132
|
+
`);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Step 10: Create new indexes
|
|
136
|
+
await queryRunner.query(
|
|
137
|
+
`CREATE INDEX IF NOT EXISTS "IDX_08a0cfa9f184257b1e57da4cf5" ON "TelemetryException" ("serviceId") `,
|
|
138
|
+
);
|
|
139
|
+
await queryRunner.query(
|
|
140
|
+
`CREATE INDEX IF NOT EXISTS "IDX_b9f49cd8318a35757fc843ee90" ON "TelemetryUsageBilling" ("serviceId") `,
|
|
141
|
+
);
|
|
142
|
+
|
|
143
|
+
// Step 11: Add new FK constraints (NOW safe because Service table has the migrated data)
|
|
144
|
+
await queryRunner.query(
|
|
145
|
+
`ALTER TABLE "TelemetryException" ADD CONSTRAINT "FK_08a0cfa9f184257b1e57da4cf50" FOREIGN KEY ("serviceId") REFERENCES "Service"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
|
|
146
|
+
);
|
|
147
|
+
await queryRunner.query(
|
|
148
|
+
`ALTER TABLE "TelemetryUsageBilling" ADD CONSTRAINT "FK_b9f49cd8318a35757fc843ee900" FOREIGN KEY ("serviceId") REFERENCES "Service"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
|
|
149
|
+
);
|
|
150
|
+
await queryRunner.query(
|
|
151
|
+
`ALTER TABLE "MetricTypeService" ADD CONSTRAINT "FK_e6b6e365ad502b487cb63d28913" FOREIGN KEY ("metricTypeId") REFERENCES "MetricType"("_id") ON DELETE CASCADE ON UPDATE CASCADE`,
|
|
152
|
+
);
|
|
153
|
+
await queryRunner.query(
|
|
154
|
+
`ALTER TABLE "MetricTypeService" ADD CONSTRAINT "FK_c67839207ff53f33eb22648b567" FOREIGN KEY ("serviceId") REFERENCES "Service"("_id") ON DELETE CASCADE ON UPDATE CASCADE`,
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
159
|
+
// Drop new FK constraints
|
|
160
|
+
await queryRunner.query(
|
|
161
|
+
`ALTER TABLE "MetricTypeService" DROP CONSTRAINT "FK_c67839207ff53f33eb22648b567"`,
|
|
162
|
+
);
|
|
163
|
+
await queryRunner.query(
|
|
164
|
+
`ALTER TABLE "MetricTypeService" DROP CONSTRAINT "FK_e6b6e365ad502b487cb63d28913"`,
|
|
165
|
+
);
|
|
166
|
+
await queryRunner.query(
|
|
167
|
+
`ALTER TABLE "TelemetryUsageBilling" DROP CONSTRAINT "FK_b9f49cd8318a35757fc843ee900"`,
|
|
168
|
+
);
|
|
169
|
+
await queryRunner.query(
|
|
170
|
+
`ALTER TABLE "TelemetryException" DROP CONSTRAINT "FK_08a0cfa9f184257b1e57da4cf50"`,
|
|
171
|
+
);
|
|
172
|
+
|
|
173
|
+
// Drop new indexes
|
|
174
|
+
await queryRunner.query(
|
|
175
|
+
`DROP INDEX "public"."IDX_b9f49cd8318a35757fc843ee90"`,
|
|
176
|
+
);
|
|
177
|
+
await queryRunner.query(
|
|
178
|
+
`DROP INDEX "public"."IDX_08a0cfa9f184257b1e57da4cf5"`,
|
|
179
|
+
);
|
|
180
|
+
|
|
181
|
+
// Drop retainTelemetryDataForDays column
|
|
182
|
+
await queryRunner.query(
|
|
183
|
+
`ALTER TABLE "Service" DROP COLUMN "retainTelemetryDataForDays"`,
|
|
184
|
+
);
|
|
185
|
+
|
|
186
|
+
// Drop MetricTypeService table and indexes
|
|
187
|
+
await queryRunner.query(
|
|
188
|
+
`DROP INDEX "public"."IDX_c67839207ff53f33eb22648b56"`,
|
|
189
|
+
);
|
|
190
|
+
await queryRunner.query(
|
|
191
|
+
`DROP INDEX "public"."IDX_e6b6e365ad502b487cb63d2891"`,
|
|
192
|
+
);
|
|
193
|
+
await queryRunner.query(`DROP TABLE "MetricTypeService"`);
|
|
194
|
+
|
|
195
|
+
// Rename columns back
|
|
196
|
+
await queryRunner.query(
|
|
197
|
+
`ALTER TABLE "TelemetryUsageBilling" RENAME COLUMN "serviceId" TO "telemetryServiceId"`,
|
|
198
|
+
);
|
|
199
|
+
await queryRunner.query(
|
|
200
|
+
`ALTER TABLE "TelemetryException" RENAME COLUMN "serviceId" TO "telemetryServiceId"`,
|
|
201
|
+
);
|
|
202
|
+
|
|
203
|
+
// Recreate old indexes
|
|
204
|
+
await queryRunner.query(
|
|
205
|
+
`CREATE INDEX "IDX_91333210492e5d2f334231468a" ON "TelemetryUsageBilling" ("telemetryServiceId") `,
|
|
206
|
+
);
|
|
207
|
+
await queryRunner.query(
|
|
208
|
+
`CREATE INDEX "IDX_6470c69cb5f53c5899c0483df5" ON "TelemetryException" ("telemetryServiceId") `,
|
|
209
|
+
);
|
|
210
|
+
|
|
211
|
+
// Restore old FK constraints (pointing back to TelemetryService)
|
|
212
|
+
await queryRunner.query(
|
|
213
|
+
`ALTER TABLE "TelemetryUsageBilling" ADD CONSTRAINT "FK_91333210492e5d2f334231468a7" FOREIGN KEY ("telemetryServiceId") REFERENCES "TelemetryService"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
|
|
214
|
+
);
|
|
215
|
+
await queryRunner.query(
|
|
216
|
+
`ALTER TABLE "TelemetryException" ADD CONSTRAINT "FK_6470c69cb5f53c5899c0483df5f" FOREIGN KEY ("telemetryServiceId") REFERENCES "TelemetryService"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
|
|
217
|
+
);
|
|
218
|
+
|
|
219
|
+
/*
|
|
220
|
+
* Note: We don't delete the migrated data from Service table in down migration
|
|
221
|
+
* as it could be dangerous if new Service records were created
|
|
222
|
+
*/
|
|
223
|
+
}
|
|
224
|
+
}
|
|
@@ -213,6 +213,9 @@ import { AddAIAgentIsDefault1766918848434 } from "./1766918848434-AddAIAgentIsDe
|
|
|
213
213
|
import { MigrationName1766923324521 } from "./1766923324521-MigrationName";
|
|
214
214
|
import { AddGitHubAppInstallationIdToProject1766958924188 } from "./1766958924188-AddGitHubAppInstallationIdToProject";
|
|
215
215
|
import { MigrationName1767009661768 } from "./1767009661768-MigrationName";
|
|
216
|
+
import { RenameServiceCatalogToService1767966850199 } from "./1767966850199-RenameServiceCatalogToService";
|
|
217
|
+
import { MigrationName1767979055522 } from "./1767979055522-MigrationName";
|
|
218
|
+
import { MigrationName1767979448478 } from "./1767979448478-MigrationName";
|
|
216
219
|
|
|
217
220
|
export default [
|
|
218
221
|
InitialMigration,
|
|
@@ -430,4 +433,7 @@ export default [
|
|
|
430
433
|
MigrationName1766923324521,
|
|
431
434
|
AddGitHubAppInstallationIdToProject1766958924188,
|
|
432
435
|
MigrationName1767009661768,
|
|
436
|
+
RenameServiceCatalogToService1767966850199,
|
|
437
|
+
MigrationName1767979055522,
|
|
438
|
+
MigrationName1767979448478,
|
|
433
439
|
];
|
package/Server/Services/Index.ts
CHANGED
|
@@ -87,12 +87,11 @@ import ScheduledMaintenancePublicNoteService from "./ScheduledMaintenancePublicN
|
|
|
87
87
|
import ScheduledMaintenanceService from "./ScheduledMaintenanceService";
|
|
88
88
|
import ScheduledMaintenanceStateService from "./ScheduledMaintenanceStateService";
|
|
89
89
|
import ScheduledMaintenanceStateTimelineService from "./ScheduledMaintenanceStateTimelineService";
|
|
90
|
-
import
|
|
91
|
-
import
|
|
92
|
-
import
|
|
93
|
-
import
|
|
94
|
-
import
|
|
95
|
-
import ServiceCatalogCodeRepositoryService from "./ServiceCatalogCodeRepositoryService";
|
|
90
|
+
import ServiceOwnerTeamService from "./ServiceOwnerTeamService";
|
|
91
|
+
import ServiceOwnerUserService from "./ServiceOwnerUserService";
|
|
92
|
+
import ServiceService from "./ServiceService";
|
|
93
|
+
import ServiceMonitorService from "./ServiceMonitorService";
|
|
94
|
+
import ServiceCodeRepositoryService from "./ServiceCodeRepositoryService";
|
|
96
95
|
import ShortLinkService from "./ShortLinkService";
|
|
97
96
|
// SMS Log Service
|
|
98
97
|
import SmsLogService from "./SmsLogService";
|
|
@@ -123,7 +122,6 @@ import TeamPermissionService from "./TeamPermissionService";
|
|
|
123
122
|
import TeamComplianceSettingService from "./TeamComplianceSettingService";
|
|
124
123
|
// Team
|
|
125
124
|
import TeamService from "./TeamService";
|
|
126
|
-
import TelemetryServiceService from "./TelemetryServiceService";
|
|
127
125
|
import UsageBillingService from "./TelemetryUsageBillingService";
|
|
128
126
|
import UserCallService from "./UserCallService";
|
|
129
127
|
import UserEmailService from "./UserEmailService";
|
|
@@ -142,7 +140,7 @@ import WorkflowLogService from "./WorkflowLogService";
|
|
|
142
140
|
import WorkflowService from "./WorkflowService";
|
|
143
141
|
import WorkflowVariablesService from "./WorkflowVariableService";
|
|
144
142
|
import AnalyticsBaseModel from "../../Models/AnalyticsModels/AnalyticsBaseModel/AnalyticsBaseModel";
|
|
145
|
-
import
|
|
143
|
+
import ServiceDependencyService from "./ServiceDependencyService";
|
|
146
144
|
import TelemetryExceptionService from "./TelemetryExceptionService";
|
|
147
145
|
import ExceptionInstanceService from "./ExceptionInstanceService";
|
|
148
146
|
import ScheduledMaintenanceTemplateService from "./ScheduledMaintenanceTemplateService";
|
|
@@ -315,8 +313,6 @@ const services: Array<BaseService> = [
|
|
|
315
313
|
MonitorGroupOwnerUserService,
|
|
316
314
|
MonitorGroupOwnerTeamService,
|
|
317
315
|
|
|
318
|
-
TelemetryServiceService,
|
|
319
|
-
|
|
320
316
|
// On Call Duty Policy Schedule
|
|
321
317
|
OnCallDutyPolicyScheduleService,
|
|
322
318
|
OnCallDutyPolicyScheduleLayerUserService,
|
|
@@ -326,13 +322,12 @@ const services: Array<BaseService> = [
|
|
|
326
322
|
UsageBillingService,
|
|
327
323
|
ProjectCallSMSConfigService,
|
|
328
324
|
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
ServiceCatalogCodeRepositoryService,
|
|
325
|
+
ServiceService,
|
|
326
|
+
ServiceOwnerTeamService,
|
|
327
|
+
ServiceOwnerUserService,
|
|
328
|
+
ServiceDependencyService,
|
|
329
|
+
ServiceMonitorService,
|
|
330
|
+
ServiceCodeRepositoryService,
|
|
336
331
|
|
|
337
332
|
TelemetryExceptionService,
|
|
338
333
|
|
|
@@ -4,8 +4,8 @@ import ObjectID from "../../Types/ObjectID";
|
|
|
4
4
|
import Metric, {
|
|
5
5
|
AggregationTemporality,
|
|
6
6
|
} from "../../Models/AnalyticsModels/Metric";
|
|
7
|
-
import
|
|
8
|
-
import
|
|
7
|
+
import Service from "../../Models/DatabaseModels/Service";
|
|
8
|
+
import ServiceService from "../../Server/Services/ServiceService";
|
|
9
9
|
import { DEFAULT_RETENTION_IN_DAYS } from "../../Models/DatabaseModels/TelemetryUsageBilling";
|
|
10
10
|
import TelemetryUtil from "../../Server/Utils/Telemetry/Telemetry";
|
|
11
11
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
@@ -30,37 +30,35 @@ export default class OTelIngestService {
|
|
|
30
30
|
serviceId: ObjectID;
|
|
31
31
|
dataRententionInDays: number;
|
|
32
32
|
}> {
|
|
33
|
-
const service:
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
});
|
|
33
|
+
const service: Service | null = await ServiceService.findOneBy({
|
|
34
|
+
query: {
|
|
35
|
+
projectId: data.projectId,
|
|
36
|
+
name: data.serviceName,
|
|
37
|
+
},
|
|
38
|
+
select: {
|
|
39
|
+
_id: true,
|
|
40
|
+
retainTelemetryDataForDays: true,
|
|
41
|
+
},
|
|
42
|
+
props: {
|
|
43
|
+
isRoot: true,
|
|
44
|
+
},
|
|
45
|
+
});
|
|
47
46
|
|
|
48
47
|
if (!service) {
|
|
49
48
|
// create service
|
|
50
49
|
|
|
51
|
-
const newService:
|
|
50
|
+
const newService: Service = new Service();
|
|
52
51
|
newService.projectId = data.projectId;
|
|
53
52
|
newService.name = data.serviceName;
|
|
54
53
|
newService.description = data.serviceName;
|
|
55
54
|
newService.retainTelemetryDataForDays = DEFAULT_RETENTION_IN_DAYS;
|
|
56
55
|
|
|
57
|
-
const createdService:
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
});
|
|
56
|
+
const createdService: Service = await ServiceService.create({
|
|
57
|
+
data: newService,
|
|
58
|
+
props: {
|
|
59
|
+
isRoot: true,
|
|
60
|
+
},
|
|
61
|
+
});
|
|
64
62
|
|
|
65
63
|
return {
|
|
66
64
|
serviceId: createdService.id!,
|
|
@@ -80,8 +78,8 @@ export default class OTelIngestService {
|
|
|
80
78
|
datapoint: JSONObject;
|
|
81
79
|
aggregationTemporality: OtelAggregationTemporality;
|
|
82
80
|
isMonotonic: boolean | undefined;
|
|
83
|
-
|
|
84
|
-
|
|
81
|
+
serviceId: ObjectID;
|
|
82
|
+
serviceName: string;
|
|
85
83
|
}): Metric {
|
|
86
84
|
const { dbMetric, datapoint, aggregationTemporality, isMonotonic } = data;
|
|
87
85
|
|
|
@@ -164,8 +162,8 @@ export default class OTelIngestService {
|
|
|
164
162
|
|
|
165
163
|
newDbMetric.attributes = {
|
|
166
164
|
...TelemetryUtil.getAttributesForServiceIdAndServiceName({
|
|
167
|
-
serviceId: data.
|
|
168
|
-
serviceName: data.
|
|
165
|
+
serviceId: data.serviceId,
|
|
166
|
+
serviceName: data.serviceName,
|
|
169
167
|
}),
|
|
170
168
|
...TelemetryUtil.getAttributes({
|
|
171
169
|
items: (datapoint["attributes"] as JSONArray) || [],
|
package/Server/Services/{ServiceCatalogCodeRepositoryService.ts → ServiceCodeRepositoryService.ts}
RENAMED
|
@@ -2,7 +2,7 @@ import BadDataException from "../../Types/Exception/BadDataException";
|
|
|
2
2
|
import CreateBy from "../Types/Database/CreateBy";
|
|
3
3
|
import { OnCreate } from "../Types/Database/Hooks";
|
|
4
4
|
import DatabaseService from "./DatabaseService";
|
|
5
|
-
import Model from "../../Models/DatabaseModels/
|
|
5
|
+
import Model from "../../Models/DatabaseModels/ServiceCodeRepository";
|
|
6
6
|
import ObjectID from "../../Types/ObjectID";
|
|
7
7
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
8
8
|
|
|
@@ -15,23 +15,23 @@ export class Service extends DatabaseService<Model> {
|
|
|
15
15
|
protected override async onBeforeCreate(
|
|
16
16
|
createBy: CreateBy<Model>,
|
|
17
17
|
): Promise<OnCreate<Model>> {
|
|
18
|
-
if (!createBy.data.
|
|
19
|
-
throw new BadDataException("
|
|
18
|
+
if (!createBy.data.serviceId && !createBy.data.service) {
|
|
19
|
+
throw new BadDataException("service is required");
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
if (!createBy.data.codeRepository && !createBy.data.codeRepositoryId) {
|
|
23
23
|
throw new BadDataException("codeRepository is required");
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
const
|
|
27
|
-
createBy.data.
|
|
26
|
+
const serviceId: string | ObjectID | undefined =
|
|
27
|
+
createBy.data.serviceId || createBy.data.service?._id;
|
|
28
28
|
const codeRepositoryId: string | ObjectID | undefined =
|
|
29
29
|
createBy.data.codeRepositoryId || createBy.data.codeRepository?._id;
|
|
30
30
|
|
|
31
|
-
// check if this code repository is already added to the service
|
|
31
|
+
// check if this code repository is already added to the service for this service.
|
|
32
32
|
const existingCodeRepository: Model | null = await this.findOneBy({
|
|
33
33
|
query: {
|
|
34
|
-
|
|
34
|
+
serviceId: serviceId as ObjectID,
|
|
35
35
|
codeRepositoryId: codeRepositoryId as ObjectID,
|
|
36
36
|
},
|
|
37
37
|
props: {
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import BadDataException from "../../Types/Exception/BadDataException";
|
|
2
|
+
import CreateBy from "../Types/Database/CreateBy";
|
|
3
|
+
import { OnCreate } from "../Types/Database/Hooks";
|
|
4
|
+
import DatabaseService from "./DatabaseService";
|
|
5
|
+
import Model from "../../Models/DatabaseModels/ServiceDependency";
|
|
6
|
+
import ObjectID from "../../Types/ObjectID";
|
|
7
|
+
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
8
|
+
|
|
9
|
+
export class Service extends DatabaseService<Model> {
|
|
10
|
+
public constructor() {
|
|
11
|
+
super(Model);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@CaptureSpan()
|
|
15
|
+
protected override async onBeforeCreate(
|
|
16
|
+
createBy: CreateBy<Model>,
|
|
17
|
+
): Promise<OnCreate<Model>> {
|
|
18
|
+
// select a random color.
|
|
19
|
+
|
|
20
|
+
if (!createBy.data.serviceId && !createBy.data.service) {
|
|
21
|
+
throw new BadDataException("service is required");
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (
|
|
25
|
+
!createBy.data.dependencyServiceId &&
|
|
26
|
+
!createBy.data.dependencyService
|
|
27
|
+
) {
|
|
28
|
+
throw new BadDataException("dependencyService is required");
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// serviceId and dependencyServiceId should not be the same
|
|
32
|
+
const serviceId: string | ObjectID | undefined =
|
|
33
|
+
createBy.data.serviceId || createBy.data.service?._id;
|
|
34
|
+
const dependencyServiceId: string | ObjectID | undefined =
|
|
35
|
+
createBy.data.dependencyServiceId || createBy.data.dependencyService?._id;
|
|
36
|
+
|
|
37
|
+
if (serviceId?.toString() === dependencyServiceId?.toString()) {
|
|
38
|
+
throw new BadDataException("Service cannot depend on itself.");
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return {
|
|
42
|
+
carryForward: null,
|
|
43
|
+
createBy: createBy,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export default new Service();
|
|
@@ -2,7 +2,7 @@ import BadDataException from "../../Types/Exception/BadDataException";
|
|
|
2
2
|
import CreateBy from "../Types/Database/CreateBy";
|
|
3
3
|
import { OnCreate } from "../Types/Database/Hooks";
|
|
4
4
|
import DatabaseService from "./DatabaseService";
|
|
5
|
-
import Model from "../../Models/DatabaseModels/
|
|
5
|
+
import Model from "../../Models/DatabaseModels/ServiceMonitor";
|
|
6
6
|
import ObjectID from "../../Types/ObjectID";
|
|
7
7
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
8
8
|
|
|
@@ -17,25 +17,25 @@ export class Service extends DatabaseService<Model> {
|
|
|
17
17
|
): Promise<OnCreate<Model>> {
|
|
18
18
|
// select a random color.
|
|
19
19
|
|
|
20
|
-
if (!createBy.data.
|
|
21
|
-
throw new BadDataException("
|
|
20
|
+
if (!createBy.data.serviceId && !createBy.data.service) {
|
|
21
|
+
throw new BadDataException("service is required");
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
if (!createBy.data.monitor && !createBy.data.monitorId) {
|
|
25
25
|
throw new BadDataException("monitor is required");
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
//
|
|
29
|
-
const
|
|
30
|
-
createBy.data.
|
|
28
|
+
// serviceId and dependencyServiceId should not be the same
|
|
29
|
+
const serviceId: string | ObjectID | undefined =
|
|
30
|
+
createBy.data.serviceId || createBy.data.service?._id;
|
|
31
31
|
const monitorId: string | ObjectID | undefined =
|
|
32
32
|
createBy.data.monitorId || createBy.data.monitor?._id;
|
|
33
33
|
|
|
34
|
-
// check if this monitor is already added to the service
|
|
34
|
+
// check if this monitor is already added to the service for this service.
|
|
35
35
|
|
|
36
36
|
const existingMonitor: Model | null = await this.findOneBy({
|
|
37
37
|
query: {
|
|
38
|
-
|
|
38
|
+
serviceId: serviceId as ObjectID,
|
|
39
39
|
monitorId: monitorId as ObjectID,
|
|
40
40
|
},
|
|
41
41
|
props: {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import DatabaseService from "./DatabaseService";
|
|
2
|
-
import Model from "../../Models/DatabaseModels/
|
|
2
|
+
import Model from "../../Models/DatabaseModels/ServiceOwnerTeam";
|
|
3
3
|
|
|
4
4
|
export class Service extends DatabaseService<Model> {
|
|
5
5
|
public constructor() {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import DatabaseService from "./DatabaseService";
|
|
2
|
-
import Model from "../../Models/DatabaseModels/
|
|
2
|
+
import Model from "../../Models/DatabaseModels/ServiceOwnerUser";
|
|
3
3
|
|
|
4
4
|
export class Service extends DatabaseService<Model> {
|
|
5
5
|
public constructor() {
|
|
@@ -5,7 +5,7 @@ import ArrayUtil from "../../Utils/Array";
|
|
|
5
5
|
import { BrightColors } from "../../Types/BrandColors";
|
|
6
6
|
import BadDataException from "../../Types/Exception/BadDataException";
|
|
7
7
|
import ObjectID from "../../Types/ObjectID";
|
|
8
|
-
import Model from "../../Models/DatabaseModels/
|
|
8
|
+
import Model from "../../Models/DatabaseModels/Service";
|
|
9
9
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
10
10
|
|
|
11
11
|
export class Service extends DatabaseService<Model> {
|
|
@@ -17,8 +17,6 @@ export class Service extends DatabaseService<Model> {
|
|
|
17
17
|
protected override async onBeforeCreate(
|
|
18
18
|
createBy: CreateBy<Model>,
|
|
19
19
|
): Promise<OnCreate<Model>> {
|
|
20
|
-
createBy.data.telemetryServiceToken = ObjectID.generate();
|
|
21
|
-
|
|
22
20
|
// select a random color.
|
|
23
21
|
createBy.data.serviceColor = ArrayUtil.selectItemByRandom(BrightColors);
|
|
24
22
|
|
|
@@ -30,10 +28,10 @@ export class Service extends DatabaseService<Model> {
|
|
|
30
28
|
|
|
31
29
|
@CaptureSpan()
|
|
32
30
|
public async getTelemetryDataRetentionInDays(
|
|
33
|
-
|
|
31
|
+
serviceId: ObjectID,
|
|
34
32
|
): Promise<number> {
|
|
35
|
-
const
|
|
36
|
-
id:
|
|
33
|
+
const service: Model | null = await this.findOneById({
|
|
34
|
+
id: serviceId,
|
|
37
35
|
select: {
|
|
38
36
|
retainTelemetryDataForDays: true,
|
|
39
37
|
},
|
|
@@ -42,11 +40,11 @@ export class Service extends DatabaseService<Model> {
|
|
|
42
40
|
},
|
|
43
41
|
});
|
|
44
42
|
|
|
45
|
-
if (!
|
|
46
|
-
throw new BadDataException("
|
|
43
|
+
if (!service) {
|
|
44
|
+
throw new BadDataException("Service not found");
|
|
47
45
|
}
|
|
48
46
|
|
|
49
|
-
return
|
|
47
|
+
return service.retainTelemetryDataForDays || 15; // default is 15 days.
|
|
50
48
|
}
|
|
51
49
|
}
|
|
52
50
|
|
|
@@ -37,7 +37,7 @@ export class Service extends DatabaseService<Model> {
|
|
|
37
37
|
projectId: true,
|
|
38
38
|
message: true,
|
|
39
39
|
stackTrace: true,
|
|
40
|
-
|
|
40
|
+
serviceId: true,
|
|
41
41
|
exceptionType: true,
|
|
42
42
|
},
|
|
43
43
|
props,
|
|
@@ -160,9 +160,8 @@ export class Service extends DatabaseService<Model> {
|
|
|
160
160
|
metadata.errorMessage = telemetryException.message;
|
|
161
161
|
}
|
|
162
162
|
|
|
163
|
-
if (telemetryException.
|
|
164
|
-
metadata.
|
|
165
|
-
telemetryException.telemetryServiceId.toString();
|
|
163
|
+
if (telemetryException.serviceId) {
|
|
164
|
+
metadata.serviceId = telemetryException.serviceId.toString();
|
|
166
165
|
}
|
|
167
166
|
|
|
168
167
|
return metadata;
|