@oneuptime/common 11.7.1 → 11.7.2
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/DashboardDomain.ts +1 -0
- package/Models/DatabaseModels/Incident.ts +2 -0
- package/Models/DatabaseModels/IncidentEpisode.ts +1 -0
- package/Models/DatabaseModels/IncidentEpisodePublicNote.ts +1 -0
- package/Models/DatabaseModels/IncidentEpisodeStateTimeline.ts +1 -0
- package/Models/DatabaseModels/IncidentPublicNote.ts +1 -0
- package/Models/DatabaseModels/IncidentStateTimeline.ts +1 -0
- package/Models/DatabaseModels/Monitor.ts +1 -0
- package/Models/DatabaseModels/MonitorStatusTimeline.ts +1 -0
- package/Models/DatabaseModels/NetworkSite.ts +1 -0
- package/Models/DatabaseModels/NetworkSiteStatusTimeline.ts +1 -0
- package/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.ts +1 -0
- package/Models/DatabaseModels/OnCallDutyPolicySchedule.ts +2 -0
- package/Models/DatabaseModels/Probe.ts +13 -13
- package/Models/DatabaseModels/ScheduledMaintenance.ts +1 -0
- package/Models/DatabaseModels/ScheduledMaintenancePublicNote.ts +1 -0
- package/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.ts +1 -0
- package/Models/DatabaseModels/ScheduledMaintenanceTemplate.ts +1 -0
- package/Models/DatabaseModels/StatusPage.ts +1 -0
- package/Models/DatabaseModels/StatusPageAnnouncement.ts +1 -0
- package/Models/DatabaseModels/StatusPageDomain.ts +1 -0
- package/Models/DatabaseModels/WorkspaceNotificationSummary.ts +1 -0
- package/Models/DatabaseModels/WorkspaceProjectAuthToken.ts +11 -0
- package/Server/API/BaseAPI.ts +17 -1
- package/Server/API/CommonAPI.ts +32 -0
- package/Server/API/MicrosoftTeamsAPI.ts +99 -2
- package/Server/API/ProbeAPI.ts +2 -0
- package/Server/API/SlackAPI.ts +62 -0
- package/Server/API/StatusPageAPI.ts +157 -192
- package/Server/Infrastructure/Postgres/SchemaMigrations/1785140242697-AddHotQueryIndexes.ts +89 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1785148065137-AddHotQueryIndexesSecondPass.ts +61 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1785240000000-RepairCrossProjectMonitorStatusReferences.ts +280 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
- package/Server/Services/DatabaseService.ts +11 -3
- package/Server/Services/MonitorGroupService.ts +145 -0
- package/Server/Services/MonitorService.ts +231 -30
- package/Server/Services/ProbeService.ts +319 -16
- package/Server/Services/StatusPageService.ts +72 -42
- package/Server/Services/WorkspaceNotificationRuleService.ts +232 -2
- package/Server/Utils/Database/PostgresErrorTranslator.ts +131 -0
- package/Server/Utils/Monitor/MonitorResource.ts +88 -35
- package/Server/Utils/Monitor/MonitorStatusTimeline.ts +21 -1
- package/Server/Utils/Monitor/MonitorStepsProjectValidator.ts +158 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +706 -6
- package/Tests/Models/DatabaseModels/ProbeColumnAccessControl.test.ts +103 -0
- package/Tests/Server/API/BaseAPIUpdateNoOp.test.ts +135 -0
- package/Tests/Server/API/CommonAPIAuthGuard.test.ts +317 -0
- package/Tests/Server/API/MicrosoftTeamsManifest.test.ts +228 -0
- package/Tests/Server/API/ProbeAPI.test.ts +6 -0
- package/Tests/Server/API/ZZVerifyChatsAuth.test.ts +167 -0
- package/Tests/Server/Services/AddHotQueryIndexesMigration.test.ts +255 -0
- package/Tests/Server/Services/AddHotQueryIndexesSecondPassMigration.test.ts +258 -0
- package/Tests/Server/Services/DatabaseServiceSanitizeUpdateData.test.ts +1 -1
- package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +121 -0
- package/Tests/Server/Services/HeartbeatWriteFastPathSafety.test.ts +200 -0
- package/Tests/Server/Services/HookFreeWriteSafetySecondPass.test.ts +181 -0
- package/Tests/Server/Services/MonitorGroupServiceBatchedStatuses.test.ts +513 -0
- package/Tests/Server/Services/MonitorResourceProbeAgreementReuse.test.ts +492 -0
- package/Tests/Server/Services/MonitorServiceProbeSelection.test.ts +401 -0
- package/Tests/Server/Services/MonitorStatusTimelineFastPath.test.ts +453 -0
- package/Tests/Server/Services/ProbeAuthKeyCacheAndHeartbeat.test.ts +679 -0
- package/Tests/Server/Services/ServiceLevelObjectiveService.test.ts +3 -3
- package/Tests/Server/Services/StatusPageDomainResolutionCache.test.ts +245 -0
- package/Tests/Server/Services/StatusPageOverviewTimelineWindow.test.ts +283 -0
- package/Tests/Server/Services/StatusPageServiceMcp.test.ts +17 -1
- package/Tests/Server/Services/StatusPageServiceMonitorGroupBatching.test.ts +331 -0
- package/Tests/Server/Services/UserOnCallLogClaimNotificationRule.test.ts +12 -12
- package/Tests/Server/Services/WorkspaceNotificationRuleChats.test.ts +1390 -0
- package/Tests/Server/Utils/AI/Insights/InsightFixRouting.test.ts +4 -4
- package/Tests/Server/Utils/AI/Insights/InsightScanner.test.ts +2 -2
- package/Tests/Server/Utils/AI/Insights/InsightStore.test.ts +1 -3
- package/Tests/Server/Utils/AI/Insights/InsightStoreHardening.test.ts +1 -3
- package/Tests/Server/Utils/AI/Insights/InsightTriage.test.ts +1 -1
- package/Tests/Server/Utils/AI/Insights/InsightTriageRunner.test.ts +5 -5
- package/Tests/Server/Utils/Alert/AlertPrivacyFilter.test.ts +187 -0
- package/Tests/Server/Utils/AlertEpisode/AlertEpisodePrivacyFilter.test.ts +170 -0
- package/Tests/Server/Utils/Database/PostgresErrorTranslator.test.ts +125 -0
- package/Tests/Server/Utils/Incident/IncidentPrivacyFilter.test.ts +264 -0
- package/Tests/Server/Utils/IncidentEpisode/IncidentEpisodePrivacyFilter.test.ts +175 -0
- package/Tests/Server/Utils/Monitor/MonitorStepsProjectValidator.test.ts +181 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +1 -1
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +2 -2
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsChannelsList.test.ts +341 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsChats.test.ts +2175 -0
- package/Tests/Server/Utils/Workspace/SlackChannelsList.test.ts +585 -0
- package/Tests/Types/Billing/MeteredPlan.test.ts +46 -0
- package/Tests/Types/Workspace/NotificationRules/NotificationRuleCondition.test.ts +219 -1
- package/Tests/UI/Components/BulkUpdateForm.test.tsx +174 -0
- package/Tests/UI/Components/CardModelDetailEdit.test.tsx +315 -0
- package/Tests/UI/Components/ModelDetailSelect.test.tsx +229 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableBulkSelectAll.test.tsx +1258 -0
- package/Tests/UI/Components/ModelTableExportFromColumns.test.ts +153 -0
- package/Tests/UI/Components/MonacoLoader.test.ts +67 -0
- package/Tests/UI/Components/MonacoRuntime.test.ts +121 -0
- package/Tests/UI/Components/TableBulkCsvExport.test.tsx +212 -3
- package/Tests/UI/Utils/Project.test.ts +809 -0
- package/Tests/UI/Utils/TableColumnsToCsv.test.ts +360 -0
- package/Tests/Utils/Alerts/AlertMetricType.test.ts +143 -0
- package/Tests/Utils/Dashboard/VariableUrlState.test.ts +219 -0
- package/Tests/Utils/Incident/IncidentMetricType.test.ts +174 -0
- package/Tests/Utils/Monitor/MonitorProbeSelectionUtil.test.ts +145 -0
- package/Tests/Utils/StatusPage/ResourceUptime.test.ts +263 -0
- package/Types/Workspace/NotificationRules/BaseNotificationRule.ts +4 -0
- package/Types/Workspace/NotificationRules/NotificationRuleCondition.ts +25 -10
- package/Types/Workspace/WorkspaceMessagePayload.ts +1 -0
- package/UI/Components/BulkUpdate/BulkUpdateForm.tsx +63 -8
- package/UI/Components/CodeEditor/CodeEditor.tsx +3 -0
- package/UI/Components/CodeEditor/MonacoLoader.ts +36 -0
- package/UI/Components/Forms/ModelForm.tsx +41 -18
- package/UI/Components/ModelDetail/CardModelDetail.tsx +23 -1
- package/UI/Components/ModelDetail/ModelDetail.tsx +46 -1
- package/UI/Components/ModelTable/BaseModelTable.tsx +300 -30
- package/UI/Components/ModelTable/Column.ts +12 -0
- package/UI/Components/ModelTable/ExportFromColumns.ts +57 -0
- package/UI/Components/Navbar/NavBar.tsx +66 -1
- package/UI/Components/Table/Table.tsx +52 -13
- package/UI/Components/Table/Types/Column.ts +18 -0
- package/UI/Utils/Project.ts +214 -18
- package/UI/Utils/TableColumnsToCsv.ts +86 -6
- package/UI/esbuild-config.js +34 -0
- package/Utils/Monitor/MonitorProbeSelectionUtil.ts +72 -0
- package/build/dist/Models/DatabaseModels/DashboardDomain.js +1 -0
- package/build/dist/Models/DatabaseModels/DashboardDomain.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Incident.js +2 -0
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisode.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisode.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentPublicNote.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentPublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Monitor.js +1 -0
- package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorStatusTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/MonitorStatusTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSite.js +1 -0
- package/build/dist/Models/DatabaseModels/NetworkSite.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSiteStatusTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/NetworkSiteStatusTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js +1 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js +2 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Probe.js +13 -13
- package/build/dist/Models/DatabaseModels/Probe.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPage.js +1 -0
- package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js +1 -0
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageDomain.js +1 -0
- package/build/dist/Models/DatabaseModels/StatusPageDomain.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkspaceNotificationSummary.js +1 -0
- package/build/dist/Models/DatabaseModels/WorkspaceNotificationSummary.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkspaceProjectAuthToken.js.map +1 -1
- package/build/dist/Server/API/BaseAPI.js +12 -1
- package/build/dist/Server/API/BaseAPI.js.map +1 -1
- package/build/dist/Server/API/CommonAPI.js +21 -0
- package/build/dist/Server/API/CommonAPI.js.map +1 -1
- package/build/dist/Server/API/MicrosoftTeamsAPI.js +72 -2
- package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
- package/build/dist/Server/API/ProbeAPI.js +2 -0
- package/build/dist/Server/API/ProbeAPI.js.map +1 -1
- package/build/dist/Server/API/SlackAPI.js +44 -0
- package/build/dist/Server/API/SlackAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +98 -152
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785140242697-AddHotQueryIndexes.js +36 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785140242697-AddHotQueryIndexes.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785148065137-AddHotQueryIndexesSecondPass.js +26 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785148065137-AddHotQueryIndexesSecondPass.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785240000000-RepairCrossProjectMonitorStatusReferences.js +254 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785240000000-RepairCrossProjectMonitorStatusReferences.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +10 -2
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/MonitorGroupService.js +118 -0
- package/build/dist/Server/Services/MonitorGroupService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +198 -24
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/ProbeService.js +238 -9
- package/build/dist/Server/Services/ProbeService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageService.js +46 -39
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/WorkspaceNotificationRuleService.js +178 -3
- package/build/dist/Server/Services/WorkspaceNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js +80 -0
- package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorResource.js +67 -29
- package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorStatusTimeline.js +31 -14
- package/build/dist/Server/Utils/Monitor/MonitorStatusTimeline.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorStepsProjectValidator.js +117 -0
- package/build/dist/Server/Utils/Monitor/MonitorStepsProjectValidator.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +549 -7
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js +17 -7
- package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js.map +1 -1
- package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js +37 -11
- package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js.map +1 -1
- package/build/dist/UI/Components/CodeEditor/CodeEditor.js +2 -0
- package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
- package/build/dist/UI/Components/CodeEditor/MonacoLoader.js +34 -0
- package/build/dist/UI/Components/CodeEditor/MonacoLoader.js.map +1 -0
- package/build/dist/UI/Components/Forms/ModelForm.js +37 -17
- package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
- package/build/dist/UI/Components/ModelDetail/CardModelDetail.js +22 -1
- package/build/dist/UI/Components/ModelDetail/CardModelDetail.js.map +1 -1
- package/build/dist/UI/Components/ModelDetail/ModelDetail.js +31 -1
- package/build/dist/UI/Components/ModelDetail/ModelDetail.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +234 -21
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/ExportFromColumns.js +30 -0
- package/build/dist/UI/Components/ModelTable/ExportFromColumns.js.map +1 -0
- package/build/dist/UI/Components/Navbar/NavBar.js +39 -1
- package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
- package/build/dist/UI/Components/Table/Table.js +31 -11
- package/build/dist/UI/Components/Table/Table.js.map +1 -1
- package/build/dist/UI/Utils/Project.js +161 -15
- package/build/dist/UI/Utils/Project.js.map +1 -1
- package/build/dist/UI/Utils/TableColumnsToCsv.js +67 -6
- package/build/dist/UI/Utils/TableColumnsToCsv.js.map +1 -1
- package/build/dist/Utils/Monitor/MonitorProbeSelectionUtil.js +52 -0
- package/build/dist/Utils/Monitor/MonitorProbeSelectionUtil.js.map +1 -0
- package/package.json +4 -3
|
@@ -8,22 +8,149 @@ import { SubscriptionStatusUtil, } from "../../Types/Billing/SubscriptionStatus"
|
|
|
8
8
|
import Navigation from "./Navigation";
|
|
9
9
|
import SessionStorage from "./SessionStorage";
|
|
10
10
|
import Telemetry from "./Telemetry/Telemetry";
|
|
11
|
+
/**
|
|
12
|
+
* Session storage key that pins a browser tab to the project it is showing.
|
|
13
|
+
* Session storage (and not local storage) so two tabs can show two different
|
|
14
|
+
* projects at the same time.
|
|
15
|
+
*/
|
|
16
|
+
export const CURRENT_PROJECT_ID_STORAGE_KEY = "current_project_id";
|
|
17
|
+
/**
|
|
18
|
+
* Local storage key that remembers the last project the user opened on this
|
|
19
|
+
* browser. Unlike {@link CURRENT_PROJECT_ID_STORAGE_KEY} this survives closing
|
|
20
|
+
* the tab, which is what makes the dashboard reopen on the project the user
|
|
21
|
+
* left off on instead of always falling back to the first project.
|
|
22
|
+
*/
|
|
23
|
+
export const LAST_ACCESSED_PROJECT_ID_STORAGE_KEY = "last_accessed_project_id";
|
|
11
24
|
export default class ProjectUtil {
|
|
25
|
+
/**
|
|
26
|
+
* The project the user is currently looking at, resolved in priority order:
|
|
27
|
+
*
|
|
28
|
+
* 1. `/dashboard/:projectId/...` in the URL - the page the user actually
|
|
29
|
+
* opened, so a deep link always wins over anything we have cached.
|
|
30
|
+
* 2. `current_project_id` in session storage - keeps this tab on the project
|
|
31
|
+
* it was already showing while the user moves around routes that do not
|
|
32
|
+
* carry a project id (e.g. `/dashboard`).
|
|
33
|
+
* 3. `last_accessed_project_id` in local storage - the project this user last
|
|
34
|
+
* opened on this browser, so closing the tab and coming back to
|
|
35
|
+
* `/dashboard` reopens that project rather than the first one.
|
|
36
|
+
*/
|
|
12
37
|
static getCurrentProjectId() {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
return new ObjectID(currentProjectId);
|
|
38
|
+
const projectIdInUrl = this.getProjectIdFromUrl();
|
|
39
|
+
if (projectIdInUrl) {
|
|
40
|
+
return projectIdInUrl;
|
|
17
41
|
}
|
|
18
|
-
|
|
19
|
-
if (
|
|
20
|
-
|
|
42
|
+
const projectIdInSession = this.toProjectId(SessionStorage.getItem(CURRENT_PROJECT_ID_STORAGE_KEY));
|
|
43
|
+
if (projectIdInSession) {
|
|
44
|
+
return projectIdInSession;
|
|
21
45
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
46
|
+
return this.getLastAccessedProjectId();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* The project id in the current URL, if the user is on a project scoped route
|
|
50
|
+
* like `/dashboard/:projectId/...`. Returns null on routes that carry no
|
|
51
|
+
* project id (`/dashboard`, `/dashboard/welcome`, ...).
|
|
52
|
+
*/
|
|
53
|
+
static getProjectIdFromUrl() {
|
|
54
|
+
const projectId = Navigation.getFirstParam(2);
|
|
55
|
+
if (!projectId || projectId.includes(":projectId")) {
|
|
56
|
+
return null;
|
|
25
57
|
}
|
|
26
|
-
return
|
|
58
|
+
return this.toProjectId(projectId);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* The last project this user opened on this browser. Persisted in local
|
|
62
|
+
* storage so it outlives the tab. It is cleared on logout (which clears all
|
|
63
|
+
* of local storage) and when the project is deleted.
|
|
64
|
+
*/
|
|
65
|
+
static getLastAccessedProjectId() {
|
|
66
|
+
return this.toProjectId(LocalStorage.getItem(LAST_ACCESSED_PROJECT_ID_STORAGE_KEY));
|
|
67
|
+
}
|
|
68
|
+
static setLastAccessedProjectId(projectId) {
|
|
69
|
+
const id = this.toProjectId(projectId);
|
|
70
|
+
if (!id) {
|
|
71
|
+
// Never persist junk - an unusable value would only shadow the fallbacks.
|
|
72
|
+
this.clearLastAccessedProjectId();
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
LocalStorage.setItem(LAST_ACCESSED_PROJECT_ID_STORAGE_KEY, id.toString());
|
|
76
|
+
}
|
|
77
|
+
static clearLastAccessedProjectId() {
|
|
78
|
+
LocalStorage.removeItem(LAST_ACCESSED_PROJECT_ID_STORAGE_KEY);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Picks the project the dashboard should load out of the projects the user
|
|
82
|
+
* has access to.
|
|
83
|
+
*
|
|
84
|
+
* Candidates are tried in order - current project (URL / this tab), then the
|
|
85
|
+
* last project opened on this browser, then the first project the user has
|
|
86
|
+
* access to. A candidate that is not in `projects` is skipped, because the
|
|
87
|
+
* user may have left, lost access to, or deleted it since.
|
|
88
|
+
*/
|
|
89
|
+
static getProjectToSelect(data) {
|
|
90
|
+
const projects = this.getSelectableProjects(data.projects);
|
|
91
|
+
const candidateIds = [
|
|
92
|
+
data.currentProjectId,
|
|
93
|
+
data.lastAccessedProjectId,
|
|
94
|
+
];
|
|
95
|
+
for (const candidateId of candidateIds) {
|
|
96
|
+
if (!candidateId) {
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
const project = projects.find((project) => {
|
|
100
|
+
var _a;
|
|
101
|
+
return ((_a = project._id) === null || _a === void 0 ? void 0 : _a.toString()) === candidateId.toString();
|
|
102
|
+
});
|
|
103
|
+
if (project) {
|
|
104
|
+
return project;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return projects[0] || null;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* {@link getProjectToSelect} with the candidates read off storage / the URL.
|
|
111
|
+
*/
|
|
112
|
+
static getProjectToLoad(projects) {
|
|
113
|
+
return this.getProjectToSelect({
|
|
114
|
+
projects: projects,
|
|
115
|
+
currentProjectId: this.getCurrentProjectId(),
|
|
116
|
+
lastAccessedProjectId: this.getLastAccessedProjectId(),
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* The project the dashboard should switch to now that the list of projects
|
|
121
|
+
* the user has access to has (re)loaded, or null when whatever is already
|
|
122
|
+
* selected should stand.
|
|
123
|
+
*
|
|
124
|
+
* A selection is left alone as long as the user still has access to it -
|
|
125
|
+
* otherwise a project the user just picked (or just created) would be
|
|
126
|
+
* overruled by whatever we happened to have remembered.
|
|
127
|
+
*/
|
|
128
|
+
static getProjectToSelectOnProjectsLoaded(data) {
|
|
129
|
+
var _a, _b;
|
|
130
|
+
const projects = this.getSelectableProjects(data.projects);
|
|
131
|
+
if (projects.length === 0) {
|
|
132
|
+
// Nothing to select yet - the list is still loading, or the user has no projects.
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
const selectedProjectId = (_b = (_a = data.selectedProject) === null || _a === void 0 ? void 0 : _a._id) === null || _b === void 0 ? void 0 : _b.toString();
|
|
136
|
+
const isSelectionStillAccessible = Boolean(selectedProjectId &&
|
|
137
|
+
projects.some((project) => {
|
|
138
|
+
var _a;
|
|
139
|
+
return ((_a = project._id) === null || _a === void 0 ? void 0 : _a.toString()) === selectedProjectId;
|
|
140
|
+
}));
|
|
141
|
+
if (isSelectionStillAccessible) {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
return this.getProjectToLoad(projects);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* The projects that can actually be opened - a project without an id cannot
|
|
148
|
+
* be navigated to (`/dashboard/undefined`), so it is never a candidate.
|
|
149
|
+
*/
|
|
150
|
+
static getSelectableProjects(projects) {
|
|
151
|
+
return (projects || []).filter((project) => {
|
|
152
|
+
return Boolean(project === null || project === void 0 ? void 0 : project._id);
|
|
153
|
+
});
|
|
27
154
|
}
|
|
28
155
|
static setIsSubscriptionInactiveOrOverdue(data) {
|
|
29
156
|
var _a;
|
|
@@ -45,10 +172,13 @@ export default class ProjectUtil {
|
|
|
45
172
|
static getCurrentProject() {
|
|
46
173
|
var _a;
|
|
47
174
|
const currentProjectId = (_a = this.getCurrentProjectId()) === null || _a === void 0 ? void 0 : _a.toString();
|
|
48
|
-
if (!
|
|
175
|
+
if (!currentProjectId) {
|
|
49
176
|
return null;
|
|
50
177
|
}
|
|
51
178
|
const projectJson = LocalStorage.getItem(`project_${currentProjectId}`);
|
|
179
|
+
if (!projectJson) {
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
52
182
|
return BaseModel.fromJSON(projectJson, Project);
|
|
53
183
|
}
|
|
54
184
|
static setCurrentProject(project) {
|
|
@@ -58,7 +188,9 @@ export default class ProjectUtil {
|
|
|
58
188
|
project = BaseModel.toJSON(project, Project);
|
|
59
189
|
}
|
|
60
190
|
LocalStorage.setItem(`project_${currentProjectId}`, project);
|
|
61
|
-
SessionStorage.setItem(
|
|
191
|
+
SessionStorage.setItem(CURRENT_PROJECT_ID_STORAGE_KEY, currentProjectId);
|
|
192
|
+
// Remember this project for the next time the user opens the dashboard.
|
|
193
|
+
this.setLastAccessedProjectId(currentProjectId);
|
|
62
194
|
// Keep RUM span context in sync with the project being viewed.
|
|
63
195
|
if (currentProjectId) {
|
|
64
196
|
Telemetry.setGlobalAttributes({ projectId: currentProjectId });
|
|
@@ -67,8 +199,15 @@ export default class ProjectUtil {
|
|
|
67
199
|
static clearCurrentProject() {
|
|
68
200
|
var _a;
|
|
69
201
|
const currentProjectId = (_a = this.getCurrentProjectId()) === null || _a === void 0 ? void 0 : _a.toString();
|
|
70
|
-
|
|
71
|
-
|
|
202
|
+
if (currentProjectId) {
|
|
203
|
+
LocalStorage.removeItem(`project_${currentProjectId}`);
|
|
204
|
+
}
|
|
205
|
+
SessionStorage.removeItem(CURRENT_PROJECT_ID_STORAGE_KEY);
|
|
206
|
+
/*
|
|
207
|
+
* The project is gone (or the user is leaving it), so it must not be
|
|
208
|
+
* reopened the next time the dashboard loads.
|
|
209
|
+
*/
|
|
210
|
+
this.clearLastAccessedProjectId();
|
|
72
211
|
}
|
|
73
212
|
static getCurrentPlan() {
|
|
74
213
|
if (!BILLING_ENABLED) {
|
|
@@ -80,5 +219,12 @@ export default class ProjectUtil {
|
|
|
80
219
|
}
|
|
81
220
|
return SubscriptionPlan.getPlanType(project.paymentProviderPlanId, getAllEnvVars());
|
|
82
221
|
}
|
|
222
|
+
static toProjectId(value) {
|
|
223
|
+
const id = value === null || value === void 0 ? void 0 : value.toString();
|
|
224
|
+
if (id && ObjectID.isValidUUID(id)) {
|
|
225
|
+
return new ObjectID(id);
|
|
226
|
+
}
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
83
229
|
}
|
|
84
230
|
//# sourceMappingURL=Project.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Project.js","sourceRoot":"","sources":["../../../../UI/Utils/Project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,SAAS,MAAM,iEAAiE,CAAC;AACxF,OAAO,gBAEN,MAAM,sCAAsC,CAAC;AAE9C,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,OAAO,MAAM,qCAAqC,CAAC;AAC1D,OAA2B,EACzB,sBAAsB,GACvB,MAAM,wCAAwC,CAAC;AAChD,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,SAAS,MAAM,uBAAuB,CAAC;AAE9C,MAAM,CAAC,OAAO,OAAO,WAAW;
|
|
1
|
+
{"version":3,"file":"Project.js","sourceRoot":"","sources":["../../../../UI/Utils/Project.ts"],"names":[],"mappings":"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"}
|
|
@@ -198,27 +198,88 @@ export default class TableColumnsToCsv {
|
|
|
198
198
|
}
|
|
199
199
|
return null;
|
|
200
200
|
}
|
|
201
|
+
/*
|
|
202
|
+
* The fields a column contributes to the export. A ModelTable column can
|
|
203
|
+
* declare several (a cell that renders hosts + clusters + services in one
|
|
204
|
+
* place), and BaseModelTable forwards all of them as exportKeys; `key`
|
|
205
|
+
* alone is only the first. Falls back to the single key for tables that
|
|
206
|
+
* build their Table columns by hand.
|
|
207
|
+
*/
|
|
208
|
+
static getExportKeys(column) {
|
|
209
|
+
if (column.exportKeys && column.exportKeys.length > 0) {
|
|
210
|
+
return column.exportKeys;
|
|
211
|
+
}
|
|
212
|
+
if (column.key === null || column.key === undefined) {
|
|
213
|
+
return [];
|
|
214
|
+
}
|
|
215
|
+
return [String(column.key)];
|
|
216
|
+
}
|
|
217
|
+
/*
|
|
218
|
+
* A column that renders entirely through getElement still has to declare a
|
|
219
|
+
* field so the row gets fetched at all, and the convention for that is
|
|
220
|
+
* `field: { _id: true }` - the "Owners" column on alerts, incidents,
|
|
221
|
+
* monitors and friends. The id is plumbing, not the cell's value, so
|
|
222
|
+
* exporting it writes a raw UUID under a header like "Owners". Treat such a
|
|
223
|
+
* column as presentational and leave it out, the same way a column with no
|
|
224
|
+
* key at all is left out. A column that genuinely shows the id says so with
|
|
225
|
+
* FieldType.ObjectID, and one that wants its rendered content in the file
|
|
226
|
+
* says so with getExportValue.
|
|
227
|
+
*/
|
|
228
|
+
static isPlaceholderIdColumn(column) {
|
|
229
|
+
if (!column.getElement) {
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
232
|
+
if (column.type === FieldType.ObjectID) {
|
|
233
|
+
return false;
|
|
234
|
+
}
|
|
235
|
+
const keys = this.getExportKeys(column);
|
|
236
|
+
return keys.length === 1 && keys[0] === "_id";
|
|
237
|
+
}
|
|
201
238
|
/*
|
|
202
239
|
* Columns that can be exported: everything except the Actions column (which
|
|
203
|
-
* only holds buttons)
|
|
240
|
+
* only holds buttons), columns that opted out, columns without a data key
|
|
241
|
+
* (purely presentational), and placeholder id columns.
|
|
204
242
|
*/
|
|
205
243
|
static getExportableColumns(columns) {
|
|
206
244
|
return (columns || []).filter((column) => {
|
|
207
245
|
if (column.type === FieldType.Actions) {
|
|
208
246
|
return false;
|
|
209
247
|
}
|
|
210
|
-
if (column.
|
|
248
|
+
if (column.disableCsvExport) {
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
// An explicit export value makes even a keyless column exportable.
|
|
252
|
+
if (column.getExportValue) {
|
|
253
|
+
return true;
|
|
254
|
+
}
|
|
255
|
+
if (this.getExportKeys(column).length === 0) {
|
|
256
|
+
return false;
|
|
257
|
+
}
|
|
258
|
+
if (this.isPlaceholderIdColumn(column)) {
|
|
211
259
|
return false;
|
|
212
260
|
}
|
|
213
261
|
return true;
|
|
214
262
|
});
|
|
215
263
|
}
|
|
216
264
|
static getCellValue(item, column) {
|
|
217
|
-
if (column.
|
|
218
|
-
return "";
|
|
265
|
+
if (column.getExportValue) {
|
|
266
|
+
return column.getExportValue(item) || "";
|
|
267
|
+
}
|
|
268
|
+
/*
|
|
269
|
+
* Every declared field goes into the one cell, joined the same way a
|
|
270
|
+
* multi-value field is, so a cell that renders several relations exports
|
|
271
|
+
* all of them. Blanks are dropped (only one of the relations is usually
|
|
272
|
+
* set) and repeats are collapsed (the same entity reachable through two
|
|
273
|
+
* of them should not be listed twice).
|
|
274
|
+
*/
|
|
275
|
+
const values = [];
|
|
276
|
+
for (const key of this.getExportKeys(column)) {
|
|
277
|
+
const formatted = this.formatValueForCsv(this.getRawValueByPath(item, key), column.type);
|
|
278
|
+
if (formatted.length > 0 && !values.includes(formatted)) {
|
|
279
|
+
values.push(formatted);
|
|
280
|
+
}
|
|
219
281
|
}
|
|
220
|
-
|
|
221
|
-
return this.formatValueForCsv(rawValue, column.type);
|
|
282
|
+
return values.join("; ");
|
|
222
283
|
}
|
|
223
284
|
/*
|
|
224
285
|
* Builds the full CSV text (header row + one row per item). Fields are
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableColumnsToCsv.js","sourceRoot":"","sources":["../../../../UI/Utils/TableColumnsToCsv.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"TableColumnsToCsv.js","sourceRoot":"","sources":["../../../../UI/Utils/TableColumnsToCsv.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Which probes a brand-new monitor starts out with.
|
|
3
|
+
*
|
|
4
|
+
* The server applies this same rule in
|
|
5
|
+
* MonitorService.addDefaultProbesToMonitor (as a database query rather than a
|
|
6
|
+
* filter over a list). The create form uses it to pre-select the probe picker,
|
|
7
|
+
* so what the user sees before pressing "Create Monitor" is what they would
|
|
8
|
+
* have got anyway - and can now change.
|
|
9
|
+
*/
|
|
10
|
+
export default class MonitorProbeSelectionUtil {
|
|
11
|
+
/*
|
|
12
|
+
* A probe is auto-enabled on new monitors when it opts in with
|
|
13
|
+
* shouldAutoEnableProbeOnNewMonitors - except that global probes are skipped
|
|
14
|
+
* entirely for projects that turned off "add global probes by default".
|
|
15
|
+
*/
|
|
16
|
+
static getDefaultSelectedProbeIds(data) {
|
|
17
|
+
const skipGlobalProbes = data.doNotAddGlobalProbesByDefaultOnNewMonitors === true;
|
|
18
|
+
const selected = [];
|
|
19
|
+
for (const probe of data.probes || []) {
|
|
20
|
+
if (!probe || !probe.id) {
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
if (!probe.shouldAutoEnableProbeOnNewMonitors) {
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
if (probe.isGlobalProbe && skipGlobalProbes) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
selected.push(probe.id);
|
|
30
|
+
}
|
|
31
|
+
return MonitorProbeSelectionUtil.dedupeProbeIds(selected);
|
|
32
|
+
}
|
|
33
|
+
/*
|
|
34
|
+
* Probe ids reach the server as plain strings and the same probe can be
|
|
35
|
+
* offered by more than one source, so duplicates have to go: MonitorProbe
|
|
36
|
+
* has no unique index and MonitorProbeService rejects the second insert with
|
|
37
|
+
* "Probe is already added to this monitor."
|
|
38
|
+
*/
|
|
39
|
+
static dedupeProbeIds(probeIds) {
|
|
40
|
+
const seen = new Set();
|
|
41
|
+
const deduped = [];
|
|
42
|
+
for (const probeId of probeIds || []) {
|
|
43
|
+
if (!probeId || seen.has(probeId)) {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
seen.add(probeId);
|
|
47
|
+
deduped.push(probeId);
|
|
48
|
+
}
|
|
49
|
+
return deduped;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=MonitorProbeSelectionUtil.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MonitorProbeSelectionUtil.js","sourceRoot":"","sources":["../../../../Utils/Monitor/MonitorProbeSelectionUtil.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,MAAM,CAAC,OAAO,OAAO,yBAAyB;IAC5C;;;;OAIG;IACI,MAAM,CAAC,0BAA0B,CAAC,IAGxC;QACC,MAAM,gBAAgB,GACpB,IAAI,CAAC,0CAA0C,KAAK,IAAI,CAAC;QAE3D,MAAM,QAAQ,GAAkB,EAAE,CAAC;QAEnC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBACxB,SAAS;YACX,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,kCAAkC,EAAE,CAAC;gBAC9C,SAAS;YACX,CAAC;YAED,IAAI,KAAK,CAAC,aAAa,IAAI,gBAAgB,EAAE,CAAC;gBAC5C,SAAS;YACX,CAAC;YAED,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;QAED,OAAO,yBAAyB,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,cAAc,CAAC,QAAuB;QAClD,MAAM,IAAI,GAAgB,IAAI,GAAG,EAAU,CAAC;QAC5C,MAAM,OAAO,GAAkB,EAAE,CAAC;QAElC,KAAK,MAAM,OAAO,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClC,SAAS;YACX,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oneuptime/common",
|
|
3
|
-
"version": "11.7.
|
|
3
|
+
"version": "11.7.2",
|
|
4
4
|
"description": "",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
},
|
|
9
9
|
"main": "index.js",
|
|
10
10
|
"scripts": {
|
|
11
|
-
"test": "cd .. && export $(grep -v '^#' config.env | xargs) && cd Common && node --max-old-space-size=6144 node_modules/.bin/jest --runInBand ./Tests --detectOpenHandles",
|
|
11
|
+
"test": "cd .. && export $(grep -v '^#' config.env | xargs) && cd Common && node --max-old-space-size=6144 node_modules/.bin/jest --runInBand ./Tests --detectOpenHandles --forceExit",
|
|
12
12
|
"test-file": "cd .. && export $(grep -v '^#' config.env | xargs) && cd Common && node node_modules/.bin/jest --runInBand $1 --detectOpenHandles",
|
|
13
13
|
"coverage": "jest --detectOpenHandles --coverage",
|
|
14
14
|
"compile": "tsc",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"@clickhouse/client": "^1.10.1",
|
|
58
58
|
"@elastic/elasticsearch": "^8.12.1",
|
|
59
59
|
"@hcaptcha/react-hcaptcha": "^1.14.0",
|
|
60
|
-
"@monaco-editor/react": "^4.
|
|
60
|
+
"@monaco-editor/react": "^4.7.0",
|
|
61
61
|
"@opentelemetry/api": "^1.9.1",
|
|
62
62
|
"@opentelemetry/api-logs": "^0.219.0",
|
|
63
63
|
"@opentelemetry/context-zone": "^2.8.0",
|
|
@@ -118,6 +118,7 @@
|
|
|
118
118
|
"mermaid": "^11.12.2",
|
|
119
119
|
"moment": "^2.30.1",
|
|
120
120
|
"moment-timezone": "^0.5.45",
|
|
121
|
+
"monaco-editor": "0.52.2",
|
|
121
122
|
"multer": "^2.1.1",
|
|
122
123
|
"node-cron": "^4.0.0",
|
|
123
124
|
"nodemailer": "^8.0.11",
|