@oneuptime/common 10.0.39 → 10.0.41
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/AnalyticsModels/Index.ts +4 -0
- package/Models/AnalyticsModels/Profile.ts +687 -0
- package/Models/AnalyticsModels/ProfileSample.ts +547 -0
- package/Models/DatabaseModels/Dashboard.ts +357 -0
- package/Models/DatabaseModels/DashboardDomain.ts +658 -0
- package/Models/DatabaseModels/Index.ts +2 -0
- package/Models/DatabaseModels/StatusPage.ts +41 -0
- package/Server/API/DashboardAPI.ts +408 -0
- package/Server/API/DashboardDomainAPI.ts +235 -0
- package/Server/API/StatusPageAPI.ts +36 -2
- package/Server/API/TelemetryAPI.ts +393 -0
- package/Server/EnvironmentConfig.ts +12 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1774524742177-MigrationName.ts +97 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1774524742178-MigrationName.ts +17 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1774524742179-MigrationName.ts +50 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1774559064919-MigrationName.ts +59 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
- package/Server/Middleware/UserAuthorization.ts +96 -1
- package/Server/Services/DashboardDomainService.ts +647 -0
- package/Server/Services/DashboardService.ts +174 -3
- package/Server/Services/IncidentService.ts +295 -50
- package/Server/Services/IncidentStateTimelineService.ts +1 -0
- package/Server/Services/Index.ts +6 -0
- package/Server/Services/MonitorService.ts +5 -0
- package/Server/Services/ProfileAggregationService.ts +559 -0
- package/Server/Services/ProfileSampleService.ts +11 -0
- package/Server/Services/ProfileService.ts +11 -0
- package/Server/Services/TelemetryUsageBillingService.ts +77 -3
- package/Server/Services/WorkspaceNotificationSummaryService.ts +15 -1
- package/Server/Types/Billing/MeteredPlan/AllMeteredPlans.ts +9 -0
- package/Server/Utils/Cookie.ts +48 -0
- package/Server/Utils/Monitor/Criteria/ProfileMonitorCriteria.ts +34 -0
- package/Server/Utils/Monitor/DataToProcess.ts +3 -1
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +299 -0
- package/Server/Utils/Profile/PprofEncoder.ts +225 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +53 -16
- package/Server/Utils/Workspace/Slack/Slack.ts +26 -6
- package/ServiceRoute.ts +2 -0
- package/Tests/UI/Components/ComponentsModal.test.tsx +19 -15
- package/Types/AnalyticsDatabase/AnalyticsTableName.ts +2 -0
- package/Types/CookieName.ts +1 -0
- package/Types/Dashboard/Chart/ChartType.ts +5 -0
- package/Types/Dashboard/DashboardComponentType.ts +4 -0
- package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +10 -0
- package/Types/Dashboard/DashboardComponents/DashboardChartComponent.ts +1 -2
- package/Types/Dashboard/DashboardComponents/DashboardGaugeComponent.ts +17 -0
- package/Types/Dashboard/DashboardComponents/DashboardLogStreamComponent.ts +15 -0
- package/Types/Dashboard/DashboardComponents/DashboardTableComponent.ts +14 -0
- package/Types/Dashboard/DashboardComponents/DashboardTextComponent.ts +1 -0
- package/Types/Dashboard/DashboardComponents/DashboardTraceListComponent.ts +13 -0
- package/Types/Dashboard/DashboardComponents/DashboardValueComponent.ts +2 -0
- package/Types/Dashboard/DashboardTemplates.ts +964 -0
- package/Types/Dashboard/DashboardVariable.ts +23 -0
- package/Types/Dashboard/DashboardViewConfig.ts +59 -0
- package/Types/Dashboard/MasterPassword.ts +10 -0
- package/Types/Icon/IconProp.ts +1 -0
- package/Types/Incident/IncidentMetricType.ts +3 -0
- package/Types/MeteredPlan/ProductType.ts +1 -0
- package/Types/Metrics/MetricQueryConfigData.ts +3 -0
- package/Types/Monitor/CriteriaFilter.ts +3 -0
- package/Types/Monitor/KubernetesAlertTemplates.ts +78 -7
- package/Types/Monitor/MetricMonitor/MetricMonitorResponse.ts +20 -0
- package/Types/Monitor/MonitorStep.ts +25 -0
- package/Types/Monitor/MonitorStepProfileMonitor.ts +96 -0
- package/Types/Monitor/MonitorType.ts +11 -0
- package/Types/Monitor/ProfileMonitor/ProfileMonitorResponse.ts +12 -0
- package/Types/Permission.ts +87 -0
- package/Types/Telemetry/TelemetryType.ts +1 -0
- package/Types/Workspace/NotificationSummary/WorkspaceNotificationSummaryItem.ts +1 -0
- package/UI/Components/Button/Button.tsx +1 -1
- package/UI/Components/Card/Card.tsx +8 -4
- package/UI/Components/Charts/Area/AreaChart.tsx +4 -0
- package/UI/Components/Charts/Bar/BarChart.tsx +4 -0
- package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +26 -0
- package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +26 -0
- package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +26 -0
- package/UI/Components/Charts/Line/LineChart.tsx +4 -0
- package/UI/Components/Charts/Types/ReferenceLineProps.ts +6 -0
- package/UI/Components/Icon/Icon.tsx +33 -0
- package/UI/Components/ModelTable/BaseModelTable.tsx +13 -10
- package/UI/Components/MoreMenu/MoreMenu.tsx +15 -2
- package/UI/Components/MoreMenu/MoreMenuItem.tsx +4 -4
- package/UI/Components/Workflow/Component.tsx +450 -209
- package/UI/Components/Workflow/ComponentPortViewer.tsx +57 -20
- package/UI/Components/Workflow/ComponentReturnValueViewer.tsx +65 -25
- package/UI/Components/Workflow/ComponentSettingsModal.tsx +202 -37
- package/UI/Components/Workflow/ComponentsModal.tsx +180 -93
- package/UI/Components/Workflow/Workflow.tsx +105 -9
- package/UI/Config.ts +9 -0
- package/Utils/Dashboard/Components/DashboardChartComponent.ts +53 -22
- package/Utils/Dashboard/Components/DashboardGaugeComponent.ts +124 -0
- package/Utils/Dashboard/Components/DashboardLogStreamComponent.ts +110 -0
- package/Utils/Dashboard/Components/DashboardTableComponent.ts +86 -0
- package/Utils/Dashboard/Components/DashboardTextComponent.ts +32 -7
- package/Utils/Dashboard/Components/DashboardTraceListComponent.ts +86 -0
- package/Utils/Dashboard/Components/DashboardValueComponent.ts +39 -3
- package/Utils/Dashboard/Components/Index.ts +28 -0
- package/Utils/ValueFormatter.ts +170 -0
- package/build/dist/Models/AnalyticsModels/Index.js +4 -0
- package/build/dist/Models/AnalyticsModels/Index.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/Profile.js +621 -0
- package/build/dist/Models/AnalyticsModels/Profile.js.map +1 -0
- package/build/dist/Models/AnalyticsModels/ProfileSample.js +497 -0
- package/build/dist/Models/AnalyticsModels/ProfileSample.js.map +1 -0
- package/build/dist/Models/DatabaseModels/Dashboard.js +365 -0
- package/build/dist/Models/DatabaseModels/Dashboard.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DashboardDomain.js +691 -0
- package/build/dist/Models/DatabaseModels/DashboardDomain.js.map +1 -0
- package/build/dist/Models/DatabaseModels/Index.js +2 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPage.js +42 -0
- package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
- package/build/dist/Server/API/DashboardAPI.js +293 -0
- package/build/dist/Server/API/DashboardAPI.js.map +1 -0
- package/build/dist/Server/API/DashboardDomainAPI.js +124 -0
- package/build/dist/Server/API/DashboardDomainAPI.js.map +1 -0
- package/build/dist/Server/API/StatusPageAPI.js +26 -2
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +222 -0
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +4 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1774524742177-MigrationName.js +40 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1774524742177-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1774524742178-MigrationName.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1774524742178-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1774524742179-MigrationName.js +23 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1774524742179-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1774559064919-MigrationName.js +26 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1774559064919-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/UserAuthorization.js +41 -0
- package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
- package/build/dist/Server/Services/DashboardDomainService.js +595 -0
- package/build/dist/Server/Services/DashboardDomainService.js.map +1 -0
- package/build/dist/Server/Services/DashboardService.js +117 -3
- package/build/dist/Server/Services/DashboardService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +231 -55
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncidentStateTimelineService.js +1 -1
- package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +6 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +5 -2
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/ProfileAggregationService.js +356 -0
- package/build/dist/Server/Services/ProfileAggregationService.js.map +1 -0
- package/build/dist/Server/Services/ProfileSampleService.js +9 -0
- package/build/dist/Server/Services/ProfileSampleService.js.map +1 -0
- package/build/dist/Server/Services/ProfileService.js +9 -0
- package/build/dist/Server/Services/ProfileService.js.map +1 -0
- package/build/dist/Server/Services/TelemetryUsageBillingService.js +61 -4
- package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
- package/build/dist/Server/Services/WorkspaceNotificationSummaryService.js +13 -1
- package/build/dist/Server/Services/WorkspaceNotificationSummaryService.js.map +1 -1
- package/build/dist/Server/Types/Billing/MeteredPlan/AllMeteredPlans.js +8 -0
- package/build/dist/Server/Types/Billing/MeteredPlan/AllMeteredPlans.js.map +1 -1
- package/build/dist/Server/Utils/Cookie.js +36 -0
- package/build/dist/Server/Utils/Cookie.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/ProfileMonitorCriteria.js +34 -0
- package/build/dist/Server/Utils/Monitor/Criteria/ProfileMonitorCriteria.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +173 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Profile/PprofEncoder.js +129 -0
- package/build/dist/Server/Utils/Profile/PprofEncoder.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +36 -14
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js +23 -6
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
- package/build/dist/ServiceRoute.js +1 -0
- package/build/dist/ServiceRoute.js.map +1 -1
- package/build/dist/Tests/UI/Components/ComponentsModal.test.js +15 -15
- package/build/dist/Tests/UI/Components/ComponentsModal.test.js.map +1 -1
- package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js +2 -0
- package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js.map +1 -1
- package/build/dist/Types/CookieName.js +1 -0
- package/build/dist/Types/CookieName.js.map +1 -1
- package/build/dist/Types/Dashboard/Chart/ChartType.js +5 -0
- package/build/dist/Types/Dashboard/Chart/ChartType.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponentType.js +4 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardGaugeComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardGaugeComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardLogStreamComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardLogStreamComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardTableComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardTableComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardTraceListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardTraceListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardTemplates.js +853 -0
- package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardVariable.js +7 -0
- package/build/dist/Types/Dashboard/DashboardVariable.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardViewConfig.js +50 -1
- package/build/dist/Types/Dashboard/DashboardViewConfig.js.map +1 -1
- package/build/dist/Types/Dashboard/MasterPassword.js +5 -0
- package/build/dist/Types/Dashboard/MasterPassword.js.map +1 -0
- package/build/dist/Types/Icon/IconProp.js +1 -0
- package/build/dist/Types/Icon/IconProp.js.map +1 -1
- package/build/dist/Types/Incident/IncidentMetricType.js +3 -0
- package/build/dist/Types/Incident/IncidentMetricType.js.map +1 -1
- package/build/dist/Types/MeteredPlan/ProductType.js +1 -0
- package/build/dist/Types/MeteredPlan/ProductType.js.map +1 -1
- package/build/dist/Types/Metrics/MetricQueryConfigData.js +1 -0
- package/build/dist/Types/Metrics/MetricQueryConfigData.js.map +1 -1
- package/build/dist/Types/Monitor/CriteriaFilter.js +2 -0
- package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +58 -7
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +15 -0
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepProfileMonitor.js +59 -0
- package/build/dist/Types/Monitor/MonitorStepProfileMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorType.js +10 -0
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Monitor/ProfileMonitor/ProfileMonitorResponse.js +2 -0
- package/build/dist/Types/Monitor/ProfileMonitor/ProfileMonitorResponse.js.map +1 -0
- package/build/dist/Types/Permission.js +75 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Telemetry/TelemetryType.js +1 -0
- package/build/dist/Types/Telemetry/TelemetryType.js.map +1 -1
- package/build/dist/Types/Workspace/NotificationSummary/WorkspaceNotificationSummaryItem.js +1 -0
- package/build/dist/Types/Workspace/NotificationSummary/WorkspaceNotificationSummaryItem.js.map +1 -1
- package/build/dist/UI/Components/Button/Button.js +1 -1
- package/build/dist/UI/Components/Button/Button.js.map +1 -1
- package/build/dist/UI/Components/Card/Card.js +4 -4
- package/build/dist/UI/Components/Card/Card.js.map +1 -1
- package/build/dist/UI/Components/Charts/Area/AreaChart.js +1 -1
- package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js +1 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +5 -2
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +5 -2
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +6 -3
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Line/LineChart.js +1 -1
- package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Types/ReferenceLineProps.js +2 -0
- package/build/dist/UI/Components/Charts/Types/ReferenceLineProps.js.map +1 -0
- package/build/dist/UI/Components/Icon/Icon.js +11 -0
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +12 -9
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js +8 -2
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js +4 -4
- package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js.map +1 -1
- package/build/dist/UI/Components/Workflow/Component.js +311 -143
- package/build/dist/UI/Components/Workflow/Component.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentPortViewer.js +44 -18
- package/build/dist/UI/Components/Workflow/ComponentPortViewer.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentReturnValueViewer.js +48 -22
- package/build/dist/UI/Components/Workflow/ComponentReturnValueViewer.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentSettingsModal.js +127 -21
- package/build/dist/UI/Components/Workflow/ComponentSettingsModal.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentsModal.js +107 -52
- package/build/dist/UI/Components/Workflow/ComponentsModal.js.map +1 -1
- package/build/dist/UI/Components/Workflow/Workflow.js +87 -12
- package/build/dist/UI/Components/Workflow/Workflow.js.map +1 -1
- package/build/dist/UI/Config.js +3 -1
- package/build/dist/UI/Config.js.map +1 -1
- package/build/dist/Utils/Dashboard/Components/DashboardChartComponent.js +50 -21
- package/build/dist/Utils/Dashboard/Components/DashboardChartComponent.js.map +1 -1
- package/build/dist/Utils/Dashboard/Components/DashboardGaugeComponent.js +104 -0
- package/build/dist/Utils/Dashboard/Components/DashboardGaugeComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardLogStreamComponent.js +91 -0
- package/build/dist/Utils/Dashboard/Components/DashboardLogStreamComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardTableComponent.js +70 -0
- package/build/dist/Utils/Dashboard/Components/DashboardTableComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardTextComponent.js +28 -7
- package/build/dist/Utils/Dashboard/Components/DashboardTextComponent.js.map +1 -1
- package/build/dist/Utils/Dashboard/Components/DashboardTraceListComponent.js +70 -0
- package/build/dist/Utils/Dashboard/Components/DashboardTraceListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardValueComponent.js +34 -3
- package/build/dist/Utils/Dashboard/Components/DashboardValueComponent.js.map +1 -1
- package/build/dist/Utils/Dashboard/Components/Index.js +16 -0
- package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
- package/build/dist/Utils/ValueFormatter.js +132 -0
- package/build/dist/Utils/ValueFormatter.js.map +1 -0
- package/package.json +1 -1
|
@@ -7,13 +7,21 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
|
+
import CookieUtil from "../Utils/Cookie";
|
|
11
|
+
import JSONWebToken from "../Utils/JsonWebToken";
|
|
12
|
+
import logger from "../Utils/Logger";
|
|
10
13
|
import DatabaseService from "./DatabaseService";
|
|
11
14
|
import BadDataException from "../../Types/Exception/BadDataException";
|
|
15
|
+
import NotAuthenticatedException from "../../Types/Exception/NotAuthenticatedException";
|
|
16
|
+
import ForbiddenException from "../../Types/Exception/ForbiddenException";
|
|
17
|
+
import MasterPasswordRequiredException from "../../Types/Exception/MasterPasswordRequiredException";
|
|
12
18
|
import Model from "../../Models/DatabaseModels/Dashboard";
|
|
13
19
|
import { IsBillingEnabled } from "../EnvironmentConfig";
|
|
14
20
|
import { PlanType } from "../../Types/Billing/SubscriptionPlan";
|
|
15
21
|
import DashboardViewConfigUtil from "../../Utils/Dashboard/DashboardViewConfig";
|
|
16
22
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
23
|
+
import IP from "../../Types/IP/IP";
|
|
24
|
+
import { DASHBOARD_MASTER_PASSWORD_COOKIE_IDENTIFIER, DASHBOARD_MASTER_PASSWORD_REQUIRED_MESSAGE, } from "../../Types/Dashboard/MasterPassword";
|
|
17
25
|
export class Service extends DatabaseService {
|
|
18
26
|
constructor() {
|
|
19
27
|
super(Model);
|
|
@@ -36,11 +44,117 @@ export class Service extends DatabaseService {
|
|
|
36
44
|
}
|
|
37
45
|
}
|
|
38
46
|
}
|
|
39
|
-
//
|
|
40
|
-
createBy.data.dashboardViewConfig
|
|
41
|
-
|
|
47
|
+
// use default empty config only if no template config was provided.
|
|
48
|
+
if (!createBy.data.dashboardViewConfig ||
|
|
49
|
+
!createBy.data.dashboardViewConfig.components ||
|
|
50
|
+
createBy.data.dashboardViewConfig.components.length === 0) {
|
|
51
|
+
createBy.data.dashboardViewConfig =
|
|
52
|
+
DashboardViewConfigUtil.createDefaultDashboardViewConfig();
|
|
53
|
+
}
|
|
42
54
|
return Promise.resolve({ createBy, carryForward: null });
|
|
43
55
|
}
|
|
56
|
+
async hasReadAccess(data) {
|
|
57
|
+
var _a, _b, _c;
|
|
58
|
+
const dashboardId = data.dashboardId;
|
|
59
|
+
const req = data.req;
|
|
60
|
+
try {
|
|
61
|
+
const dashboard = await this.findOneById({
|
|
62
|
+
id: dashboardId,
|
|
63
|
+
props: {
|
|
64
|
+
isRoot: true,
|
|
65
|
+
},
|
|
66
|
+
select: {
|
|
67
|
+
_id: true,
|
|
68
|
+
isPublicDashboard: true,
|
|
69
|
+
ipWhitelist: true,
|
|
70
|
+
enableMasterPassword: true,
|
|
71
|
+
masterPassword: true,
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
// If dashboard is not public, deny access
|
|
75
|
+
if (dashboard && !dashboard.isPublicDashboard) {
|
|
76
|
+
return {
|
|
77
|
+
hasReadAccess: false,
|
|
78
|
+
error: new NotAuthenticatedException("This dashboard is not available."),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
if ((dashboard === null || dashboard === void 0 ? void 0 : dashboard.ipWhitelist) && dashboard.ipWhitelist.length > 0) {
|
|
82
|
+
const ipWhitelist = (_a = dashboard.ipWhitelist) === null || _a === void 0 ? void 0 : _a.split("\n");
|
|
83
|
+
const ipAccessedFrom = ((_b = req.headers["x-forwarded-for"]) === null || _b === void 0 ? void 0 : _b.toString()) ||
|
|
84
|
+
((_c = req.headers["x-real-ip"]) === null || _c === void 0 ? void 0 : _c.toString()) ||
|
|
85
|
+
req.socket.remoteAddress ||
|
|
86
|
+
req.ip ||
|
|
87
|
+
req.ips[0];
|
|
88
|
+
if (!ipAccessedFrom) {
|
|
89
|
+
logger.error("IP address not found in request.");
|
|
90
|
+
return {
|
|
91
|
+
hasReadAccess: false,
|
|
92
|
+
error: new ForbiddenException("Unable to verify IP address for dashboard access."),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
const isIPWhitelisted = IP.isInWhitelist({
|
|
96
|
+
ips: (ipAccessedFrom === null || ipAccessedFrom === void 0 ? void 0 : ipAccessedFrom.split(",").map((i) => {
|
|
97
|
+
return i.trim();
|
|
98
|
+
})) || [],
|
|
99
|
+
whitelist: ipWhitelist,
|
|
100
|
+
});
|
|
101
|
+
if (!isIPWhitelisted) {
|
|
102
|
+
logger.error(`IP address ${ipAccessedFrom} is not whitelisted for dashboard ${dashboardId.toString()}.`);
|
|
103
|
+
return {
|
|
104
|
+
hasReadAccess: false,
|
|
105
|
+
error: new ForbiddenException(`Your IP address ${ipAccessedFrom} is blocked from accessing this dashboard.`),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const shouldEnforceMasterPassword = Boolean(dashboard &&
|
|
110
|
+
dashboard.isPublicDashboard &&
|
|
111
|
+
dashboard.enableMasterPassword &&
|
|
112
|
+
dashboard.masterPassword);
|
|
113
|
+
if (shouldEnforceMasterPassword) {
|
|
114
|
+
const hasValidMasterPassword = this.hasValidMasterPasswordCookie({
|
|
115
|
+
req,
|
|
116
|
+
dashboardId,
|
|
117
|
+
});
|
|
118
|
+
if (hasValidMasterPassword) {
|
|
119
|
+
return {
|
|
120
|
+
hasReadAccess: true,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
hasReadAccess: false,
|
|
125
|
+
error: new MasterPasswordRequiredException(DASHBOARD_MASTER_PASSWORD_REQUIRED_MESSAGE),
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
// Public dashboard without master password - grant access
|
|
129
|
+
if (dashboard && dashboard.isPublicDashboard) {
|
|
130
|
+
return {
|
|
131
|
+
hasReadAccess: true,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
logger.error(err);
|
|
137
|
+
}
|
|
138
|
+
return {
|
|
139
|
+
hasReadAccess: false,
|
|
140
|
+
error: new NotAuthenticatedException("You do not have access to this dashboard."),
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
hasValidMasterPasswordCookie(data) {
|
|
144
|
+
const token = CookieUtil.getCookieFromExpressRequest(data.req, CookieUtil.getDashboardMasterPasswordKey(data.dashboardId));
|
|
145
|
+
if (!token) {
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
try {
|
|
149
|
+
const payload = JSONWebToken.decodeJsonPayload(token);
|
|
150
|
+
return (payload["dashboardId"] === data.dashboardId.toString() &&
|
|
151
|
+
payload["type"] === DASHBOARD_MASTER_PASSWORD_COOKIE_IDENTIFIER);
|
|
152
|
+
}
|
|
153
|
+
catch (err) {
|
|
154
|
+
logger.error(err);
|
|
155
|
+
}
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
44
158
|
}
|
|
45
159
|
__decorate([
|
|
46
160
|
CaptureSpan(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardService.js","sourceRoot":"","sources":["../../../../Server/Services/DashboardService.ts"],"names":[],"mappings":";;;;;;;;;AAEA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,gBAAgB,MAAM,wCAAwC,CAAC;AACtE,OAAO,KAAK,MAAM,uCAAuC,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAChE,OAAO,uBAAuB,MAAM,2CAA2C,CAAC;AAChF,OAAO,WAAW,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"DashboardService.js","sourceRoot":"","sources":["../../../../Server/Services/DashboardService.ts"],"names":[],"mappings":"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"}
|
|
@@ -759,7 +759,7 @@ ${incident.remediationNotes || "No remediation notes provided."}
|
|
|
759
759
|
"Status was changed because Incident " +
|
|
760
760
|
(createdItem.incidentNumberWithPrefix ||
|
|
761
761
|
"#" + ((_b = createdItem.incidentNumber) === null || _b === void 0 ? void 0 : _b.toString())) +
|
|
762
|
-
" was created.", createdItem.createdStateLog, onCreate.createBy.props);
|
|
762
|
+
" was created.", createdItem.createdStateLog, onCreate.createBy.props, createdItem.declaredAt || undefined);
|
|
763
763
|
}
|
|
764
764
|
}
|
|
765
765
|
catch (error) {
|
|
@@ -910,7 +910,7 @@ ${incident.remediationNotes || "No remediation notes provided."}
|
|
|
910
910
|
return URL.fromString(dashboardUrl.toString()).addRoute(`/${projectId.toString()}/incidents/${incidentId.toString()}`);
|
|
911
911
|
}
|
|
912
912
|
async onUpdateSuccess(onUpdate, updatedItemIds) {
|
|
913
|
-
var _a, _b, _c;
|
|
913
|
+
var _a, _b, _c, _d, _e;
|
|
914
914
|
if (onUpdate.updateBy.data.currentIncidentStateId &&
|
|
915
915
|
onUpdate.updateBy.props.tenantId) {
|
|
916
916
|
for (const itemId of updatedItemIds) {
|
|
@@ -980,6 +980,71 @@ ${incident.remediationNotes || "No remediation notes provided."}
|
|
|
980
980
|
},
|
|
981
981
|
});
|
|
982
982
|
}
|
|
983
|
+
// emit postmortem completion time metric when postmortemPostedAt is set
|
|
984
|
+
if (Object.prototype.hasOwnProperty.call(updatedIncidentData, "postmortemPostedAt") &&
|
|
985
|
+
updatedIncidentData["postmortemPostedAt"]) {
|
|
986
|
+
try {
|
|
987
|
+
const postmortemPostedAt = updatedIncidentData["postmortemPostedAt"];
|
|
988
|
+
// find the resolved state timeline to calculate time from resolution to postmortem
|
|
989
|
+
const resolvedStateId = await IncidentStateTimelineService.getResolvedStateIdForProject(projectId);
|
|
990
|
+
const resolvedTimeline = await IncidentStateTimelineService.findOneBy({
|
|
991
|
+
query: {
|
|
992
|
+
incidentId: incidentId,
|
|
993
|
+
incidentStateId: resolvedStateId,
|
|
994
|
+
},
|
|
995
|
+
select: {
|
|
996
|
+
startsAt: true,
|
|
997
|
+
},
|
|
998
|
+
sort: {
|
|
999
|
+
startsAt: SortOrder.Descending,
|
|
1000
|
+
},
|
|
1001
|
+
props: {
|
|
1002
|
+
isRoot: true,
|
|
1003
|
+
},
|
|
1004
|
+
});
|
|
1005
|
+
// only emit if the incident has been resolved
|
|
1006
|
+
if (resolvedTimeline && resolvedTimeline.startsAt) {
|
|
1007
|
+
const postmortemMetric = new Metric();
|
|
1008
|
+
postmortemMetric.projectId = projectId;
|
|
1009
|
+
postmortemMetric.serviceId = incidentId;
|
|
1010
|
+
postmortemMetric.serviceType = ServiceType.Incident;
|
|
1011
|
+
postmortemMetric.name =
|
|
1012
|
+
IncidentMetricType.PostmortemCompletionTime;
|
|
1013
|
+
postmortemMetric.value = OneUptimeDate.getDifferenceInSeconds(postmortemPostedAt, resolvedTimeline.startsAt);
|
|
1014
|
+
postmortemMetric.attributes = {
|
|
1015
|
+
incidentId: incidentId.toString(),
|
|
1016
|
+
projectId: projectId.toString(),
|
|
1017
|
+
};
|
|
1018
|
+
postmortemMetric.attributeKeys = TelemetryUtil.getAttributeKeys(postmortemMetric.attributes);
|
|
1019
|
+
postmortemMetric.time = postmortemPostedAt;
|
|
1020
|
+
postmortemMetric.timeUnixNano = OneUptimeDate.toUnixNano(postmortemMetric.time);
|
|
1021
|
+
postmortemMetric.metricPointType = MetricPointType.Sum;
|
|
1022
|
+
await MetricService.create({
|
|
1023
|
+
data: postmortemMetric,
|
|
1024
|
+
props: {
|
|
1025
|
+
isRoot: true,
|
|
1026
|
+
},
|
|
1027
|
+
});
|
|
1028
|
+
const postmortemMetricType = new MetricType();
|
|
1029
|
+
postmortemMetricType.name =
|
|
1030
|
+
IncidentMetricType.PostmortemCompletionTime;
|
|
1031
|
+
postmortemMetricType.description =
|
|
1032
|
+
"Time from incident resolution to postmortem publication";
|
|
1033
|
+
postmortemMetricType.unit = "seconds";
|
|
1034
|
+
TelemetryUtil.indexMetricNameServiceNameMap({
|
|
1035
|
+
metricNameServiceNameMap: {
|
|
1036
|
+
[postmortemMetricType.name]: postmortemMetricType,
|
|
1037
|
+
},
|
|
1038
|
+
projectId: projectId,
|
|
1039
|
+
}).catch((err) => {
|
|
1040
|
+
logger.error(err);
|
|
1041
|
+
});
|
|
1042
|
+
}
|
|
1043
|
+
}
|
|
1044
|
+
catch (metricError) {
|
|
1045
|
+
logger.error(`Failed to emit postmortem completion time metric: ${metricError}`);
|
|
1046
|
+
}
|
|
1047
|
+
}
|
|
983
1048
|
let shouldAddIncidentFeed = false;
|
|
984
1049
|
let feedInfoInMarkdown = `**[${incidentLabel}](${incidentLink.toString()}) was updated.**`;
|
|
985
1050
|
if (Object.prototype.hasOwnProperty.call(updatedIncidentData, "title")) {
|
|
@@ -1075,6 +1140,48 @@ ${incidentSeverity.name}
|
|
|
1075
1140
|
catch (slaError) {
|
|
1076
1141
|
logger.error(`SLA recalculation failed in IncidentService.onUpdateSuccess: ${slaError}`);
|
|
1077
1142
|
}
|
|
1143
|
+
// emit severity change metric
|
|
1144
|
+
try {
|
|
1145
|
+
const severityChangeMetric = new Metric();
|
|
1146
|
+
severityChangeMetric.projectId = projectId;
|
|
1147
|
+
severityChangeMetric.serviceId = incidentId;
|
|
1148
|
+
severityChangeMetric.serviceType = ServiceType.Incident;
|
|
1149
|
+
severityChangeMetric.name = IncidentMetricType.SeverityChange;
|
|
1150
|
+
severityChangeMetric.value = 1;
|
|
1151
|
+
severityChangeMetric.attributes = {
|
|
1152
|
+
incidentId: incidentId.toString(),
|
|
1153
|
+
projectId: projectId.toString(),
|
|
1154
|
+
newIncidentSeverityId: ((_c = incidentSeverity._id) === null || _c === void 0 ? void 0 : _c.toString()) || "",
|
|
1155
|
+
newIncidentSeverityName: ((_d = incidentSeverity.name) === null || _d === void 0 ? void 0 : _d.toString()) || "",
|
|
1156
|
+
};
|
|
1157
|
+
severityChangeMetric.attributeKeys =
|
|
1158
|
+
TelemetryUtil.getAttributeKeys(severityChangeMetric.attributes);
|
|
1159
|
+
severityChangeMetric.time = OneUptimeDate.getCurrentDate();
|
|
1160
|
+
severityChangeMetric.timeUnixNano = OneUptimeDate.toUnixNano(severityChangeMetric.time);
|
|
1161
|
+
severityChangeMetric.metricPointType = MetricPointType.Sum;
|
|
1162
|
+
await MetricService.create({
|
|
1163
|
+
data: severityChangeMetric,
|
|
1164
|
+
props: {
|
|
1165
|
+
isRoot: true,
|
|
1166
|
+
},
|
|
1167
|
+
});
|
|
1168
|
+
const severityChangeMetricType = new MetricType();
|
|
1169
|
+
severityChangeMetricType.name = IncidentMetricType.SeverityChange;
|
|
1170
|
+
severityChangeMetricType.description =
|
|
1171
|
+
"Count of incident severity changes";
|
|
1172
|
+
severityChangeMetricType.unit = "";
|
|
1173
|
+
TelemetryUtil.indexMetricNameServiceNameMap({
|
|
1174
|
+
metricNameServiceNameMap: {
|
|
1175
|
+
[severityChangeMetricType.name]: severityChangeMetricType,
|
|
1176
|
+
},
|
|
1177
|
+
projectId: projectId,
|
|
1178
|
+
}).catch((err) => {
|
|
1179
|
+
logger.error(err);
|
|
1180
|
+
});
|
|
1181
|
+
}
|
|
1182
|
+
catch (metricError) {
|
|
1183
|
+
logger.error(`Failed to emit severity change metric: ${metricError}`);
|
|
1184
|
+
}
|
|
1078
1185
|
}
|
|
1079
1186
|
}
|
|
1080
1187
|
const carryForward = onUpdate.carryForward;
|
|
@@ -1162,7 +1269,7 @@ ${incidentSeverity.name}
|
|
|
1162
1269
|
}
|
|
1163
1270
|
const changeNewMonitorStatusTo = incidentCarryForward.newMonitorChangeStatusIdTo ||
|
|
1164
1271
|
incidentCarryForward.oldChangeMonitorStatusIdTo;
|
|
1165
|
-
if (((
|
|
1272
|
+
if (((_e = incidentCarryForward.monitorsAdded) === null || _e === void 0 ? void 0 : _e.length) > 0) {
|
|
1166
1273
|
await this.disableActiveMonitoringIfManualIncident(incidentId);
|
|
1167
1274
|
}
|
|
1168
1275
|
if (changeNewMonitorStatusTo) {
|
|
@@ -1234,7 +1341,7 @@ ${incidentSeverity.name}
|
|
|
1234
1341
|
});
|
|
1235
1342
|
return incidentCount.toNumber() > 0;
|
|
1236
1343
|
}
|
|
1237
|
-
async markMonitorsActiveForMonitoring(projectId, monitors) {
|
|
1344
|
+
async markMonitorsActiveForMonitoring(projectId, monitors, startsAt) {
|
|
1238
1345
|
// resolve all the monitors.
|
|
1239
1346
|
var _a;
|
|
1240
1347
|
if (monitors.length > 0) {
|
|
@@ -1293,6 +1400,9 @@ ${incidentSeverity.name}
|
|
|
1293
1400
|
monitorStatusTimeline.monitorId = monitor.id;
|
|
1294
1401
|
monitorStatusTimeline.projectId = projectId;
|
|
1295
1402
|
monitorStatusTimeline.monitorStatusId = resolvedMonitorState.id;
|
|
1403
|
+
if (startsAt) {
|
|
1404
|
+
monitorStatusTimeline.startsAt = startsAt;
|
|
1405
|
+
}
|
|
1296
1406
|
await MonitorStatusTimelineService.create({
|
|
1297
1407
|
data: monitorStatusTimeline,
|
|
1298
1408
|
props: {
|
|
@@ -1401,7 +1511,7 @@ ${incidentSeverity.name}
|
|
|
1401
1511
|
});
|
|
1402
1512
|
}
|
|
1403
1513
|
async refreshIncidentMetrics(data) {
|
|
1404
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q
|
|
1514
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
|
|
1405
1515
|
const incident = await this.findOneById({
|
|
1406
1516
|
id: data.incidentId,
|
|
1407
1517
|
select: {
|
|
@@ -1426,6 +1536,73 @@ ${incidentSeverity.name}
|
|
|
1426
1536
|
if (!incident.projectId) {
|
|
1427
1537
|
throw new BadDataException("Incident Project ID not found");
|
|
1428
1538
|
}
|
|
1539
|
+
// fetch owner users and teams for metric attributes
|
|
1540
|
+
const ownerUsers = await IncidentOwnerUserService.findBy({
|
|
1541
|
+
query: {
|
|
1542
|
+
incidentId: data.incidentId,
|
|
1543
|
+
},
|
|
1544
|
+
select: {
|
|
1545
|
+
_id: true,
|
|
1546
|
+
user: {
|
|
1547
|
+
_id: true,
|
|
1548
|
+
name: true,
|
|
1549
|
+
},
|
|
1550
|
+
},
|
|
1551
|
+
props: {
|
|
1552
|
+
isRoot: true,
|
|
1553
|
+
},
|
|
1554
|
+
limit: LIMIT_PER_PROJECT,
|
|
1555
|
+
skip: 0,
|
|
1556
|
+
});
|
|
1557
|
+
const ownerTeams = await IncidentOwnerTeamService.findBy({
|
|
1558
|
+
query: {
|
|
1559
|
+
incidentId: data.incidentId,
|
|
1560
|
+
},
|
|
1561
|
+
select: {
|
|
1562
|
+
_id: true,
|
|
1563
|
+
team: {
|
|
1564
|
+
_id: true,
|
|
1565
|
+
name: true,
|
|
1566
|
+
},
|
|
1567
|
+
},
|
|
1568
|
+
props: {
|
|
1569
|
+
isRoot: true,
|
|
1570
|
+
},
|
|
1571
|
+
limit: LIMIT_PER_PROJECT,
|
|
1572
|
+
skip: 0,
|
|
1573
|
+
});
|
|
1574
|
+
const ownerUserIds = ownerUsers
|
|
1575
|
+
.map((ownerUser) => {
|
|
1576
|
+
var _a, _b;
|
|
1577
|
+
return (_b = (_a = ownerUser.user) === null || _a === void 0 ? void 0 : _a._id) === null || _b === void 0 ? void 0 : _b.toString();
|
|
1578
|
+
})
|
|
1579
|
+
.filter((id) => {
|
|
1580
|
+
return Boolean(id);
|
|
1581
|
+
});
|
|
1582
|
+
const ownerUserNames = ownerUsers
|
|
1583
|
+
.map((ownerUser) => {
|
|
1584
|
+
var _a, _b;
|
|
1585
|
+
return (_b = (_a = ownerUser.user) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.toString();
|
|
1586
|
+
})
|
|
1587
|
+
.filter((name) => {
|
|
1588
|
+
return Boolean(name);
|
|
1589
|
+
});
|
|
1590
|
+
const ownerTeamIds = ownerTeams
|
|
1591
|
+
.map((ownerTeam) => {
|
|
1592
|
+
var _a, _b;
|
|
1593
|
+
return (_b = (_a = ownerTeam.team) === null || _a === void 0 ? void 0 : _a._id) === null || _b === void 0 ? void 0 : _b.toString();
|
|
1594
|
+
})
|
|
1595
|
+
.filter((id) => {
|
|
1596
|
+
return Boolean(id);
|
|
1597
|
+
});
|
|
1598
|
+
const ownerTeamNames = ownerTeams
|
|
1599
|
+
.map((ownerTeam) => {
|
|
1600
|
+
var _a, _b;
|
|
1601
|
+
return (_b = (_a = ownerTeam.team) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.toString();
|
|
1602
|
+
})
|
|
1603
|
+
.filter((name) => {
|
|
1604
|
+
return Boolean(name);
|
|
1605
|
+
});
|
|
1429
1606
|
// get incident state timeline
|
|
1430
1607
|
const incidentStateTimelines = await IncidentStateTimelineService.findBy({
|
|
1431
1608
|
query: {
|
|
@@ -1435,8 +1612,10 @@ ${incidentSeverity.name}
|
|
|
1435
1612
|
projectId: true,
|
|
1436
1613
|
incidentStateId: true,
|
|
1437
1614
|
incidentState: {
|
|
1615
|
+
name: true,
|
|
1438
1616
|
isAcknowledgedState: true,
|
|
1439
1617
|
isResolvedState: true,
|
|
1618
|
+
isCreatedState: true,
|
|
1440
1619
|
},
|
|
1441
1620
|
startsAt: true,
|
|
1442
1621
|
endsAt: true,
|
|
@@ -1468,13 +1647,8 @@ ${incidentSeverity.name}
|
|
|
1468
1647
|
incident.createdAt ||
|
|
1469
1648
|
OneUptimeDate.getCurrentDate();
|
|
1470
1649
|
const metricTypesMap = {};
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
incidentCountMetric.serviceId = incident.id;
|
|
1474
|
-
incidentCountMetric.serviceType = ServiceType.Incident;
|
|
1475
|
-
incidentCountMetric.name = IncidentMetricType.IncidentCount;
|
|
1476
|
-
incidentCountMetric.value = 1;
|
|
1477
|
-
incidentCountMetric.attributes = {
|
|
1650
|
+
// common attributes shared by all incident metrics
|
|
1651
|
+
const baseMetricAttributes = {
|
|
1478
1652
|
incidentId: data.incidentId.toString(),
|
|
1479
1653
|
projectId: incident.projectId.toString(),
|
|
1480
1654
|
monitorIds: ((_a = incident.monitors) === null || _a === void 0 ? void 0 : _a.map((monitor) => {
|
|
@@ -1487,7 +1661,18 @@ ${incidentSeverity.name}
|
|
|
1487
1661
|
})) || [],
|
|
1488
1662
|
incidentSeverityId: (_d = (_c = incident.incidentSeverity) === null || _c === void 0 ? void 0 : _c._id) === null || _d === void 0 ? void 0 : _d.toString(),
|
|
1489
1663
|
incidentSeverityName: (_f = (_e = incident.incidentSeverity) === null || _e === void 0 ? void 0 : _e.name) === null || _f === void 0 ? void 0 : _f.toString(),
|
|
1664
|
+
ownerUserIds: ownerUserIds,
|
|
1665
|
+
ownerUserNames: ownerUserNames,
|
|
1666
|
+
ownerTeamIds: ownerTeamIds,
|
|
1667
|
+
ownerTeamNames: ownerTeamNames,
|
|
1490
1668
|
};
|
|
1669
|
+
const incidentCountMetric = new Metric();
|
|
1670
|
+
incidentCountMetric.projectId = incident.projectId;
|
|
1671
|
+
incidentCountMetric.serviceId = incident.id;
|
|
1672
|
+
incidentCountMetric.serviceType = ServiceType.Incident;
|
|
1673
|
+
incidentCountMetric.name = IncidentMetricType.IncidentCount;
|
|
1674
|
+
incidentCountMetric.value = 1;
|
|
1675
|
+
incidentCountMetric.attributes = Object.assign({}, baseMetricAttributes);
|
|
1491
1676
|
incidentCountMetric.attributeKeys = TelemetryUtil.getAttributeKeys(incidentCountMetric.attributes);
|
|
1492
1677
|
incidentCountMetric.time = incidentStartsAt;
|
|
1493
1678
|
incidentCountMetric.timeUnixNano = OneUptimeDate.toUnixNano(incidentCountMetric.time);
|
|
@@ -1518,20 +1703,7 @@ ${incidentSeverity.name}
|
|
|
1518
1703
|
timeToAcknowledgeMetric.serviceType = ServiceType.Incident;
|
|
1519
1704
|
timeToAcknowledgeMetric.name = IncidentMetricType.TimeToAcknowledge;
|
|
1520
1705
|
timeToAcknowledgeMetric.value = OneUptimeDate.getDifferenceInSeconds((ackIncidentStateTimeline === null || ackIncidentStateTimeline === void 0 ? void 0 : ackIncidentStateTimeline.startsAt) || OneUptimeDate.getCurrentDate(), incidentStartsAt);
|
|
1521
|
-
timeToAcknowledgeMetric.attributes = {
|
|
1522
|
-
incidentId: data.incidentId.toString(),
|
|
1523
|
-
projectId: incident.projectId.toString(),
|
|
1524
|
-
monitorIds: ((_g = incident.monitors) === null || _g === void 0 ? void 0 : _g.map((monitor) => {
|
|
1525
|
-
var _a;
|
|
1526
|
-
return (_a = monitor._id) === null || _a === void 0 ? void 0 : _a.toString();
|
|
1527
|
-
})) || [],
|
|
1528
|
-
monitorNames: ((_h = incident.monitors) === null || _h === void 0 ? void 0 : _h.map((monitor) => {
|
|
1529
|
-
var _a;
|
|
1530
|
-
return (_a = monitor.name) === null || _a === void 0 ? void 0 : _a.toString();
|
|
1531
|
-
})) || [],
|
|
1532
|
-
incidentSeverityId: (_k = (_j = incident.incidentSeverity) === null || _j === void 0 ? void 0 : _j._id) === null || _k === void 0 ? void 0 : _k.toString(),
|
|
1533
|
-
incidentSeverityName: (_m = (_l = incident.incidentSeverity) === null || _l === void 0 ? void 0 : _l.name) === null || _m === void 0 ? void 0 : _m.toString(),
|
|
1534
|
-
};
|
|
1706
|
+
timeToAcknowledgeMetric.attributes = Object.assign({}, baseMetricAttributes);
|
|
1535
1707
|
timeToAcknowledgeMetric.attributeKeys = TelemetryUtil.getAttributeKeys(timeToAcknowledgeMetric.attributes);
|
|
1536
1708
|
timeToAcknowledgeMetric.time =
|
|
1537
1709
|
(ackIncidentStateTimeline === null || ackIncidentStateTimeline === void 0 ? void 0 : ackIncidentStateTimeline.startsAt) ||
|
|
@@ -1568,20 +1740,7 @@ ${incidentSeverity.name}
|
|
|
1568
1740
|
timeToResolveMetric.name = IncidentMetricType.TimeToResolve;
|
|
1569
1741
|
timeToResolveMetric.value = OneUptimeDate.getDifferenceInSeconds((resolvedIncidentStateTimeline === null || resolvedIncidentStateTimeline === void 0 ? void 0 : resolvedIncidentStateTimeline.startsAt) ||
|
|
1570
1742
|
OneUptimeDate.getCurrentDate(), incidentStartsAt);
|
|
1571
|
-
timeToResolveMetric.attributes = {
|
|
1572
|
-
incidentId: data.incidentId.toString(),
|
|
1573
|
-
projectId: incident.projectId.toString(),
|
|
1574
|
-
monitorIds: ((_o = incident.monitors) === null || _o === void 0 ? void 0 : _o.map((monitor) => {
|
|
1575
|
-
var _a;
|
|
1576
|
-
return (_a = monitor._id) === null || _a === void 0 ? void 0 : _a.toString();
|
|
1577
|
-
})) || [],
|
|
1578
|
-
monitorNames: ((_p = incident.monitors) === null || _p === void 0 ? void 0 : _p.map((monitor) => {
|
|
1579
|
-
var _a;
|
|
1580
|
-
return (_a = monitor.name) === null || _a === void 0 ? void 0 : _a.toString();
|
|
1581
|
-
})) || [],
|
|
1582
|
-
incidentSeverityId: (_r = (_q = incident.incidentSeverity) === null || _q === void 0 ? void 0 : _q._id) === null || _r === void 0 ? void 0 : _r.toString(),
|
|
1583
|
-
incidentSeverityName: (_t = (_s = incident.incidentSeverity) === null || _s === void 0 ? void 0 : _s.name) === null || _t === void 0 ? void 0 : _t.toString(),
|
|
1584
|
-
};
|
|
1743
|
+
timeToResolveMetric.attributes = Object.assign({}, baseMetricAttributes);
|
|
1585
1744
|
timeToResolveMetric.attributeKeys = TelemetryUtil.getAttributeKeys(timeToResolveMetric.attributes);
|
|
1586
1745
|
timeToResolveMetric.time =
|
|
1587
1746
|
(resolvedIncidentStateTimeline === null || resolvedIncidentStateTimeline === void 0 ? void 0 : resolvedIncidentStateTimeline.startsAt) ||
|
|
@@ -1611,20 +1770,7 @@ ${incidentSeverity.name}
|
|
|
1611
1770
|
incidentDurationMetric.serviceType = ServiceType.Incident;
|
|
1612
1771
|
incidentDurationMetric.name = IncidentMetricType.IncidentDuration;
|
|
1613
1772
|
incidentDurationMetric.value = OneUptimeDate.getDifferenceInSeconds(incidentEndsAt, incidentStartsAt);
|
|
1614
|
-
incidentDurationMetric.attributes = {
|
|
1615
|
-
incidentId: data.incidentId.toString(),
|
|
1616
|
-
projectId: incident.projectId.toString(),
|
|
1617
|
-
monitorIds: ((_u = incident.monitors) === null || _u === void 0 ? void 0 : _u.map((monitor) => {
|
|
1618
|
-
var _a;
|
|
1619
|
-
return (_a = monitor._id) === null || _a === void 0 ? void 0 : _a.toString();
|
|
1620
|
-
})) || [],
|
|
1621
|
-
monitorNames: ((_v = incident.monitors) === null || _v === void 0 ? void 0 : _v.map((monitor) => {
|
|
1622
|
-
var _a;
|
|
1623
|
-
return (_a = monitor.name) === null || _a === void 0 ? void 0 : _a.toString();
|
|
1624
|
-
})) || [],
|
|
1625
|
-
incidentSeverityId: (_x = (_w = incident.incidentSeverity) === null || _w === void 0 ? void 0 : _w._id) === null || _x === void 0 ? void 0 : _x.toString(),
|
|
1626
|
-
incidentSeverityName: (_z = (_y = incident.incidentSeverity) === null || _y === void 0 ? void 0 : _y.name) === null || _z === void 0 ? void 0 : _z.toString(),
|
|
1627
|
-
};
|
|
1773
|
+
incidentDurationMetric.attributes = Object.assign({}, baseMetricAttributes);
|
|
1628
1774
|
incidentDurationMetric.attributeKeys = TelemetryUtil.getAttributeKeys(incidentDurationMetric.attributes);
|
|
1629
1775
|
incidentDurationMetric.time =
|
|
1630
1776
|
(lastIncidentStateTimeline === null || lastIncidentStateTimeline === void 0 ? void 0 : lastIncidentStateTimeline.startsAt) ||
|
|
@@ -1642,6 +1788,36 @@ ${incidentSeverity.name}
|
|
|
1642
1788
|
// add to map.
|
|
1643
1789
|
metricTypesMap[incidentDurationMetric.name] = metricType;
|
|
1644
1790
|
}
|
|
1791
|
+
// time-in-state metrics — emit one metric per state transition that has a completed duration
|
|
1792
|
+
for (const timeline of incidentStateTimelines) {
|
|
1793
|
+
if (!timeline.startsAt || !timeline.endsAt) {
|
|
1794
|
+
continue;
|
|
1795
|
+
}
|
|
1796
|
+
const stateName = ((_h = (_g = timeline.incidentState) === null || _g === void 0 ? void 0 : _g.name) === null || _h === void 0 ? void 0 : _h.toString()) || "Unknown";
|
|
1797
|
+
const timeInStateMetric = new Metric();
|
|
1798
|
+
timeInStateMetric.projectId = incident.projectId;
|
|
1799
|
+
timeInStateMetric.serviceId = incident.id;
|
|
1800
|
+
timeInStateMetric.serviceType = ServiceType.Incident;
|
|
1801
|
+
timeInStateMetric.name = IncidentMetricType.TimeInState;
|
|
1802
|
+
timeInStateMetric.value = OneUptimeDate.getDifferenceInSeconds(timeline.endsAt, timeline.startsAt);
|
|
1803
|
+
timeInStateMetric.attributes = Object.assign(Object.assign({}, baseMetricAttributes), { incidentStateName: stateName, incidentStateId: (_j = timeline.incidentStateId) === null || _j === void 0 ? void 0 : _j.toString(), isCreatedState: ((_l = (_k = timeline.incidentState) === null || _k === void 0 ? void 0 : _k.isCreatedState) === null || _l === void 0 ? void 0 : _l.toString()) || "false", isAcknowledgedState: ((_o = (_m = timeline.incidentState) === null || _m === void 0 ? void 0 : _m.isAcknowledgedState) === null || _o === void 0 ? void 0 : _o.toString()) || "false", isResolvedState: ((_q = (_p = timeline.incidentState) === null || _p === void 0 ? void 0 : _p.isResolvedState) === null || _q === void 0 ? void 0 : _q.toString()) || "false" });
|
|
1804
|
+
timeInStateMetric.attributeKeys = TelemetryUtil.getAttributeKeys(timeInStateMetric.attributes);
|
|
1805
|
+
timeInStateMetric.time = timeline.startsAt;
|
|
1806
|
+
timeInStateMetric.timeUnixNano = OneUptimeDate.toUnixNano(timeInStateMetric.time);
|
|
1807
|
+
timeInStateMetric.metricPointType = MetricPointType.Sum;
|
|
1808
|
+
itemsToSave.push(timeInStateMetric);
|
|
1809
|
+
}
|
|
1810
|
+
// add metric type for time-in-state to map (only once)
|
|
1811
|
+
if (incidentStateTimelines.some((t) => {
|
|
1812
|
+
return t.startsAt && t.endsAt;
|
|
1813
|
+
})) {
|
|
1814
|
+
const timeInStateMetricType = new MetricType();
|
|
1815
|
+
timeInStateMetricType.name = IncidentMetricType.TimeInState;
|
|
1816
|
+
timeInStateMetricType.description =
|
|
1817
|
+
"Time spent in each incident state (e.g. Created, Investigating, Acknowledged)";
|
|
1818
|
+
timeInStateMetricType.unit = "seconds";
|
|
1819
|
+
metricTypesMap[timeInStateMetricType.name] = timeInStateMetricType;
|
|
1820
|
+
}
|
|
1645
1821
|
await MetricService.createMany({
|
|
1646
1822
|
items: itemsToSave,
|
|
1647
1823
|
props: {
|
|
@@ -1911,7 +2087,7 @@ __decorate([
|
|
|
1911
2087
|
CaptureSpan(),
|
|
1912
2088
|
__metadata("design:type", Function),
|
|
1913
2089
|
__metadata("design:paramtypes", [ObjectID,
|
|
1914
|
-
Array]),
|
|
2090
|
+
Array, Object]),
|
|
1915
2091
|
__metadata("design:returntype", Promise)
|
|
1916
2092
|
], Service.prototype, "markMonitorsActiveForMonitoring", null);
|
|
1917
2093
|
__decorate([
|