@oneuptime/common 12.0.23 → 12.0.24
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/DetectionRule.ts +55 -0
- package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +27 -7
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +67 -0
- package/Models/DatabaseModels/Project.ts +68 -0
- package/Models/DatabaseModels/User.ts +68 -0
- package/Server/API/TelemetryAPI.ts +29 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1789400000000-AddNameToNetworkDeviceDiscoveryScan.ts +28 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1789500000000-AddCampaignUtmFields.ts +49 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1789512000000-AddDetectionRuleDistinctCountColumns.ts +33 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
- package/Server/Middleware/GzipRequestBody.ts +311 -0
- package/Server/Middleware/MultipartFormData.ts +87 -3
- package/Server/Services/DetectionRuleService.ts +73 -6
- package/Server/Services/Index.ts +205 -0
- package/Server/Services/NetworkDeviceDiscoveryScanService.ts +59 -0
- package/Server/Services/NetworkDeviceService.ts +148 -0
- package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +65 -0
- package/Server/Services/OnCallDutyPolicyFeedService.ts +1 -1
- package/Server/Services/ProjectService.ts +29 -19
- package/Server/Services/SecurityEventService.ts +90 -13
- package/Server/Services/StatusPageResourceService.ts +223 -0
- package/Server/Services/TelemetryAttributeService.ts +17 -0
- package/Server/Services/UserService.ts +4 -6
- package/Server/Types/Markdown.ts +161 -67
- package/Server/Utils/AI/Toolbox/OnCallTools.ts +12 -4
- package/Server/Utils/AnalyticsDatabase/Statement.ts +13 -1
- package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +297 -6
- package/Server/Utils/Attribution.ts +4 -0
- package/Server/Utils/Marketing/MarketingEventUtil.ts +45 -7
- package/Server/Utils/SecurityEvent/DetectionRuleEvaluator.ts +55 -3
- package/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.ts +21 -0
- package/Server/Utils/StartServer.ts +12 -32
- package/Server/Utils/Telemetry/LlmCostBudgetEvaluator.ts +101 -4
- package/Server/Utils/Telemetry/LlmMetricSpend.ts +130 -0
- package/Server/Views/Partials/AnalyticsConsent.ejs +159 -102
- package/Server/Views/Partials/Head.ejs +2 -1
- package/Tests/App/Dashboard/AdminUserNotificationMethodsPage.test.tsx +776 -38
- package/Tests/App/Dashboard/CorrelateFilterBuilder.test.tsx +359 -0
- package/Tests/App/Dashboard/CorrelateGraph.test.tsx +865 -0
- package/Tests/App/Dashboard/CorrelationGraph.test.ts +346 -0
- package/Tests/App/Dashboard/CriteriaFilterConditionDropdown.test.tsx +256 -0
- package/Tests/App/Dashboard/CriteriaFilterDefaults.test.ts +738 -0
- package/Tests/App/Dashboard/CriteriaFilterMonitorTypeChange.test.ts +1122 -0
- package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +283 -0
- package/Tests/App/Dashboard/ExternalStatusPageCriteriaFilter.test.ts +407 -0
- package/Tests/App/Dashboard/MetricSeriesInvestigateMenu.test.tsx +5 -14
- package/Tests/App/Dashboard/MonitorCriteriaActionToggles.test.tsx +426 -0
- package/Tests/App/Dashboard/MonitorStepsCriteriaAlignmentWiring.test.tsx +352 -0
- package/Tests/App/Dashboard/OnCallLayerCardOverrides.test.tsx +278 -0
- package/Tests/App/Dashboard/OnCallLayerShiftPreviewOverrides.test.ts +237 -0
- package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +2 -2
- package/Tests/App/Dashboard/OnCallSchedulePreviewOverrides.test.tsx +460 -0
- package/Tests/App/Dashboard/SecurityEventAttributeUtil.test.ts +171 -0
- package/Tests/App/Dashboard/SecurityEventCorrelation.test.ts +857 -0
- package/Tests/App/Dashboard/SecurityEventDetailObservables.test.tsx +194 -0
- package/Tests/App/Dashboard/SecurityEventsDetectionRulesPage.test.tsx +124 -0
- package/Tests/App/Dashboard/SecurityEventsMonitorStepForm.test.tsx +79 -19
- package/Tests/App/Dashboard/SecurityEventsTableColumns.test.tsx +382 -0
- package/Tests/App/StatusPage/BulkAddStatusPageMonitors.test.ts +216 -0
- package/Tests/App/StatusPage/BulkAddStatusPageMonitorsModal.test.tsx +590 -11
- package/Tests/App/StatusPage/StatusPageResourceExplorer.test.tsx +757 -0
- package/Tests/Models/DiscoveryScanNameColumn.test.ts +293 -0
- package/Tests/Server/API/SecurityEventAttributesAPI.test.ts +564 -0
- package/Tests/Server/Infrastructure/Postgres/SchemaMigrationsOrdering.test.ts +120 -4
- package/Tests/Server/Middleware/GzipRequestBody.test.ts +725 -0
- package/Tests/Server/Middleware/MultipartFormData.test.ts +298 -0
- package/Tests/Server/Services/AddDetectionRuleDistinctCountColumnsMigration.test.ts +311 -0
- package/Tests/Server/Services/DetectionRuleService.test.ts +134 -2
- package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +7 -1
- package/Tests/Server/Services/FeedRetentionConsistency.test.ts +131 -0
- package/Tests/Server/Services/NetworkDeviceDiscoveryScanService.test.ts +194 -0
- package/Tests/Server/Services/NetworkDeviceMonitorStatusStamp.test.ts +800 -0
- package/Tests/Server/Services/OnCallScheduleAttachRosterRefresh.test.ts +244 -0
- package/Tests/Server/Services/SecurityEventService.test.ts +376 -0
- package/Tests/Server/Services/StatusPageResourceDuplicates.test.ts +703 -0
- package/Tests/Server/Services/TelemetryAttributeServiceSecurityEvent.test.ts +256 -0
- package/Tests/Server/Types/Workflow/Components/ComponentRegistryParity.test.ts +417 -0
- package/Tests/Server/Utils/AnalyticsDatabase/StatementGeneratorWhereOperators.test.ts +677 -0
- package/Tests/Server/Utils/Marketing/MarketingEventUtil.test.ts +43 -0
- package/Tests/Server/Utils/Monitor/Criteria/ProfileMonitorCriteria.test.ts +15 -11
- package/Tests/Server/Utils/SecurityEvent/DetectionRuleEvaluator.test.ts +369 -8
- package/Tests/Server/Utils/SecurityEvent/SigmaClickhouseCompiler.test.ts +35 -0
- package/Tests/Server/Utils/Telemetry/LlmCostBudgetEvaluator.test.ts +368 -4
- package/Tests/Server/Utils/Telemetry/LlmMetricSpend.test.ts +245 -0
- package/Tests/Server/Views/AnalyticsConsentPartial.test.ts +48 -5
- package/Tests/Types/Code/YamlSyntax.test.ts +396 -0
- package/Tests/Types/Monitor/MetricAndProfileDefaultCriteria.test.ts +957 -0
- package/Tests/Types/Monitor/MonitorCriteriaActionValidation.test.ts +598 -0
- package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +49 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +6 -6
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.test.ts +4 -4
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +4 -3
- package/Tests/Types/Telemetry/LlmMetricConventions.test.ts +193 -0
- package/Tests/UI/Components/AiInvestigationSettingsCard.test.tsx +0 -12
- package/Tests/UI/Components/CardModelDetailEdit.test.tsx +1 -17
- package/Tests/UI/Components/CodeEditor.test.tsx +474 -10
- package/Tests/UI/Components/Detail/YamlField.test.tsx +105 -0
- package/Tests/UI/Components/EntityDropdownLabelsBulkAdd.test.tsx +319 -0
- package/Tests/UI/Components/Forms/FormFieldYaml.test.tsx +231 -0
- package/Tests/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.test.ts +1 -0
- package/Tests/UI/Components/Forms/ValidationYAML.test.ts +234 -0
- package/Tests/UI/Components/ModelTable/AttributeColumns.test.tsx +573 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableAttributeColumns.test.tsx +824 -0
- package/Tests/UI/Components/ModelTable/ColumnCustomizationModalAddableColumns.test.tsx +707 -0
- package/Tests/UI/Components/SideOver.test.tsx +1 -1
- package/Tests/UI/Components/StatusPage/ResourceGridSelection.test.tsx +294 -0
- package/Tests/UI/Components/StatusPage/ResourceListSelection.test.tsx +436 -0
- package/Tests/UI/Components/TableBulkCsvExport.test.tsx +6 -2
- package/Tests/UI/Components/Toggle.test.tsx +25 -0
- package/Tests/UI/Components/YamlEditor.test.tsx +847 -0
- package/Tests/Utils/NetworkDevice/DeviceReachabilityUtil.test.ts +252 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveredHostUtil.test.ts +221 -0
- package/Tests/Utils/NetworkDiscovery/ScanNameUtil.test.ts +312 -0
- package/Tests/Utils/StatusPage/ResourceExplorer.test.ts +468 -0
- package/Tests/Utils/Telemetry/LlmMetricQuery.test.ts +472 -0
- package/Types/Code/YamlSyntax.ts +396 -0
- package/Types/Exception/ExceptionCode.ts +1 -0
- package/Types/Exception/PayloadTooLargeException.ts +8 -0
- package/Types/Marketing/Attribution.ts +10 -0
- package/Types/Marketing/MarketingEvent.ts +4 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +116 -56
- package/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.ts +2 -1
- package/Types/SecurityEvent/DetectionFindingConstants.ts +11 -0
- package/Types/Telemetry/LlmMetricConventions.ts +124 -0
- package/UI/Components/AutocompleteTextInput/AutocompleteTextInput.tsx +3 -0
- package/UI/Components/BulkUpdate/BulkUpdateForm.tsx +10 -1
- package/UI/Components/CodeEditor/CodeEditor.tsx +241 -79
- package/UI/Components/CodeEditor/YamlEditor.tsx +369 -0
- package/UI/Components/Detail/Detail.tsx +10 -0
- package/UI/Components/EntityDropdown/EntityDropdown.tsx +33 -0
- package/UI/Components/Forms/Fields/FormField.tsx +31 -0
- package/UI/Components/Forms/Types/Field.ts +8 -0
- package/UI/Components/Forms/Types/FormFieldSchemaType.ts +1 -0
- package/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.ts +2 -0
- package/UI/Components/Forms/Validation.ts +46 -0
- package/UI/Components/Input/Input.tsx +3 -0
- package/UI/Components/ModelTable/AttributeColumns.tsx +321 -0
- package/UI/Components/ModelTable/BaseModelTable.tsx +263 -14
- package/UI/Components/ModelTable/Column.ts +8 -0
- package/UI/Components/ModelTable/ColumnCustomizationModal.tsx +310 -0
- package/UI/Components/ModelTable/ColumnPreference.ts +13 -1
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesModal.tsx +2 -2
- package/UI/Components/SideOver/SideOver.tsx +5 -5
- package/UI/Components/StatusPage/ResourceGrid.tsx +82 -2
- package/UI/Components/StatusPage/ResourceList.tsx +197 -38
- package/UI/Components/Toggle/Toggle.tsx +9 -1
- package/UI/Components/Types/FieldType.ts +1 -0
- package/Utils/NetworkDevice/DeviceReachabilityUtil.ts +73 -1
- package/Utils/NetworkDiscovery/ScanNameUtil.ts +181 -0
- package/Utils/StatusPage/ResourceExplorer.ts +258 -0
- package/Utils/Telemetry/LlmMetricQuery.ts +204 -0
- package/build/dist/Models/DatabaseModels/DetectionRule.js +57 -0
- package/build/dist/Models/DatabaseModels/DetectionRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +27 -7
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +69 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +76 -0
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/User.js +76 -0
- package/build/dist/Models/DatabaseModels/User.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +17 -0
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789400000000-AddNameToNetworkDeviceDiscoveryScan.js +21 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789400000000-AddNameToNetworkDeviceDiscoveryScan.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789500000000-AddCampaignUtmFields.js +42 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789500000000-AddCampaignUtmFields.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789512000000-AddDetectionRuleDistinctCountColumns.js +22 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789512000000-AddDetectionRuleDistinctCountColumns.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/GzipRequestBody.js +224 -0
- package/build/dist/Server/Middleware/GzipRequestBody.js.map +1 -0
- package/build/dist/Server/Middleware/MultipartFormData.js +71 -2
- package/build/dist/Server/Middleware/MultipartFormData.js.map +1 -1
- package/build/dist/Server/Services/DetectionRuleService.js +49 -4
- package/build/dist/Server/Services/DetectionRuleService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +204 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js +50 -0
- package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceService.js +124 -0
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +68 -13
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyFeedService.js +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyFeedService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +25 -45
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/SecurityEventService.js +57 -5
- package/build/dist/Server/Services/SecurityEventService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageResourceService.js +140 -0
- package/build/dist/Server/Services/StatusPageResourceService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryAttributeService.js +17 -0
- package/build/dist/Server/Services/TelemetryAttributeService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +2 -12
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Types/Markdown.js +147 -61
- package/build/dist/Server/Types/Markdown.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/OnCallTools.js +12 -4
- package/build/dist/Server/Utils/AI/Toolbox/OnCallTools.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js +12 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +246 -9
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
- package/build/dist/Server/Utils/Attribution.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js +27 -7
- package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js +42 -7
- package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.js +18 -0
- package/build/dist/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.js.map +1 -1
- package/build/dist/Server/Utils/StartServer.js +12 -21
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/LlmCostBudgetEvaluator.js +76 -5
- package/build/dist/Server/Utils/Telemetry/LlmCostBudgetEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/LlmMetricSpend.js +102 -0
- package/build/dist/Server/Utils/Telemetry/LlmMetricSpend.js.map +1 -0
- package/build/dist/Types/Code/YamlSyntax.js +212 -0
- package/build/dist/Types/Code/YamlSyntax.js.map +1 -0
- package/build/dist/Types/Exception/ExceptionCode.js +1 -0
- package/build/dist/Types/Exception/ExceptionCode.js.map +1 -1
- package/build/dist/Types/Exception/PayloadTooLargeException.js +8 -0
- package/build/dist/Types/Exception/PayloadTooLargeException.js.map +1 -0
- package/build/dist/Types/Marketing/Attribution.js +10 -0
- package/build/dist/Types/Marketing/Attribution.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +112 -51
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js +2 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js.map +1 -1
- package/build/dist/Types/SecurityEvent/DetectionFindingConstants.js +9 -0
- package/build/dist/Types/SecurityEvent/DetectionFindingConstants.js.map +1 -1
- package/build/dist/Types/Telemetry/LlmMetricConventions.js +98 -0
- package/build/dist/Types/Telemetry/LlmMetricConventions.js.map +1 -0
- package/build/dist/UI/Components/AutocompleteTextInput/AutocompleteTextInput.js +1 -1
- package/build/dist/UI/Components/AutocompleteTextInput/AutocompleteTextInput.js.map +1 -1
- package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js +5 -2
- package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js.map +1 -1
- package/build/dist/UI/Components/CodeEditor/CodeEditor.js +206 -76
- package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
- package/build/dist/UI/Components/CodeEditor/YamlEditor.js +201 -0
- package/build/dist/UI/Components/CodeEditor/YamlEditor.js.map +1 -0
- package/build/dist/UI/Components/Detail/Detail.js +9 -0
- package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
- package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js +16 -1
- package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js +14 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/Forms/Types/Field.js.map +1 -1
- package/build/dist/UI/Components/Forms/Types/FormFieldSchemaType.js +1 -0
- package/build/dist/UI/Components/Forms/Types/FormFieldSchemaType.js.map +1 -1
- package/build/dist/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.js +2 -0
- package/build/dist/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.js.map +1 -1
- package/build/dist/UI/Components/Forms/Validation.js +27 -0
- package/build/dist/UI/Components/Forms/Validation.js.map +1 -1
- package/build/dist/UI/Components/Input/Input.js +1 -1
- package/build/dist/UI/Components/Input/Input.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/AttributeColumns.js +159 -0
- package/build/dist/UI/Components/ModelTable/AttributeColumns.js.map +1 -0
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +179 -17
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/ColumnCustomizationModal.js +133 -2
- package/build/dist/UI/Components/ModelTable/ColumnCustomizationModal.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/ColumnPreference.js +7 -1
- package/build/dist/UI/Components/ModelTable/ColumnPreference.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesModal.js +2 -2
- package/build/dist/UI/Components/SideOver/SideOver.js +5 -5
- package/build/dist/UI/Components/StatusPage/ResourceGrid.js +28 -2
- package/build/dist/UI/Components/StatusPage/ResourceGrid.js.map +1 -1
- package/build/dist/UI/Components/StatusPage/ResourceList.js +87 -20
- package/build/dist/UI/Components/StatusPage/ResourceList.js.map +1 -1
- package/build/dist/UI/Components/Toggle/Toggle.js +9 -1
- package/build/dist/UI/Components/Toggle/Toggle.js.map +1 -1
- package/build/dist/UI/Components/Types/FieldType.js +1 -0
- package/build/dist/UI/Components/Types/FieldType.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js +37 -1
- package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/ScanNameUtil.js +120 -0
- package/build/dist/Utils/NetworkDiscovery/ScanNameUtil.js.map +1 -0
- package/build/dist/Utils/StatusPage/ResourceExplorer.js +171 -0
- package/build/dist/Utils/StatusPage/ResourceExplorer.js.map +1 -1
- package/build/dist/Utils/Telemetry/LlmMetricQuery.js +119 -0
- package/build/dist/Utils/Telemetry/LlmMetricQuery.js.map +1 -0
- package/jest.config.json +2 -0
- package/package.json +1 -1
- package/tsconfig.json +2 -1
- package/Tests/UI/Components/Toast.test.tsx +0 -197
- package/Tests/UI/Components/ToastStacking.test.tsx +0 -198
- package/UI/Components/Toast/Toast.tsx +0 -189
- package/UI/Components/Toast/ToastInit.tsx +0 -110
- package/build/dist/UI/Components/Toast/Toast.js +0 -123
- package/build/dist/UI/Components/Toast/Toast.js.map +0 -1
- package/build/dist/UI/Components/Toast/ToastInit.js +0 -53
- package/build/dist/UI/Components/Toast/ToastInit.js.map +0 -1
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { describe, expect, test } from "@jest/globals";
|
|
2
|
+
import {
|
|
3
|
+
getLayerPreviewEvents,
|
|
4
|
+
LayerPreviewResult,
|
|
5
|
+
} from "../../../../App/FeatureSet/Dashboard/src/Components/OnCallPolicy/OnCallScheduleLayer/LayerShiftPreview";
|
|
6
|
+
import OnCallDutyPolicyScheduleLayer from "../../../Models/DatabaseModels/OnCallDutyPolicyScheduleLayer";
|
|
7
|
+
import OnCallDutyPolicyScheduleLayerUser from "../../../Models/DatabaseModels/OnCallDutyPolicyScheduleLayerUser";
|
|
8
|
+
import User from "../../../Models/DatabaseModels/User";
|
|
9
|
+
import CalendarEvent from "../../../Types/Calendar/CalendarEvent";
|
|
10
|
+
import OneUptimeDate from "../../../Types/Date";
|
|
11
|
+
import EventInterval from "../../../Types/Events/EventInterval";
|
|
12
|
+
import Recurring from "../../../Types/Events/Recurring";
|
|
13
|
+
import ObjectID from "../../../Types/ObjectID";
|
|
14
|
+
import RestrictionTimes, {
|
|
15
|
+
RestrictionType,
|
|
16
|
+
} from "../../../Types/OnCallDutyPolicy/RestrictionTimes";
|
|
17
|
+
import ScheduleShiftUtil, {
|
|
18
|
+
OnCallShift,
|
|
19
|
+
} from "../../../Types/OnCallDutyPolicy/ScheduleShiftUtil";
|
|
20
|
+
import { UserOverrideRecord } from "../../../Types/OnCallDutyPolicy/UserOverrideUtil";
|
|
21
|
+
|
|
22
|
+
/*
|
|
23
|
+
* https://github.com/OneUptime/oneuptime/issues/3411
|
|
24
|
+
*
|
|
25
|
+
* getLayerPreviewEvents is the single source behind the per-layer card's live
|
|
26
|
+
* "<name> on call now" line and the "Who is on call, and when" table under it.
|
|
27
|
+
* It used to return LayerUtil's raw rotation, so during a shift override both
|
|
28
|
+
* kept naming the originally-scheduled user - on the same page whose calendar,
|
|
29
|
+
* and whose alert routing, named the substitute.
|
|
30
|
+
*
|
|
31
|
+
* These tests work at the events level rather than through the React tree: the
|
|
32
|
+
* card derives everything it prints from these events via
|
|
33
|
+
* ScheduleShiftUtil.groupEventsIntoShifts / getCurrentAndNextShift, so pinning
|
|
34
|
+
* the events pins the claim, without a DOM in the way.
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
const USER_A: string = "aaaaaaaa-1111-4111-8111-111111111111";
|
|
38
|
+
const USER_B: string = "bbbbbbbb-2222-4222-8222-222222222222";
|
|
39
|
+
const POLICY_ID: string = "44444444-4444-4444-8444-444444444444";
|
|
40
|
+
const OTHER_POLICY_ID: string = "55555555-5555-4555-8555-555555555555";
|
|
41
|
+
|
|
42
|
+
function makeUser(id: string): User {
|
|
43
|
+
const user: User = new User();
|
|
44
|
+
user.id = new ObjectID(id);
|
|
45
|
+
user.name = `User ${id.slice(0, 4)}` as any;
|
|
46
|
+
user.email = `${id}@example.com` as any;
|
|
47
|
+
return user;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function makeLayerUser(userId: string): OnCallDutyPolicyScheduleLayerUser {
|
|
51
|
+
const layerUser: OnCallDutyPolicyScheduleLayerUser =
|
|
52
|
+
new OnCallDutyPolicyScheduleLayerUser();
|
|
53
|
+
layerUser.userId = new ObjectID(userId);
|
|
54
|
+
layerUser.user = makeUser(userId);
|
|
55
|
+
layerUser.order = 1;
|
|
56
|
+
return layerUser;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/*
|
|
60
|
+
* A 24/7 layer that started a month ago and rotates daily. With a single
|
|
61
|
+
* assigned user it puts exactly one person on call at every instant, so "who
|
|
62
|
+
* does the preview say is on call now" has one correct answer whenever the
|
|
63
|
+
* suite runs.
|
|
64
|
+
*/
|
|
65
|
+
function makeLayer(): OnCallDutyPolicyScheduleLayer {
|
|
66
|
+
const layer: OnCallDutyPolicyScheduleLayer =
|
|
67
|
+
new OnCallDutyPolicyScheduleLayer();
|
|
68
|
+
const now: Date = OneUptimeDate.getCurrentDate();
|
|
69
|
+
|
|
70
|
+
layer.id = new ObjectID("33333333-3333-4333-8333-333333333333");
|
|
71
|
+
layer.startsAt = OneUptimeDate.addRemoveDays(now, -30);
|
|
72
|
+
layer.handOffTime = OneUptimeDate.addRemoveDays(now, -30);
|
|
73
|
+
layer.rotation = Recurring.fromJSON({
|
|
74
|
+
_type: "Recurring",
|
|
75
|
+
value: {
|
|
76
|
+
intervalType: EventInterval.Day,
|
|
77
|
+
intervalCount: { _type: "PositiveNumber", value: 1 },
|
|
78
|
+
},
|
|
79
|
+
} as any) as any;
|
|
80
|
+
|
|
81
|
+
const restrictionTimes: RestrictionTimes = new RestrictionTimes();
|
|
82
|
+
restrictionTimes.restictionType = RestrictionType.None;
|
|
83
|
+
restrictionTimes.dayRestrictionTimes = null;
|
|
84
|
+
layer.restrictionTimes = restrictionTimes as any;
|
|
85
|
+
|
|
86
|
+
return layer;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function override(
|
|
90
|
+
onCallDutyPolicyId: string | null,
|
|
91
|
+
hoursBefore: number = 1,
|
|
92
|
+
hoursAfter: number = 1,
|
|
93
|
+
): UserOverrideRecord {
|
|
94
|
+
const now: Date = OneUptimeDate.getCurrentDate();
|
|
95
|
+
return {
|
|
96
|
+
overrideUserId: USER_A,
|
|
97
|
+
routeAlertsToUserId: USER_B,
|
|
98
|
+
startsAt: OneUptimeDate.addRemoveHours(now, -hoursBefore),
|
|
99
|
+
endsAt: OneUptimeDate.addRemoveHours(now, hoursAfter),
|
|
100
|
+
onCallDutyPolicyId,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function preview(params: {
|
|
105
|
+
overrides?: Array<UserOverrideRecord> | undefined;
|
|
106
|
+
currentOnCallDutyPolicyId?: string | undefined;
|
|
107
|
+
}): LayerPreviewResult {
|
|
108
|
+
return getLayerPreviewEvents({
|
|
109
|
+
layer: makeLayer(),
|
|
110
|
+
users: [makeLayerUser(USER_A)],
|
|
111
|
+
timezone: "UTC",
|
|
112
|
+
numberOfShifts: 6,
|
|
113
|
+
overrides: params.overrides,
|
|
114
|
+
currentOnCallDutyPolicyId: params.currentOnCallDutyPolicyId,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Exactly how the card resolves the name it prints next to the live dot.
|
|
119
|
+
function onCallNowUserId(result: LayerPreviewResult): string | null {
|
|
120
|
+
const shifts: Array<OnCallShift> = ScheduleShiftUtil.groupEventsIntoShifts(
|
|
121
|
+
result.events,
|
|
122
|
+
);
|
|
123
|
+
return (
|
|
124
|
+
ScheduleShiftUtil.getCurrentAndNextShift(shifts, result.now).current
|
|
125
|
+
?.userId || null
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
describe("Per-layer preview honours shift overrides (issue #3411)", () => {
|
|
130
|
+
test("without overrides the rotation user is on call - the baseline the bug hid behind", () => {
|
|
131
|
+
expect(onCallNowUserId(preview({}))).toBe(USER_A);
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
test("a GLOBAL override puts the substitute on call now", () => {
|
|
135
|
+
expect(onCallNowUserId(preview({ overrides: [override(null)] }))).toBe(
|
|
136
|
+
USER_B,
|
|
137
|
+
);
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
test("a POLICY-SCOPED override applies when the layer is previewed in that policy's context", () => {
|
|
141
|
+
expect(
|
|
142
|
+
onCallNowUserId(
|
|
143
|
+
preview({
|
|
144
|
+
overrides: [override(POLICY_ID)],
|
|
145
|
+
currentOnCallDutyPolicyId: POLICY_ID,
|
|
146
|
+
}),
|
|
147
|
+
),
|
|
148
|
+
).toBe(USER_B);
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
test("a POLICY-SCOPED override does NOT apply without a policy context", () => {
|
|
152
|
+
expect(onCallNowUserId(preview({ overrides: [override(POLICY_ID)] }))).toBe(
|
|
153
|
+
USER_A,
|
|
154
|
+
);
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
test("an override scoped to a DIFFERENT policy never applies", () => {
|
|
158
|
+
expect(
|
|
159
|
+
onCallNowUserId(
|
|
160
|
+
preview({
|
|
161
|
+
overrides: [override(OTHER_POLICY_ID)],
|
|
162
|
+
currentOnCallDutyPolicyId: POLICY_ID,
|
|
163
|
+
}),
|
|
164
|
+
),
|
|
165
|
+
).toBe(USER_A);
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
test("the rotation resumes for the original user once the override window ends", () => {
|
|
169
|
+
const result: LayerPreviewResult = preview({
|
|
170
|
+
overrides: [override(null)],
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
/*
|
|
174
|
+
* Read at shift level, the way the card does. An override splits one turn
|
|
175
|
+
* into three segments, so an event-level probe would depend on which side of
|
|
176
|
+
* a rotation boundary "now" happens to land on.
|
|
177
|
+
*/
|
|
178
|
+
const shifts: Array<OnCallShift> = ScheduleShiftUtil.groupEventsIntoShifts(
|
|
179
|
+
result.events,
|
|
180
|
+
);
|
|
181
|
+
|
|
182
|
+
expect(
|
|
183
|
+
ScheduleShiftUtil.getCurrentAndNextShift(shifts, result.now).current
|
|
184
|
+
?.userId,
|
|
185
|
+
).toBe(USER_B);
|
|
186
|
+
|
|
187
|
+
// Two hours out is past the override's end; the layer's own user is back.
|
|
188
|
+
const afterWindow: Date = OneUptimeDate.addRemoveHours(result.now, 2);
|
|
189
|
+
|
|
190
|
+
expect(
|
|
191
|
+
ScheduleShiftUtil.getCurrentAndNextShift(shifts, afterWindow).current
|
|
192
|
+
?.userId,
|
|
193
|
+
).toBe(USER_A);
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
test("the substituted window is bounded by the override, not by the whole turn", () => {
|
|
197
|
+
const result: LayerPreviewResult = preview({
|
|
198
|
+
overrides: [override(null, 1, 1)],
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
const covering: CalendarEvent | undefined = result.events.find(
|
|
202
|
+
(event: CalendarEvent) => {
|
|
203
|
+
return event.title === USER_B;
|
|
204
|
+
},
|
|
205
|
+
);
|
|
206
|
+
|
|
207
|
+
expect(covering).toBeDefined();
|
|
208
|
+
|
|
209
|
+
/*
|
|
210
|
+
* The substitution must not swallow the rest of the turn. Two hours of
|
|
211
|
+
* override cannot produce a segment longer than two hours - a check that
|
|
212
|
+
* would fail if a future change substituted whole events instead of
|
|
213
|
+
* splitting them.
|
|
214
|
+
*/
|
|
215
|
+
const seconds: number = OneUptimeDate.getDifferenceInSeconds(
|
|
216
|
+
covering!.end,
|
|
217
|
+
covering!.start,
|
|
218
|
+
);
|
|
219
|
+
expect(seconds).toBeLessThanOrEqual(2 * 60 * 60 + 5);
|
|
220
|
+
expect(seconds).toBeGreaterThan(0);
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
test("an empty override list leaves the events untouched", () => {
|
|
224
|
+
const withEmpty: LayerPreviewResult = preview({ overrides: [] });
|
|
225
|
+
const without: LayerPreviewResult = preview({});
|
|
226
|
+
|
|
227
|
+
expect(
|
|
228
|
+
withEmpty.events.map((e: CalendarEvent) => {
|
|
229
|
+
return e.title;
|
|
230
|
+
}),
|
|
231
|
+
).toEqual(
|
|
232
|
+
without.events.map((e: CalendarEvent) => {
|
|
233
|
+
return e.title;
|
|
234
|
+
}),
|
|
235
|
+
);
|
|
236
|
+
});
|
|
237
|
+
});
|
|
@@ -2237,7 +2237,7 @@ describe("On-call readiness page", () => {
|
|
|
2237
2237
|
|
|
2238
2238
|
selectResponder("Zed Unreachable");
|
|
2239
2239
|
|
|
2240
|
-
expect(screen.getByText("1
|
|
2240
|
+
expect(screen.getByText("1 Responder Selected")).toBeInTheDocument();
|
|
2241
2241
|
expect(screen.getByText("Bulk Actions")).toBeInTheDocument();
|
|
2242
2242
|
});
|
|
2243
2243
|
|
|
@@ -2639,7 +2639,7 @@ describe("On-call readiness page", () => {
|
|
|
2639
2639
|
test("the selection survives, so the run can be retried", async () => {
|
|
2640
2640
|
await runFailingReminder();
|
|
2641
2641
|
|
|
2642
|
-
expect(screen.getByText("1
|
|
2642
|
+
expect(screen.getByText("1 Responder Selected")).toBeInTheDocument();
|
|
2643
2643
|
});
|
|
2644
2644
|
|
|
2645
2645
|
test("a non-200 answer is a failure, not a silent success", async () => {
|