@oneuptime/common 9.3.8 → 9.3.10
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 +0 -5
- package/Models/DatabaseModels/MetricType.ts +7 -7
- package/Models/DatabaseModels/Service.ts +34 -8
- package/Models/DatabaseModels/TelemetryException.ts +11 -13
- package/Models/DatabaseModels/TelemetryUsageBilling.ts +11 -13
- package/Server/API/AIAgentDataAPI.ts +71 -108
- 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 +4 -0
- package/Server/Services/Index.ts +0 -5
- package/Server/Services/OpenTelemetryIngestService.ts +26 -28
- package/Server/Services/ServiceService.ts +23 -0
- 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/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/NavBar.tsx +146 -52
- package/UI/Components/Navbar/NavBarMenu.tsx +87 -7
- package/UI/Components/Navbar/NavBarMenuItem.tsx +12 -0
- 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 +0 -4
- 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/Service.js +36 -8
- package/build/dist/Models/DatabaseModels/Service.js.map +1 -1
- 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 +47 -76
- package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
- 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 +4 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Services/Index.js +0 -4
- 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/ServiceService.js +23 -0
- package/build/dist/Server/Services/ServiceService.js.map +1 -1
- 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/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/NavBar.js +58 -13
- package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBarMenu.js +37 -5
- package/build/dist/UI/Components/Navbar/NavBarMenu.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBarMenuItem.js +12 -0
- package/build/dist/UI/Components/Navbar/NavBarMenuItem.js.map +1 -1
- package/package.json +1 -1
- package/Models/DatabaseModels/ServiceTelemetryService.ts +0 -419
- package/Models/DatabaseModels/TelemetryService.ts +0 -529
- package/Server/Services/ServiceTelemetryServiceService.ts +0 -59
- package/Server/Services/TelemetryServiceService.ts +0 -53
- package/build/dist/Models/DatabaseModels/ServiceTelemetryService.js +0 -436
- package/build/dist/Models/DatabaseModels/ServiceTelemetryService.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/ServiceTelemetryServiceService.js +0 -56
- package/build/dist/Server/Services/ServiceTelemetryServiceService.js.map +0 -1
- package/build/dist/Server/Services/TelemetryServiceService.js +0 -59
- package/build/dist/Server/Services/TelemetryServiceService.js.map +0 -1
|
@@ -205,7 +205,12 @@ export default class AIAgentTask extends BaseModel {
|
|
|
205
205
|
public description?: string = undefined;
|
|
206
206
|
|
|
207
207
|
@ColumnAccessControl({
|
|
208
|
-
create: [
|
|
208
|
+
create: [
|
|
209
|
+
Permission.ProjectOwner,
|
|
210
|
+
Permission.ProjectAdmin,
|
|
211
|
+
Permission.ProjectMember,
|
|
212
|
+
Permission.CreateProjectAIAgentTask,
|
|
213
|
+
],
|
|
209
214
|
read: [
|
|
210
215
|
Permission.ProjectOwner,
|
|
211
216
|
Permission.ProjectAdmin,
|
|
@@ -242,7 +247,12 @@ export default class AIAgentTask extends BaseModel {
|
|
|
242
247
|
public aiAgent?: AIAgent = undefined;
|
|
243
248
|
|
|
244
249
|
@ColumnAccessControl({
|
|
245
|
-
create: [
|
|
250
|
+
create: [
|
|
251
|
+
Permission.ProjectOwner,
|
|
252
|
+
Permission.ProjectAdmin,
|
|
253
|
+
Permission.ProjectMember,
|
|
254
|
+
Permission.CreateProjectAIAgentTask,
|
|
255
|
+
],
|
|
246
256
|
read: [
|
|
247
257
|
Permission.ProjectOwner,
|
|
248
258
|
Permission.ProjectAdmin,
|
|
@@ -522,7 +532,12 @@ export default class AIAgentTask extends BaseModel {
|
|
|
522
532
|
public createdByUserId?: ObjectID = undefined;
|
|
523
533
|
|
|
524
534
|
@ColumnAccessControl({
|
|
525
|
-
create: [
|
|
535
|
+
create: [
|
|
536
|
+
Permission.ProjectOwner,
|
|
537
|
+
Permission.ProjectAdmin,
|
|
538
|
+
Permission.ProjectMember,
|
|
539
|
+
Permission.CreateProjectAIAgentTask,
|
|
540
|
+
],
|
|
526
541
|
read: [
|
|
527
542
|
Permission.ProjectOwner,
|
|
528
543
|
Permission.ProjectAdmin,
|
|
@@ -138,7 +138,6 @@ import Team from "./Team";
|
|
|
138
138
|
import TeamMember from "./TeamMember";
|
|
139
139
|
import TeamPermission from "./TeamPermission";
|
|
140
140
|
import TeamComplianceSetting from "./TeamComplianceSetting";
|
|
141
|
-
import TelemetryService from "./TelemetryService";
|
|
142
141
|
import UsageBilling from "./TelemetryUsageBilling";
|
|
143
142
|
import User from "./User";
|
|
144
143
|
import UserSession from "./UserSession";
|
|
@@ -159,7 +158,6 @@ import WorkflowLog from "./WorkflowLog";
|
|
|
159
158
|
import WorkflowVariables from "./WorkflowVariable";
|
|
160
159
|
import ServiceDependency from "./ServiceDependency";
|
|
161
160
|
import ServiceMonitor from "./ServiceMonitor";
|
|
162
|
-
import ServiceTelemetryService from "./ServiceTelemetryService";
|
|
163
161
|
|
|
164
162
|
import UserTotpAuth from "./UserTotpAuth";
|
|
165
163
|
import UserWebAuthn from "./UserWebAuthn";
|
|
@@ -354,8 +352,6 @@ const AllModelTypes: Array<{
|
|
|
354
352
|
MonitorGroupOwnerUser,
|
|
355
353
|
MonitorGroupResource,
|
|
356
354
|
|
|
357
|
-
TelemetryService,
|
|
358
|
-
|
|
359
355
|
OnCallDutyPolicySchedule,
|
|
360
356
|
OnCallDutyPolicyScheduleLayer,
|
|
361
357
|
OnCallDutyPolicyScheduleLayerUser,
|
|
@@ -377,7 +373,6 @@ const AllModelTypes: Array<{
|
|
|
377
373
|
ServiceOwnerUser,
|
|
378
374
|
ServiceDependency,
|
|
379
375
|
ServiceMonitor,
|
|
380
|
-
ServiceTelemetryService,
|
|
381
376
|
ServiceCodeRepository,
|
|
382
377
|
|
|
383
378
|
// Code Repository
|
|
@@ -27,7 +27,7 @@ import {
|
|
|
27
27
|
ManyToOne,
|
|
28
28
|
} from "typeorm";
|
|
29
29
|
import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
|
|
30
|
-
import
|
|
30
|
+
import Service from "./Service";
|
|
31
31
|
|
|
32
32
|
@EnableDocumentation()
|
|
33
33
|
@TenantColumn("projectId")
|
|
@@ -133,20 +133,20 @@ export default class MetricType extends BaseModel {
|
|
|
133
133
|
@TableColumn({
|
|
134
134
|
required: false,
|
|
135
135
|
type: TableColumnType.EntityArray,
|
|
136
|
-
modelType:
|
|
137
|
-
title: "
|
|
136
|
+
modelType: Service,
|
|
137
|
+
title: "Services",
|
|
138
138
|
description: "List of services this metric is related to",
|
|
139
139
|
})
|
|
140
140
|
@ManyToMany(
|
|
141
141
|
() => {
|
|
142
|
-
return
|
|
142
|
+
return Service;
|
|
143
143
|
},
|
|
144
144
|
{ eager: false },
|
|
145
145
|
)
|
|
146
146
|
@JoinTable({
|
|
147
|
-
name: "
|
|
147
|
+
name: "MetricTypeService",
|
|
148
148
|
inverseJoinColumn: {
|
|
149
|
-
name: "
|
|
149
|
+
name: "serviceId",
|
|
150
150
|
referencedColumnName: "_id",
|
|
151
151
|
},
|
|
152
152
|
joinColumn: {
|
|
@@ -154,7 +154,7 @@ export default class MetricType extends BaseModel {
|
|
|
154
154
|
referencedColumnName: "_id",
|
|
155
155
|
},
|
|
156
156
|
})
|
|
157
|
-
public
|
|
157
|
+
public services?: Array<Service> = undefined;
|
|
158
158
|
|
|
159
159
|
@ColumnAccessControl({
|
|
160
160
|
create: [
|
|
@@ -3,11 +3,9 @@ import Project from "./Project";
|
|
|
3
3
|
import User from "./User";
|
|
4
4
|
import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
|
|
5
5
|
import Route from "../../Types/API/Route";
|
|
6
|
-
import { PlanType } from "../../Types/Billing/SubscriptionPlan";
|
|
7
6
|
import Color from "../../Types/Color";
|
|
8
7
|
import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
|
|
9
8
|
import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
|
|
10
|
-
import TableBillingAccessControl from "../../Types/Database/AccessControl/TableBillingAccessControl";
|
|
11
9
|
import AccessControlColumn from "../../Types/Database/AccessControlColumn";
|
|
12
10
|
import ColumnLength from "../../Types/Database/ColumnLength";
|
|
13
11
|
import ColumnType from "../../Types/Database/ColumnType";
|
|
@@ -38,12 +36,6 @@ import {
|
|
|
38
36
|
@AccessControlColumn("labels")
|
|
39
37
|
@EnableDocumentation()
|
|
40
38
|
@TenantColumn("projectId")
|
|
41
|
-
@TableBillingAccessControl({
|
|
42
|
-
create: PlanType.Growth,
|
|
43
|
-
read: PlanType.Growth,
|
|
44
|
-
update: PlanType.Growth,
|
|
45
|
-
delete: PlanType.Growth,
|
|
46
|
-
})
|
|
47
39
|
@TableAccessControl({
|
|
48
40
|
create: [
|
|
49
41
|
Permission.ProjectOwner,
|
|
@@ -519,4 +511,38 @@ export default class Service extends BaseModel {
|
|
|
519
511
|
type: ColumnType.JSON,
|
|
520
512
|
})
|
|
521
513
|
public techStack?: Array<TechStack> = undefined;
|
|
514
|
+
|
|
515
|
+
@ColumnAccessControl({
|
|
516
|
+
create: [
|
|
517
|
+
Permission.ProjectOwner,
|
|
518
|
+
Permission.ProjectAdmin,
|
|
519
|
+
Permission.ProjectMember,
|
|
520
|
+
Permission.CreateService,
|
|
521
|
+
],
|
|
522
|
+
read: [
|
|
523
|
+
Permission.ProjectOwner,
|
|
524
|
+
Permission.ProjectAdmin,
|
|
525
|
+
Permission.ProjectMember,
|
|
526
|
+
Permission.ProjectMember,
|
|
527
|
+
Permission.ReadService,
|
|
528
|
+
],
|
|
529
|
+
update: [
|
|
530
|
+
Permission.ProjectOwner,
|
|
531
|
+
Permission.ProjectAdmin,
|
|
532
|
+
Permission.ProjectMember,
|
|
533
|
+
Permission.EditService,
|
|
534
|
+
],
|
|
535
|
+
})
|
|
536
|
+
@TableColumn({
|
|
537
|
+
type: TableColumnType.Number,
|
|
538
|
+
title: "Retain Telemetry Data For Days",
|
|
539
|
+
description: "Number of days to retain telemetry data for this service.",
|
|
540
|
+
})
|
|
541
|
+
@Column({
|
|
542
|
+
type: ColumnType.Number,
|
|
543
|
+
nullable: true,
|
|
544
|
+
unique: false,
|
|
545
|
+
default: 15,
|
|
546
|
+
})
|
|
547
|
+
public retainTelemetryDataForDays?: number = undefined;
|
|
522
548
|
}
|
|
@@ -17,7 +17,7 @@ import ObjectID from "../../Types/ObjectID";
|
|
|
17
17
|
import Permission from "../../Types/Permission";
|
|
18
18
|
import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
|
|
19
19
|
import DatabaseBaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
|
|
20
|
-
import
|
|
20
|
+
import Service from "./Service";
|
|
21
21
|
|
|
22
22
|
@EnableDocumentation()
|
|
23
23
|
@TenantColumn("projectId")
|
|
@@ -142,17 +142,16 @@ export default class TelemetryException extends DatabaseBaseModel {
|
|
|
142
142
|
],
|
|
143
143
|
})
|
|
144
144
|
@TableColumn({
|
|
145
|
-
manyToOneRelationColumn: "
|
|
145
|
+
manyToOneRelationColumn: "serviceId",
|
|
146
146
|
type: TableColumnType.Entity,
|
|
147
|
-
modelType:
|
|
148
|
-
title: "
|
|
149
|
-
description:
|
|
150
|
-
"Relation to Telemetry Service Resource in which this object belongs",
|
|
147
|
+
modelType: Service,
|
|
148
|
+
title: "Service",
|
|
149
|
+
description: "Relation to Service Resource in which this object belongs",
|
|
151
150
|
example: "d4e5f6a7-b8c9-0123-def1-234567890123",
|
|
152
151
|
})
|
|
153
152
|
@ManyToOne(
|
|
154
153
|
() => {
|
|
155
|
-
return
|
|
154
|
+
return Service;
|
|
156
155
|
},
|
|
157
156
|
{
|
|
158
157
|
eager: false,
|
|
@@ -161,8 +160,8 @@ export default class TelemetryException extends DatabaseBaseModel {
|
|
|
161
160
|
orphanedRowAction: "nullify",
|
|
162
161
|
},
|
|
163
162
|
)
|
|
164
|
-
@JoinColumn({ name: "
|
|
165
|
-
public
|
|
163
|
+
@JoinColumn({ name: "serviceId" })
|
|
164
|
+
public service?: Service = undefined;
|
|
166
165
|
|
|
167
166
|
@ColumnAccessControl({
|
|
168
167
|
create: [
|
|
@@ -186,9 +185,8 @@ export default class TelemetryException extends DatabaseBaseModel {
|
|
|
186
185
|
@TableColumn({
|
|
187
186
|
type: TableColumnType.ObjectID,
|
|
188
187
|
required: true,
|
|
189
|
-
title: "
|
|
190
|
-
description:
|
|
191
|
-
"ID of your Telemetry Service resource where this object belongs",
|
|
188
|
+
title: "Service ID",
|
|
189
|
+
description: "ID of your Service resource where this object belongs",
|
|
192
190
|
example: "d4e5f6a7-b8c9-0123-def1-234567890123",
|
|
193
191
|
})
|
|
194
192
|
@Column({
|
|
@@ -196,7 +194,7 @@ export default class TelemetryException extends DatabaseBaseModel {
|
|
|
196
194
|
nullable: false,
|
|
197
195
|
transformer: ObjectID.getDatabaseTransformer(),
|
|
198
196
|
})
|
|
199
|
-
public
|
|
197
|
+
public serviceId?: ObjectID = undefined;
|
|
200
198
|
|
|
201
199
|
@ColumnAccessControl({
|
|
202
200
|
create: [
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Project from "./Project";
|
|
2
|
-
import
|
|
2
|
+
import Service from "./Service";
|
|
3
3
|
import User from "./User";
|
|
4
4
|
import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
|
|
5
5
|
import Route from "../../Types/API/Route";
|
|
@@ -256,17 +256,16 @@ export default class TelemetryUsageBilling extends BaseModel {
|
|
|
256
256
|
update: [],
|
|
257
257
|
})
|
|
258
258
|
@TableColumn({
|
|
259
|
-
manyToOneRelationColumn: "
|
|
259
|
+
manyToOneRelationColumn: "serviceId",
|
|
260
260
|
type: TableColumnType.Entity,
|
|
261
|
-
modelType:
|
|
262
|
-
title: "
|
|
263
|
-
description:
|
|
264
|
-
"Relation to Telemetry Service Resource in which this object belongs",
|
|
261
|
+
modelType: Service,
|
|
262
|
+
title: "Service",
|
|
263
|
+
description: "Relation to Service Resource in which this object belongs",
|
|
265
264
|
example: "d4e5f6a7-b8c9-0123-def1-234567890123",
|
|
266
265
|
})
|
|
267
266
|
@ManyToOne(
|
|
268
267
|
() => {
|
|
269
|
-
return
|
|
268
|
+
return Service;
|
|
270
269
|
},
|
|
271
270
|
{
|
|
272
271
|
eager: false,
|
|
@@ -275,8 +274,8 @@ export default class TelemetryUsageBilling extends BaseModel {
|
|
|
275
274
|
orphanedRowAction: "nullify",
|
|
276
275
|
},
|
|
277
276
|
)
|
|
278
|
-
@JoinColumn({ name: "
|
|
279
|
-
public
|
|
277
|
+
@JoinColumn({ name: "serviceId" })
|
|
278
|
+
public service?: Service = undefined;
|
|
280
279
|
|
|
281
280
|
@ColumnAccessControl({
|
|
282
281
|
create: [],
|
|
@@ -291,9 +290,8 @@ export default class TelemetryUsageBilling extends BaseModel {
|
|
|
291
290
|
@TableColumn({
|
|
292
291
|
type: TableColumnType.ObjectID,
|
|
293
292
|
required: true,
|
|
294
|
-
title: "
|
|
295
|
-
description:
|
|
296
|
-
"ID of your Telemetry Service resource where this object belongs",
|
|
293
|
+
title: "Service ID",
|
|
294
|
+
description: "ID of your Service resource where this object belongs",
|
|
297
295
|
example: "d4e5f6a7-b8c9-0123-def1-234567890123",
|
|
298
296
|
})
|
|
299
297
|
@Column({
|
|
@@ -301,7 +299,7 @@ export default class TelemetryUsageBilling extends BaseModel {
|
|
|
301
299
|
nullable: false,
|
|
302
300
|
transformer: ObjectID.getDatabaseTransformer(),
|
|
303
301
|
})
|
|
304
|
-
public
|
|
302
|
+
public serviceId?: ObjectID = undefined;
|
|
305
303
|
|
|
306
304
|
@ColumnAccessControl({
|
|
307
305
|
create: [],
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import AIAgentService from "../Services/AIAgentService";
|
|
2
2
|
import LlmProviderService from "../Services/LlmProviderService";
|
|
3
3
|
import TelemetryExceptionService from "../Services/TelemetryExceptionService";
|
|
4
|
-
import ServiceTelemetryServiceService from "../Services/ServiceTelemetryServiceService";
|
|
5
4
|
import ServiceCodeRepositoryService from "../Services/ServiceCodeRepositoryService";
|
|
6
5
|
import CodeRepositoryService from "../Services/CodeRepositoryService";
|
|
7
6
|
import AIAgentTaskPullRequestService from "../Services/AIAgentTaskPullRequestService";
|
|
@@ -16,7 +15,6 @@ import Response from "../Utils/Response";
|
|
|
16
15
|
import AIAgent from "../../Models/DatabaseModels/AIAgent";
|
|
17
16
|
import LlmProvider from "../../Models/DatabaseModels/LlmProvider";
|
|
18
17
|
import TelemetryException from "../../Models/DatabaseModels/TelemetryException";
|
|
19
|
-
import ServiceTelemetryService from "../../Models/DatabaseModels/ServiceTelemetryService";
|
|
20
18
|
import ServiceCodeRepository from "../../Models/DatabaseModels/ServiceCodeRepository";
|
|
21
19
|
import CodeRepository from "../../Models/DatabaseModels/CodeRepository";
|
|
22
20
|
import AIAgentTaskPullRequest from "../../Models/DatabaseModels/AIAgentTaskPullRequest";
|
|
@@ -164,7 +162,7 @@ export default class AIAgentDataAPI {
|
|
|
164
162
|
data["exceptionId"] as string,
|
|
165
163
|
);
|
|
166
164
|
|
|
167
|
-
// Get exception with
|
|
165
|
+
// Get exception with service
|
|
168
166
|
const exception: TelemetryException | null =
|
|
169
167
|
await TelemetryExceptionService.findOneById({
|
|
170
168
|
id: exceptionId,
|
|
@@ -174,8 +172,8 @@ export default class AIAgentDataAPI {
|
|
|
174
172
|
stackTrace: true,
|
|
175
173
|
exceptionType: true,
|
|
176
174
|
fingerprint: true,
|
|
177
|
-
|
|
178
|
-
|
|
175
|
+
serviceId: true,
|
|
176
|
+
service: {
|
|
179
177
|
_id: true,
|
|
180
178
|
name: true,
|
|
181
179
|
description: true,
|
|
@@ -206,11 +204,11 @@ export default class AIAgentDataAPI {
|
|
|
206
204
|
exceptionType: exception.exceptionType,
|
|
207
205
|
fingerprint: exception.fingerprint,
|
|
208
206
|
},
|
|
209
|
-
|
|
207
|
+
service: exception.serviceId
|
|
210
208
|
? {
|
|
211
|
-
id: exception.
|
|
212
|
-
name: exception.
|
|
213
|
-
description: exception.
|
|
209
|
+
id: exception.serviceId.toString(),
|
|
210
|
+
name: exception.service?.name,
|
|
211
|
+
description: exception.service?.description,
|
|
214
212
|
}
|
|
215
213
|
: null,
|
|
216
214
|
});
|
|
@@ -220,7 +218,7 @@ export default class AIAgentDataAPI {
|
|
|
220
218
|
},
|
|
221
219
|
);
|
|
222
220
|
|
|
223
|
-
// Get code repositories linked to a
|
|
221
|
+
// Get code repositories linked to a service
|
|
224
222
|
this.router.post(
|
|
225
223
|
"/ai-agent-data/get-code-repositories",
|
|
226
224
|
async (
|
|
@@ -242,54 +240,22 @@ export default class AIAgentDataAPI {
|
|
|
242
240
|
);
|
|
243
241
|
}
|
|
244
242
|
|
|
245
|
-
// Get
|
|
246
|
-
|
|
243
|
+
// Get service ID (supports both serviceId and legacy telemetryServiceId)
|
|
244
|
+
const serviceIdParam: string | undefined =
|
|
245
|
+
(data["serviceId"] as string) ||
|
|
246
|
+
(data["telemetryServiceId"] as string);
|
|
247
|
+
|
|
248
|
+
if (!serviceIdParam) {
|
|
247
249
|
return Response.sendErrorResponse(
|
|
248
250
|
req,
|
|
249
251
|
res,
|
|
250
|
-
new BadDataException("
|
|
251
|
-
);
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
const telemetryServiceId: ObjectID = new ObjectID(
|
|
255
|
-
data["telemetryServiceId"] as string,
|
|
256
|
-
);
|
|
257
|
-
|
|
258
|
-
// Step 1: Find Services linked to this TelemetryService
|
|
259
|
-
const serviceTelemetryServices: Array<ServiceTelemetryService> =
|
|
260
|
-
await ServiceTelemetryServiceService.findBy({
|
|
261
|
-
query: {
|
|
262
|
-
telemetryServiceId: telemetryServiceId,
|
|
263
|
-
},
|
|
264
|
-
select: {
|
|
265
|
-
serviceId: true,
|
|
266
|
-
},
|
|
267
|
-
skip: 0,
|
|
268
|
-
limit: LIMIT_MAX,
|
|
269
|
-
props: {
|
|
270
|
-
isRoot: true,
|
|
271
|
-
},
|
|
272
|
-
});
|
|
273
|
-
|
|
274
|
-
if (serviceTelemetryServices.length === 0) {
|
|
275
|
-
logger.debug(
|
|
276
|
-
`No services found for telemetry service ${telemetryServiceId.toString()}`,
|
|
252
|
+
new BadDataException("serviceId is required"),
|
|
277
253
|
);
|
|
278
|
-
return Response.sendJsonObjectResponse(req, res, {
|
|
279
|
-
repositories: [],
|
|
280
|
-
});
|
|
281
254
|
}
|
|
282
255
|
|
|
283
|
-
|
|
284
|
-
const serviceIds: Array<ObjectID> = serviceTelemetryServices
|
|
285
|
-
.filter((s: ServiceTelemetryService) => {
|
|
286
|
-
return s.serviceId;
|
|
287
|
-
})
|
|
288
|
-
.map((s: ServiceTelemetryService) => {
|
|
289
|
-
return s.serviceId as ObjectID;
|
|
290
|
-
});
|
|
256
|
+
const serviceId: ObjectID = new ObjectID(serviceIdParam);
|
|
291
257
|
|
|
292
|
-
//
|
|
258
|
+
// Find CodeRepositories linked to this Service
|
|
293
259
|
const repositories: Array<{
|
|
294
260
|
id: string;
|
|
295
261
|
name: string;
|
|
@@ -301,70 +267,67 @@ export default class AIAgentDataAPI {
|
|
|
301
267
|
gitHubAppInstallationId: string | null;
|
|
302
268
|
}> = [];
|
|
303
269
|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
gitHubAppInstallationId: true,
|
|
321
|
-
},
|
|
270
|
+
const serviceCodeRepositories: Array<ServiceCodeRepository> =
|
|
271
|
+
await ServiceCodeRepositoryService.findBy({
|
|
272
|
+
query: {
|
|
273
|
+
serviceId: serviceId,
|
|
274
|
+
},
|
|
275
|
+
select: {
|
|
276
|
+
codeRepositoryId: true,
|
|
277
|
+
servicePathInRepository: true,
|
|
278
|
+
codeRepository: {
|
|
279
|
+
_id: true,
|
|
280
|
+
name: true,
|
|
281
|
+
repositoryHostedAt: true,
|
|
282
|
+
organizationName: true,
|
|
283
|
+
repositoryName: true,
|
|
284
|
+
mainBranchName: true,
|
|
285
|
+
gitHubAppInstallationId: true,
|
|
322
286
|
},
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
287
|
+
},
|
|
288
|
+
skip: 0,
|
|
289
|
+
limit: LIMIT_MAX,
|
|
290
|
+
props: {
|
|
291
|
+
isRoot: true,
|
|
292
|
+
},
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
for (const scr of serviceCodeRepositories) {
|
|
296
|
+
if (scr.codeRepository) {
|
|
297
|
+
// Check if we already have this repository
|
|
298
|
+
const existingRepo: boolean = repositories.some(
|
|
299
|
+
(r: {
|
|
300
|
+
id: string;
|
|
301
|
+
name: string;
|
|
302
|
+
repositoryHostedAt: string;
|
|
303
|
+
organizationName: string;
|
|
304
|
+
repositoryName: string;
|
|
305
|
+
mainBranchName: string;
|
|
306
|
+
servicePathInRepository: string | null;
|
|
307
|
+
gitHubAppInstallationId: string | null;
|
|
308
|
+
}) => {
|
|
309
|
+
return r.id === scr.codeRepository?._id?.toString();
|
|
327
310
|
},
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
gitHubAppInstallationId: string | null;
|
|
343
|
-
}) => {
|
|
344
|
-
return r.id === scr.codeRepository?._id?.toString();
|
|
345
|
-
},
|
|
346
|
-
);
|
|
347
|
-
if (!existingRepo) {
|
|
348
|
-
repositories.push({
|
|
349
|
-
id: scr.codeRepository._id?.toString() || "",
|
|
350
|
-
name: scr.codeRepository.name || "",
|
|
351
|
-
repositoryHostedAt:
|
|
352
|
-
scr.codeRepository.repositoryHostedAt || "",
|
|
353
|
-
organizationName: scr.codeRepository.organizationName || "",
|
|
354
|
-
repositoryName: scr.codeRepository.repositoryName || "",
|
|
355
|
-
mainBranchName: scr.codeRepository.mainBranchName || "main",
|
|
356
|
-
servicePathInRepository:
|
|
357
|
-
scr.servicePathInRepository || null,
|
|
358
|
-
gitHubAppInstallationId:
|
|
359
|
-
scr.codeRepository.gitHubAppInstallationId || null,
|
|
360
|
-
});
|
|
361
|
-
}
|
|
311
|
+
);
|
|
312
|
+
if (!existingRepo) {
|
|
313
|
+
repositories.push({
|
|
314
|
+
id: scr.codeRepository._id?.toString() || "",
|
|
315
|
+
name: scr.codeRepository.name || "",
|
|
316
|
+
repositoryHostedAt:
|
|
317
|
+
scr.codeRepository.repositoryHostedAt || "",
|
|
318
|
+
organizationName: scr.codeRepository.organizationName || "",
|
|
319
|
+
repositoryName: scr.codeRepository.repositoryName || "",
|
|
320
|
+
mainBranchName: scr.codeRepository.mainBranchName || "main",
|
|
321
|
+
servicePathInRepository: scr.servicePathInRepository || null,
|
|
322
|
+
gitHubAppInstallationId:
|
|
323
|
+
scr.codeRepository.gitHubAppInstallationId || null,
|
|
324
|
+
});
|
|
362
325
|
}
|
|
363
326
|
}
|
|
364
327
|
}
|
|
365
328
|
|
|
366
329
|
logger.debug(
|
|
367
|
-
`Found ${repositories.length} code repositories for
|
|
330
|
+
`Found ${repositories.length} code repositories for service ${serviceId.toString()}`,
|
|
368
331
|
);
|
|
369
332
|
|
|
370
333
|
return Response.sendJsonObjectResponse(req, res, {
|