From e7089e9e854eb9241eb148d5f596d39cba0ad989 Mon Sep 17 00:00:00 2001 From: Nawaz Dhandala Date: Fri, 9 Jan 2026 15:49:52 +0000 Subject: [PATCH] Refactor TelemetryService to Service across the application - Replaced all instances of TelemetryService with Service in components, pages, and utilities. - Updated related imports and state management to reflect the new Service model. - Removed the TelemetryServices view and associated routes, as it is no longer needed. - Adjusted breadcrumb and route mappings to remove references to Telemetry Services. - Ensured that all relevant functionality, such as logs and metrics, now utilize the Service model. --- AIAgent/Utils/BackendAPI.ts | 22 +- App/FeatureSet/BaseAPI/Index.ts | 25 - Common/Models/DatabaseModels/Index.ts | 5 - Common/Models/DatabaseModels/MetricType.ts | 14 +- Common/Models/DatabaseModels/Service.ts | 42 +- .../DatabaseModels/ServiceTelemetryService.ts | 419 -------------- .../DatabaseModels/TelemetryException.ts | 24 +- .../Models/DatabaseModels/TelemetryService.ts | 529 ------------------ .../DatabaseModels/TelemetryUsageBilling.ts | 24 +- Common/Server/API/AIAgentDataAPI.ts | 179 +++--- Common/Server/Services/Index.ts | 5 - .../Services/OpenTelemetryIngestService.ts | 46 +- Common/Server/Services/ServiceService.ts | 23 + .../ServiceTelemetryServiceService.ts | 59 -- .../Services/TelemetryServiceService.ts | 53 -- .../Services/TelemetryUsageBillingService.ts | 36 +- Common/Server/Utils/Telemetry/Telemetry.ts | 44 +- .../UI/Components/LogsViewer/LogsViewer.tsx | 18 +- .../LogsViewer/components/LogDetailsPanel.tsx | 6 +- .../LogsViewer/components/LogsTable.tsx | 6 +- .../Components/Exceptions/ExceptionDetail.tsx | 8 +- .../Components/Exceptions/ExceptionsTable.tsx | 12 +- .../ExceptionMonitorStepForm.tsx | 6 +- .../Monitor/LogMonitor/LogMonitorStepFrom.tsx | 6 +- .../Components/Form/Monitor/MonitorStep.tsx | 22 +- .../TraceMonitor/TraceMonitorStepForm.tsx | 6 +- Dashboard/src/Components/Logs/LogsViewer.tsx | 8 +- .../src/Components/Metrics/MetricsTable.tsx | 46 +- .../Monitor/MonitorSteps/MonitorStep.tsx | 28 +- Dashboard/src/Components/Span/SpanViewer.tsx | 8 +- .../TelemetryServiceElement.tsx | 4 +- .../TelemetryServiceElements.tsx | 6 +- .../TelemetryServiceTable.tsx | 10 +- .../src/Components/Traces/TraceExplorer.tsx | 46 +- .../src/Components/Traces/TraceTable.tsx | 28 +- Dashboard/src/Pages/Service/View/Logs.tsx | 75 +-- Dashboard/src/Pages/Service/View/Metrics.tsx | 74 +-- Dashboard/src/Pages/Service/View/SideMenu.tsx | 11 - .../Pages/Service/View/TelemetryServices.tsx | 252 --------- Dashboard/src/Pages/Service/View/Traces.tsx | 76 +-- Dashboard/src/Pages/Settings/UsageHistory.tsx | 10 +- Dashboard/src/Pages/Telemetry/Logs.tsx | 2 +- .../Pages/Telemetry/Services/View/Delete.tsx | 4 +- .../Pages/Telemetry/Services/View/Index.tsx | 8 +- .../Pages/Telemetry/Services/View/Layout.tsx | 8 +- .../Telemetry/Services/View/Logs/Index.tsx | 2 +- .../Telemetry/Services/View/Metrics/Index.tsx | 26 +- .../Telemetry/Services/View/Settings.tsx | 6 +- Dashboard/src/Routes/ServiceRoutes.tsx | 22 - .../Utils/Breadcrumbs/ServiceBreadcrumbs.ts | 6 - Dashboard/src/Utils/PageMap.ts | 1 - Dashboard/src/Utils/RouteMap.ts | 7 - Dashboard/src/Utils/SpanUtil.ts | 8 +- .../Services/OtelMetricsIngestService.ts | 22 +- Worker/Jobs/TelemetryService/DeleteOldData.ts | 37 +- 55 files changed, 437 insertions(+), 2043 deletions(-) delete mode 100644 Common/Models/DatabaseModels/ServiceTelemetryService.ts delete mode 100644 Common/Models/DatabaseModels/TelemetryService.ts delete mode 100644 Common/Server/Services/ServiceTelemetryServiceService.ts delete mode 100644 Common/Server/Services/TelemetryServiceService.ts delete mode 100644 Dashboard/src/Pages/Service/View/TelemetryServices.tsx diff --git a/AIAgent/Utils/BackendAPI.ts b/AIAgent/Utils/BackendAPI.ts index c72ebc5d09..70bfb93f68 100644 --- a/AIAgent/Utils/BackendAPI.ts +++ b/AIAgent/Utils/BackendAPI.ts @@ -25,7 +25,7 @@ interface ExceptionResponse { fingerprint: string; } -interface TelemetryServiceResponse { +interface ServiceResponse { id: string; name: string; description: string; @@ -33,7 +33,7 @@ interface TelemetryServiceResponse { interface ExceptionDetailsResponse { exception: ExceptionResponse; - telemetryService: TelemetryServiceResponse | null; + service: ServiceResponse | null; message?: string; } @@ -89,7 +89,7 @@ export interface ExceptionDetails { exceptionType: string; fingerprint: string; }; - telemetryService: { + service: { id: string; name: string; description: string; @@ -223,19 +223,19 @@ export default class BackendAPI { exceptionType: data.exception.exceptionType, fingerprint: data.exception.fingerprint, }, - telemetryService: data.telemetryService + service: data.service ? { - id: data.telemetryService.id, - name: data.telemetryService.name, - description: data.telemetryService.description, + id: data.service.id, + name: data.service.name, + description: data.service.description, } : null, }; } - // Get code repositories linked to a telemetry service + // Get code repositories linked to a service public async getCodeRepositories( - telemetryServiceId: string, + serviceId: string, ): Promise> { const url: URL = URL.fromURL(this.baseUrl).addRoute( "/api/ai-agent-data/get-code-repositories", @@ -245,7 +245,7 @@ export default class BackendAPI { url, data: { ...AIAgentAPIRequest.getDefaultRequestBody(), - telemetryServiceId: telemetryServiceId, + serviceId: serviceId, }, }); @@ -261,7 +261,7 @@ export default class BackendAPI { response.data as unknown as CodeRepositoriesResponse; logger.debug( - `Got ${data.repositories.length} code repositories for telemetry service ${telemetryServiceId}`, + `Got ${data.repositories.length} code repositories for service ${serviceId}`, ); return data.repositories.map((repo: CodeRepositoryResponse) => { diff --git a/App/FeatureSet/BaseAPI/Index.ts b/App/FeatureSet/BaseAPI/Index.ts index ba2180c25f..330ada6806 100644 --- a/App/FeatureSet/BaseAPI/Index.ts +++ b/App/FeatureSet/BaseAPI/Index.ts @@ -264,11 +264,6 @@ import ServiceMonitorService, { Service as ServiceMonitorServiceType, } from "Common/Server/Services/ServiceMonitorService"; -import ServiceTelemetryService from "Common/Models/DatabaseModels/ServiceTelemetryService"; -import ServiceTelemetryServiceService, { - Service as ServiceTelemetryServiceServiceType, -} from "Common/Server/Services/ServiceTelemetryServiceService"; - import ServiceCodeRepository from "Common/Models/DatabaseModels/ServiceCodeRepository"; import ServiceCodeRepositoryService, { Service as ServiceCodeRepositoryServiceType, @@ -329,9 +324,6 @@ import TeamComplianceSettingService, { import TeamService, { Service as TeamServiceType, } from "Common/Server/Services/TeamService"; -import TelemetryServiceService, { - Service as TelemetryServiceServiceType, -} from "Common/Server/Services/TelemetryServiceService"; import TelemetryUsageBillingService, { Service as TelemetryUsageBillingServiceType, } from "Common/Server/Services/TelemetryUsageBillingService"; @@ -472,7 +464,6 @@ import Team from "Common/Models/DatabaseModels/Team"; import TeamMember from "Common/Models/DatabaseModels/TeamMember"; import TeamPermission from "Common/Models/DatabaseModels/TeamPermission"; import TeamComplianceSetting from "Common/Models/DatabaseModels/TeamComplianceSetting"; -import TelemetryService from "Common/Models/DatabaseModels/TelemetryService"; import TelemetryUsageBilling from "Common/Models/DatabaseModels/TelemetryUsageBilling"; import UserNotificationRule from "Common/Models/DatabaseModels/UserNotificationRule"; import UserNotificationSetting from "Common/Models/DatabaseModels/UserNotificationSetting"; @@ -1012,14 +1003,6 @@ const BaseAPIFeatureSet: FeatureSet = { ).getRouter(), ); - app.use( - `/${APP_NAME.toLocaleLowerCase()}`, - new BaseAPI( - ServiceTelemetryService, - ServiceTelemetryServiceService, - ).getRouter(), - ); - app.use( `/${APP_NAME.toLocaleLowerCase()}`, new BaseAPI( @@ -1231,14 +1214,6 @@ const BaseAPIFeatureSet: FeatureSet = { ).getRouter(), ); - app.use( - `/${APP_NAME.toLocaleLowerCase()}`, - new BaseAPI( - TelemetryService, - TelemetryServiceService, - ).getRouter(), - ); - app.use( `/${APP_NAME.toLocaleLowerCase()}`, new BaseAPI( diff --git a/Common/Models/DatabaseModels/Index.ts b/Common/Models/DatabaseModels/Index.ts index 6a0adec11f..a01a3d95ba 100644 --- a/Common/Models/DatabaseModels/Index.ts +++ b/Common/Models/DatabaseModels/Index.ts @@ -138,7 +138,6 @@ import Team from "./Team"; import TeamMember from "./TeamMember"; import TeamPermission from "./TeamPermission"; import TeamComplianceSetting from "./TeamComplianceSetting"; -import TelemetryService from "./TelemetryService"; import UsageBilling from "./TelemetryUsageBilling"; import User from "./User"; import UserSession from "./UserSession"; @@ -159,7 +158,6 @@ import WorkflowLog from "./WorkflowLog"; import WorkflowVariables from "./WorkflowVariable"; import ServiceDependency from "./ServiceDependency"; import ServiceMonitor from "./ServiceMonitor"; -import ServiceTelemetryService from "./ServiceTelemetryService"; import UserTotpAuth from "./UserTotpAuth"; import UserWebAuthn from "./UserWebAuthn"; @@ -354,8 +352,6 @@ const AllModelTypes: Array<{ MonitorGroupOwnerUser, MonitorGroupResource, - TelemetryService, - OnCallDutyPolicySchedule, OnCallDutyPolicyScheduleLayer, OnCallDutyPolicyScheduleLayerUser, @@ -377,7 +373,6 @@ const AllModelTypes: Array<{ ServiceOwnerUser, ServiceDependency, ServiceMonitor, - ServiceTelemetryService, ServiceCodeRepository, // Code Repository diff --git a/Common/Models/DatabaseModels/MetricType.ts b/Common/Models/DatabaseModels/MetricType.ts index ec21562ad4..f45c92fb7f 100644 --- a/Common/Models/DatabaseModels/MetricType.ts +++ b/Common/Models/DatabaseModels/MetricType.ts @@ -27,7 +27,7 @@ import { ManyToOne, } from "typeorm"; import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel"; -import TelemetryService from "./TelemetryService"; +import Service from "./Service"; @EnableDocumentation() @TenantColumn("projectId") @@ -133,20 +133,20 @@ export default class MetricType extends BaseModel { @TableColumn({ required: false, type: TableColumnType.EntityArray, - modelType: TelemetryService, - title: "Telemetry Services", + modelType: Service, + title: "Services", description: "List of services this metric is related to", }) @ManyToMany( () => { - return TelemetryService; + return Service; }, { eager: false }, ) @JoinTable({ - name: "MetricTypeTelemetryService", + name: "MetricTypeService", inverseJoinColumn: { - name: "telemetryServiceId", + name: "serviceId", referencedColumnName: "_id", }, joinColumn: { @@ -154,7 +154,7 @@ export default class MetricType extends BaseModel { referencedColumnName: "_id", }, }) - public telemetryServices?: Array = undefined; + public services?: Array = undefined; @ColumnAccessControl({ create: [ diff --git a/Common/Models/DatabaseModels/Service.ts b/Common/Models/DatabaseModels/Service.ts index 10b4455862..237e4829d1 100644 --- a/Common/Models/DatabaseModels/Service.ts +++ b/Common/Models/DatabaseModels/Service.ts @@ -3,11 +3,9 @@ import Project from "./Project"; import User from "./User"; import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel"; import Route from "../../Types/API/Route"; -import { PlanType } from "../../Types/Billing/SubscriptionPlan"; import Color from "../../Types/Color"; import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl"; import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl"; -import TableBillingAccessControl from "../../Types/Database/AccessControl/TableBillingAccessControl"; import AccessControlColumn from "../../Types/Database/AccessControlColumn"; import ColumnLength from "../../Types/Database/ColumnLength"; import ColumnType from "../../Types/Database/ColumnType"; @@ -38,12 +36,6 @@ import { @AccessControlColumn("labels") @EnableDocumentation() @TenantColumn("projectId") -@TableBillingAccessControl({ - create: PlanType.Growth, - read: PlanType.Growth, - update: PlanType.Growth, - delete: PlanType.Growth, -}) @TableAccessControl({ create: [ Permission.ProjectOwner, @@ -519,4 +511,38 @@ export default class Service extends BaseModel { type: ColumnType.JSON, }) public techStack?: Array = undefined; + + @ColumnAccessControl({ + create: [ + Permission.ProjectOwner, + Permission.ProjectAdmin, + Permission.ProjectMember, + Permission.CreateService, + ], + read: [ + Permission.ProjectOwner, + Permission.ProjectAdmin, + Permission.ProjectMember, + Permission.ProjectMember, + Permission.ReadService, + ], + update: [ + Permission.ProjectOwner, + Permission.ProjectAdmin, + Permission.ProjectMember, + Permission.EditService, + ], + }) + @TableColumn({ + type: TableColumnType.Number, + title: "Retain Telemetry Data For Days", + description: "Number of days to retain telemetry data for this service.", + }) + @Column({ + type: ColumnType.Number, + nullable: true, + unique: false, + default: 15, + }) + public retainTelemetryDataForDays?: number = undefined; } diff --git a/Common/Models/DatabaseModels/ServiceTelemetryService.ts b/Common/Models/DatabaseModels/ServiceTelemetryService.ts deleted file mode 100644 index 42b38a02bd..0000000000 --- a/Common/Models/DatabaseModels/ServiceTelemetryService.ts +++ /dev/null @@ -1,419 +0,0 @@ -import Project from "./Project"; -import User from "./User"; -import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel"; -import Route from "../../Types/API/Route"; -import { PlanType } from "../../Types/Billing/SubscriptionPlan"; -import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl"; -import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl"; -import TableBillingAccessControl from "../../Types/Database/AccessControl/TableBillingAccessControl"; -import CanAccessIfCanReadOn from "../../Types/Database/CanAccessIfCanReadOn"; -import ColumnType from "../../Types/Database/ColumnType"; -import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint"; -import EnableDocumentation from "../../Types/Database/EnableDocumentation"; -import EnableWorkflow from "../../Types/Database/EnableWorkflow"; -import SlugifyColumn from "../../Types/Database/SlugifyColumn"; -import TableColumn from "../../Types/Database/TableColumn"; -import TableColumnType from "../../Types/Database/TableColumnType"; -import TableMetadata from "../../Types/Database/TableMetadata"; -import TenantColumn from "../../Types/Database/TenantColumn"; -import IconProp from "../../Types/Icon/IconProp"; -import ObjectID from "../../Types/ObjectID"; -import Permission from "../../Types/Permission"; -import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm"; -import Service from "./Service"; -import TelemetryService from "./TelemetryService"; - -@CanAccessIfCanReadOn("serviceId") -@EnableDocumentation() -@TenantColumn("projectId") -@TableBillingAccessControl({ - create: PlanType.Growth, - read: PlanType.Growth, - update: PlanType.Growth, - delete: PlanType.Growth, -}) -@TableAccessControl({ - create: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.CreateServiceTelemetryService, - ], - read: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.ProjectMember, - Permission.ReadServiceTelemetryService, - ], - delete: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.DeleteServiceTelemetryService, - ], - update: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.EditServiceTelemetryService, - ], -}) -@EnableWorkflow({ - create: true, - delete: true, - update: true, - read: true, -}) -@CrudApiEndpoint(new Route("/service-telemetry-service")) -@SlugifyColumn("name", "slug") -@TableMetadata({ - tableName: "ServiceTelemetryService", - singularName: "Service Telemetry Service", - pluralName: "Service Telemetry Services", - icon: IconProp.SquareStack, - tableDescription: "List of telemetry service - service relationship.", -}) -@Entity({ - name: "ServiceTelemetryService", -}) -export default class ServiceTelemetryService extends BaseModel { - @ColumnAccessControl({ - create: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.CreateServiceTelemetryService, - ], - read: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.ProjectMember, - Permission.ReadServiceTelemetryService, - ], - update: [], - }) - @TableColumn({ - manyToOneRelationColumn: "projectId", - type: TableColumnType.Entity, - modelType: Project, - title: "Project", - description: "Relation to Project Resource in which this object belongs", - example: "5f8b9c0d-e1a2-4b3c-8d5e-6f7a8b9c0d1e", - }) - @ManyToOne( - () => { - return Project; - }, - { - eager: false, - nullable: true, - onDelete: "CASCADE", - orphanedRowAction: "nullify", - }, - ) - @JoinColumn({ name: "projectId" }) - public project?: Project = undefined; - - @ColumnAccessControl({ - create: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.CreateServiceTelemetryService, - ], - read: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.ProjectMember, - Permission.ReadServiceTelemetryService, - ], - update: [], - }) - @Index() - @TableColumn({ - type: TableColumnType.ObjectID, - required: true, - canReadOnRelationQuery: true, - title: "Project ID", - description: "ID of your OneUptime Project in which this object belongs", - example: "5f8b9c0d-e1a2-4b3c-8d5e-6f7a8b9c0d1e", - }) - @Column({ - type: ColumnType.ObjectID, - nullable: false, - transformer: ObjectID.getDatabaseTransformer(), - }) - public projectId?: ObjectID = undefined; - - @ColumnAccessControl({ - create: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.CreateServiceTelemetryService, - ], - read: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.ProjectMember, - Permission.ReadServiceTelemetryService, - ], - update: [], - }) - @TableColumn({ - manyToOneRelationColumn: "serviceId", - type: TableColumnType.Entity, - modelType: Service, - title: "Service", - description: "Relation to Service Resource in which this object belongs", - example: "f6a7b8c9-d0e1-2345-fa67-bc89de012345", - }) - @ManyToOne( - () => { - return Service; - }, - { - eager: false, - nullable: true, - onDelete: "CASCADE", - orphanedRowAction: "nullify", - }, - ) - @JoinColumn({ name: "serviceId" }) - public service?: Service = undefined; - - @ColumnAccessControl({ - create: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.CreateServiceTelemetryService, - ], - read: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.ProjectMember, - Permission.ReadServiceTelemetryService, - ], - update: [], - }) - @Index() - @TableColumn({ - type: TableColumnType.ObjectID, - required: true, - canReadOnRelationQuery: true, - title: "Service ID", - description: "ID of your OneUptime Service in which this object belongs", - example: "f6a7b8c9-d0e1-2345-fa67-bc89de012345", - }) - @Column({ - type: ColumnType.ObjectID, - nullable: false, - transformer: ObjectID.getDatabaseTransformer(), - }) - public serviceId?: ObjectID = undefined; - - @ColumnAccessControl({ - create: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.CreateServiceTelemetryService, - ], - read: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.ProjectMember, - Permission.ReadServiceTelemetryService, - ], - update: [], - }) - @TableColumn({ - manyToOneRelationColumn: "telemetryServiceId", - type: TableColumnType.Entity, - modelType: TelemetryService, - title: "TelemetryService", - description: "Relation to TelemetryService in which this object belongs", - example: "c9d0e1f2-a3b4-5678-cd90-ef12ab345678", - }) - @ManyToOne( - () => { - return TelemetryService; - }, - { - eager: false, - nullable: true, - onDelete: "CASCADE", - orphanedRowAction: "nullify", - }, - ) - @JoinColumn({ name: "telemetryServiceId" }) - public telemetryService?: TelemetryService = undefined; - - @ColumnAccessControl({ - create: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.CreateServiceTelemetryService, - ], - read: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.ProjectMember, - Permission.ReadServiceTelemetryService, - ], - update: [], - }) - @Index() - @TableColumn({ - type: TableColumnType.ObjectID, - required: true, - canReadOnRelationQuery: true, - title: "TelemetryService ID", - description: "ID of your TelemetryServicein which this object belongs", - example: "c9d0e1f2-a3b4-5678-cd90-ef12ab345678", - }) - @Column({ - type: ColumnType.ObjectID, - nullable: false, - transformer: ObjectID.getDatabaseTransformer(), - }) - public telemetryServiceId?: ObjectID = undefined; - - @ColumnAccessControl({ - create: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.CreateServiceTelemetryService, - ], - read: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.ProjectMember, - Permission.ReadServiceTelemetryService, - ], - update: [], - }) - @TableColumn({ - manyToOneRelationColumn: "createdByUserId", - type: TableColumnType.Entity, - modelType: User, - title: "Created by User", - description: - "Relation to User who created this object (if this object was created by a User)", - example: "c3d4e5f6-a7b8-9012-cd34-ef56ab789012", - }) - @ManyToOne( - () => { - return User; - }, - { - eager: false, - nullable: true, - onDelete: "SET NULL", - orphanedRowAction: "nullify", - }, - ) - @JoinColumn({ name: "createdByUserId" }) - public createdByUser?: User = undefined; - - @ColumnAccessControl({ - create: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.CreateServiceTelemetryService, - ], - read: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.ProjectMember, - Permission.ReadServiceTelemetryService, - ], - update: [], - }) - @TableColumn({ - type: TableColumnType.ObjectID, - title: "Created by User ID", - description: - "User ID who created this object (if this object was created by a User)", - example: "c3d4e5f6-a7b8-9012-cd34-ef56ab789012", - }) - @Column({ - type: ColumnType.ObjectID, - nullable: true, - transformer: ObjectID.getDatabaseTransformer(), - }) - public createdByUserId?: ObjectID = undefined; - - @ColumnAccessControl({ - create: [], - read: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.ProjectMember, - Permission.ReadServiceTelemetryService, - ], - update: [], - }) - @TableColumn({ - manyToOneRelationColumn: "deletedByUserId", - type: TableColumnType.Entity, - title: "Deleted by User", - modelType: User, - description: - "Relation to User who deleted this object (if this object was deleted by a User)", - example: "d4e5f6a7-b8c9-0123-de45-fa67bc890123", - }) - @ManyToOne( - () => { - return User; - }, - { - cascade: false, - eager: false, - nullable: true, - onDelete: "SET NULL", - orphanedRowAction: "nullify", - }, - ) - @JoinColumn({ name: "deletedByUserId" }) - public deletedByUser?: User = undefined; - - @ColumnAccessControl({ - create: [], - read: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.ProjectMember, - Permission.ReadServiceTelemetryService, - ], - update: [], - }) - @TableColumn({ - type: TableColumnType.ObjectID, - title: "Deleted by User ID", - description: - "User ID who deleted this object (if this object was deleted by a User)", - example: "d4e5f6a7-b8c9-0123-de45-fa67bc890123", - }) - @Column({ - type: ColumnType.ObjectID, - nullable: true, - transformer: ObjectID.getDatabaseTransformer(), - }) - public deletedByUserId?: ObjectID = undefined; -} diff --git a/Common/Models/DatabaseModels/TelemetryException.ts b/Common/Models/DatabaseModels/TelemetryException.ts index 72609629a1..eb3235a941 100644 --- a/Common/Models/DatabaseModels/TelemetryException.ts +++ b/Common/Models/DatabaseModels/TelemetryException.ts @@ -17,7 +17,7 @@ import ObjectID from "../../Types/ObjectID"; import Permission from "../../Types/Permission"; import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm"; import DatabaseBaseModel from "./DatabaseBaseModel/DatabaseBaseModel"; -import TelemetryService from "./TelemetryService"; +import Service from "./Service"; @EnableDocumentation() @TenantColumn("projectId") @@ -142,17 +142,16 @@ export default class TelemetryException extends DatabaseBaseModel { ], }) @TableColumn({ - manyToOneRelationColumn: "telemetryServiceId", + manyToOneRelationColumn: "serviceId", type: TableColumnType.Entity, - modelType: TelemetryService, - title: "Telemetry Service", - description: - "Relation to Telemetry Service Resource in which this object belongs", + modelType: Service, + title: "Service", + description: "Relation to Service Resource in which this object belongs", example: "d4e5f6a7-b8c9-0123-def1-234567890123", }) @ManyToOne( () => { - return TelemetryService; + return Service; }, { eager: false, @@ -161,8 +160,8 @@ export default class TelemetryException extends DatabaseBaseModel { orphanedRowAction: "nullify", }, ) - @JoinColumn({ name: "telemetryServiceId" }) - public telemetryService?: TelemetryService = undefined; + @JoinColumn({ name: "serviceId" }) + public service?: Service = undefined; @ColumnAccessControl({ create: [ @@ -186,9 +185,8 @@ export default class TelemetryException extends DatabaseBaseModel { @TableColumn({ type: TableColumnType.ObjectID, required: true, - title: "Telemetry Service ID", - description: - "ID of your Telemetry Service resource where this object belongs", + title: "Service ID", + description: "ID of your Service resource where this object belongs", example: "d4e5f6a7-b8c9-0123-def1-234567890123", }) @Column({ @@ -196,7 +194,7 @@ export default class TelemetryException extends DatabaseBaseModel { nullable: false, transformer: ObjectID.getDatabaseTransformer(), }) - public telemetryServiceId?: ObjectID = undefined; + public serviceId?: ObjectID = undefined; @ColumnAccessControl({ create: [ diff --git a/Common/Models/DatabaseModels/TelemetryService.ts b/Common/Models/DatabaseModels/TelemetryService.ts deleted file mode 100644 index 8732498562..0000000000 --- a/Common/Models/DatabaseModels/TelemetryService.ts +++ /dev/null @@ -1,529 +0,0 @@ -import Label from "./Label"; -import Project from "./Project"; -import User from "./User"; -import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel"; -import Route from "../../Types/API/Route"; -import Color from "../../Types/Color"; -import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl"; -import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl"; -import AccessControlColumn from "../../Types/Database/AccessControlColumn"; -import ColumnLength from "../../Types/Database/ColumnLength"; -import ColumnType from "../../Types/Database/ColumnType"; -import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint"; -import EnableDocumentation from "../../Types/Database/EnableDocumentation"; -import EnableWorkflow from "../../Types/Database/EnableWorkflow"; -import ColorField from "../../Types/Database/ColorField"; -import SlugifyColumn from "../../Types/Database/SlugifyColumn"; -import TableColumn from "../../Types/Database/TableColumn"; -import TableColumnType from "../../Types/Database/TableColumnType"; -import TableMetadata from "../../Types/Database/TableMetadata"; -import TenantColumn from "../../Types/Database/TenantColumn"; -import UniqueColumnBy from "../../Types/Database/UniqueColumnBy"; -import IconProp from "../../Types/Icon/IconProp"; -import ObjectID from "../../Types/ObjectID"; -import Permission from "../../Types/Permission"; -import { - Column, - Entity, - Index, - JoinColumn, - JoinTable, - ManyToMany, - ManyToOne, -} from "typeorm"; - -@AccessControlColumn("labels") -@EnableDocumentation() -@TenantColumn("projectId") -@TableAccessControl({ - create: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.CreateTelemetryService, - ], - read: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.ProjectMember, - Permission.ReadTelemetryService, - ], - delete: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.DeleteTelemetryService, - ], - update: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.EditTelemetryService, - ], -}) -@EnableWorkflow({ - create: true, - delete: true, - update: true, - read: true, -}) -@CrudApiEndpoint(new Route("/telemetry-service")) -@SlugifyColumn("name", "slug") -@TableMetadata({ - tableName: "TelemetryService", - singularName: "Telemetry Service", - pluralName: "Telemetry Services", - icon: IconProp.SquareStack, - tableDescription: - "Telemetry Services are the services that you can use to monitor your services. You can create multiple Telemetry Services and use them to monitor your services.", -}) -@Entity({ - name: "TelemetryService", -}) -export default class TelemetryService extends BaseModel { - @ColumnAccessControl({ - create: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.CreateTelemetryService, - ], - read: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.ProjectMember, - Permission.ReadTelemetryService, - ], - update: [], - }) - @TableColumn({ - manyToOneRelationColumn: "projectId", - type: TableColumnType.Entity, - modelType: Project, - title: "Project", - description: "Relation to Project Resource in which this object belongs", - }) - @ManyToOne( - () => { - return Project; - }, - { - eager: false, - nullable: true, - onDelete: "CASCADE", - orphanedRowAction: "nullify", - }, - ) - @JoinColumn({ name: "projectId" }) - public project?: Project = undefined; - - @ColumnAccessControl({ - create: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.CreateTelemetryService, - ], - read: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.ProjectMember, - Permission.ReadTelemetryService, - ], - update: [], - }) - @Index() - @TableColumn({ - type: TableColumnType.ObjectID, - required: true, - canReadOnRelationQuery: true, - title: "Project ID", - description: "ID of your OneUptime Project in which this object belongs", - example: "5f8b9c0d-e1a2-4b3c-8d5e-6f7a8b9c0d1e", - }) - @Column({ - type: ColumnType.ObjectID, - nullable: false, - transformer: ObjectID.getDatabaseTransformer(), - }) - public projectId?: ObjectID = undefined; - - @ColumnAccessControl({ - create: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.CreateTelemetryService, - ], - read: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.ProjectMember, - Permission.ReadTelemetryService, - ], - update: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.EditTelemetryService, - ], - }) - @TableColumn({ - required: true, - type: TableColumnType.ShortText, - canReadOnRelationQuery: true, - title: "Name", - description: "Any friendly name of this object", - example: "Payment API Service", - }) - @Column({ - nullable: false, - type: ColumnType.ShortText, - length: ColumnLength.ShortText, - }) - @UniqueColumnBy("projectId") - public name?: string = undefined; - - @ColumnAccessControl({ - create: [], - read: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.ProjectMember, - Permission.ReadTelemetryService, - ], - update: [], - }) - @TableColumn({ - required: true, - unique: true, - type: TableColumnType.Slug, - computed: true, - title: "Slug", - description: "Friendly globally unique name for your object", - }) - @Column({ - nullable: false, - type: ColumnType.Slug, - length: ColumnLength.Slug, - }) - public slug?: string = undefined; - - @ColumnAccessControl({ - create: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.CreateTelemetryService, - ], - read: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.ProjectMember, - Permission.ReadTelemetryService, - ], - update: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.EditTelemetryService, - ], - }) - @TableColumn({ - required: false, - type: TableColumnType.LongText, - title: "Description", - description: "Friendly description that will help you remember", - example: "Telemetry and monitoring for the payment processing API service", - }) - @Column({ - nullable: true, - type: ColumnType.LongText, - length: ColumnLength.LongText, - }) - public description?: string = undefined; - - @ColumnAccessControl({ - create: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.CreateTelemetryService, - ], - read: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.ProjectMember, - Permission.ReadTelemetryService, - ], - update: [], - }) - @TableColumn({ - manyToOneRelationColumn: "createdByUserId", - type: TableColumnType.Entity, - modelType: User, - title: "Created by User", - description: - "Relation to User who created this object (if this object was created by a User)", - }) - @ManyToOne( - () => { - return User; - }, - { - eager: false, - nullable: true, - onDelete: "SET NULL", - orphanedRowAction: "nullify", - }, - ) - @JoinColumn({ name: "createdByUserId" }) - public createdByUser?: User = undefined; - - @ColumnAccessControl({ - create: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.CreateTelemetryService, - ], - read: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.ProjectMember, - Permission.ReadTelemetryService, - ], - update: [], - }) - @TableColumn({ - type: TableColumnType.ObjectID, - title: "Created by User ID", - description: - "User ID who created this object (if this object was created by a User)", - example: "a1b2c3d4-e5f6-7890-abcd-ef1234567890", - }) - @Column({ - type: ColumnType.ObjectID, - nullable: true, - transformer: ObjectID.getDatabaseTransformer(), - }) - public createdByUserId?: ObjectID = undefined; - - @ColumnAccessControl({ - create: [], - read: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.ProjectMember, - Permission.ReadTelemetryService, - ], - update: [], - }) - @TableColumn({ - manyToOneRelationColumn: "deletedByUserId", - type: TableColumnType.Entity, - title: "Deleted by User", - modelType: User, - description: - "Relation to User who deleted this object (if this object was deleted by a User)", - }) - @ManyToOne( - () => { - return User; - }, - { - cascade: false, - eager: false, - nullable: true, - onDelete: "SET NULL", - orphanedRowAction: "nullify", - }, - ) - @JoinColumn({ name: "deletedByUserId" }) - public deletedByUser?: User = undefined; - - @ColumnAccessControl({ - create: [], - read: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.ProjectMember, - Permission.ReadTelemetryService, - ], - update: [], - }) - @TableColumn({ - type: TableColumnType.ObjectID, - title: "Deleted by User ID", - description: - "User ID who deleted this object (if this object was deleted by a User)", - example: "b2c3d4e5-f6a7-8901-bcde-f2345678901a", - }) - @Column({ - type: ColumnType.ObjectID, - nullable: true, - transformer: ObjectID.getDatabaseTransformer(), - }) - public deletedByUserId?: ObjectID = undefined; - - @ColumnAccessControl({ - create: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.CreateTelemetryService, - ], - read: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.ProjectMember, - Permission.ReadTelemetryService, - ], - update: [ - Permission.ProjectOwner, - Permission.ProjectAdmin, - Permission.ProjectMember, - Permission.EditTelemetryService, - ], - }) - @TableColumn({ - required: false, - type: TableColumnType.EntityArray, - modelType: Label, - title: "Labels", - description: - "Relation to Labels Array where this object is categorized in.", - }) - @ManyToMany( - () => { - return Label; - }, - { eager: false }, - ) - @JoinTable({ - name: "TelemetryServiceLabel", - inverseJoinColumn: { - name: "labelId", - referencedColumnName: "_id", - }, - joinColumn: { - name: "telemetryServiceId", - referencedColumnName: "_id", - }, - }) - public labels?: Array