@oneuptime/common 9.5.2 → 9.5.4
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/Alert.ts +28 -0
- package/Models/DatabaseModels/AlertEpisode.ts +27 -0
- package/Models/DatabaseModels/AlertEpisodeStateTimeline.ts +1 -0
- package/Models/DatabaseModels/AlertStateTimeline.ts +1 -0
- package/Models/DatabaseModels/Incident.ts +28 -0
- package/Models/DatabaseModels/IncidentEpisode.ts +182 -0
- package/Models/DatabaseModels/IncidentEpisodeFeed.ts +2 -0
- package/Models/DatabaseModels/IncidentEpisodePublicNote.ts +611 -0
- package/Models/DatabaseModels/IncidentEpisodeStateTimeline.ts +84 -0
- package/Models/DatabaseModels/IncidentGroupingRule.ts +36 -0
- package/Models/DatabaseModels/IncidentStateTimeline.ts +1 -0
- package/Models/DatabaseModels/Index.ts +2 -0
- package/Models/DatabaseModels/MonitorStatusTimeline.ts +1 -0
- package/Models/DatabaseModels/Project.ts +252 -1
- package/Models/DatabaseModels/ProjectCallSMSConfig.ts +1 -0
- package/Models/DatabaseModels/ScheduledMaintenance.ts +28 -0
- package/Models/DatabaseModels/ScheduledMaintenanceTemplate.ts +1 -0
- package/Models/DatabaseModels/StatusPage.ts +120 -0
- package/Server/API/IncidentEpisodePublicNoteAPI.ts +98 -0
- package/Server/API/StatusPageAPI.ts +1092 -45
- package/Server/Infrastructure/Postgres/SchemaMigrations/1770232207959-MigrationName.ts +181 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1770237245069-MigrationName.ts +35 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1770237245070-MigrationName.ts +57 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1770407024682-MigrationName.ts +83 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
- package/Server/Services/AlertEpisodeMemberService.ts +6 -3
- package/Server/Services/AlertEpisodeService.ts +45 -97
- package/Server/Services/AlertEpisodeStateTimelineService.ts +4 -2
- package/Server/Services/AlertInternalNoteService.ts +5 -2
- package/Server/Services/AlertOwnerTeamService.ts +10 -4
- package/Server/Services/AlertOwnerUserService.ts +10 -4
- package/Server/Services/AlertService.ts +24 -38
- package/Server/Services/AlertStateTimelineService.ts +6 -3
- package/Server/Services/DatabaseService.ts +12 -0
- package/Server/Services/IncidentEpisodeMemberService.ts +8 -4
- package/Server/Services/IncidentEpisodePublicNoteService.ts +257 -0
- package/Server/Services/IncidentEpisodeService.ts +67 -93
- package/Server/Services/IncidentEpisodeStateTimelineService.ts +4 -2
- package/Server/Services/IncidentInternalNoteService.ts +10 -5
- package/Server/Services/IncidentMemberService.ts +20 -10
- package/Server/Services/IncidentOwnerTeamService.ts +20 -10
- package/Server/Services/IncidentOwnerUserService.ts +20 -10
- package/Server/Services/IncidentPublicNoteService.ts +10 -5
- package/Server/Services/IncidentService.ts +34 -110
- package/Server/Services/IncidentStateTimelineService.ts +11 -6
- package/Server/Services/Index.ts +2 -0
- package/Server/Services/OnCallDutyPolicyExecutionLogService.ts +61 -39
- package/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.ts +31 -19
- package/Server/Services/ProjectService.ts +227 -0
- package/Server/Services/ScheduledMaintenanceInternalNoteService.ts +9 -6
- package/Server/Services/ScheduledMaintenancePublicNoteService.ts +9 -6
- package/Server/Services/ScheduledMaintenanceService.ts +27 -39
- package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +8 -6
- package/Server/Services/UserNotificationRuleService.ts +32 -21
- package/Server/Utils/AI/IncidentEpisodeAIContextBuilder.ts +4 -2
- package/Server/Utils/Browser.ts +28 -20
- package/Server/Utils/Monitor/MonitorAlert.ts +5 -0
- package/Server/Utils/Monitor/MonitorIncident.ts +13 -0
- package/Server/Utils/PushNotificationUtil.ts +69 -26
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +8 -4
- package/Server/Utils/Workspace/Slack/Actions/Alert.ts +20 -8
- package/Server/Utils/Workspace/Slack/Actions/Incident.ts +42 -22
- package/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.ts +23 -17
- package/Server/Utils/Workspace/WorkspaceMessages/Alert.ts +1 -0
- package/Server/Utils/Workspace/WorkspaceMessages/Incident.ts +1 -0
- package/Server/Utils/Workspace/WorkspaceMessages/ScheduledMaintenance.ts +1 -0
- package/Types/Email/EmailTemplateType.ts +4 -0
- package/Types/Icon/IconProp.ts +172 -0
- package/Types/Monitor/CriteriaIncident.ts +2 -0
- package/Types/Monitor/MonitorEvaluationSummary.ts +2 -0
- package/Types/Permission.ts +40 -0
- package/Types/StatusPage/StatusPageSubscriberNotificationEventType.ts +5 -0
- package/UI/Components/Icon/Icon.tsx +1333 -1
- package/Utils/Analytics.ts +11 -0
- package/build/dist/Models/DatabaseModels/Alert.js +30 -0
- package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertEpisode.js +29 -0
- package/build/dist/Models/DatabaseModels/AlertEpisode.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodeStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/AlertEpisodeStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertStateTimeline.js +1 -0
- package/build/dist/Models/DatabaseModels/AlertStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Incident.js +30 -0
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisode.js +189 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisode.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeFeed.js +2 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisodeFeed.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js +626 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js.map +1 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js +86 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentGroupingRule.js +37 -0
- package/build/dist/Models/DatabaseModels/IncidentGroupingRule.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/Index.js +2 -0
- package/build/dist/Models/DatabaseModels/Index.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/Project.js +267 -1
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProjectCallSMSConfig.js +1 -0
- package/build/dist/Models/DatabaseModels/ProjectCallSMSConfig.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +29 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.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 +126 -0
- package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
- package/build/dist/Server/API/IncidentEpisodePublicNoteAPI.js +68 -0
- package/build/dist/Server/API/IncidentEpisodePublicNoteAPI.js.map +1 -0
- package/build/dist/Server/API/StatusPageAPI.js +874 -47
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1770232207959-MigrationName.js +68 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1770232207959-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1770237245069-MigrationName.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1770237245069-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1770237245070-MigrationName.js +27 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1770237245070-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1770407024682-MigrationName.js +34 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1770407024682-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/Services/AlertEpisodeMemberService.js +6 -3
- package/build/dist/Server/Services/AlertEpisodeMemberService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeService.js +33 -90
- package/build/dist/Server/Services/AlertEpisodeService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeStateTimelineService.js +3 -2
- package/build/dist/Server/Services/AlertEpisodeStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/AlertInternalNoteService.js +2 -2
- package/build/dist/Server/Services/AlertInternalNoteService.js.map +1 -1
- package/build/dist/Server/Services/AlertOwnerTeamService.js +4 -4
- package/build/dist/Server/Services/AlertOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/AlertOwnerUserService.js +4 -4
- package/build/dist/Server/Services/AlertOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/AlertService.js +16 -34
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/AlertStateTimelineService.js +3 -3
- package/build/dist/Server/Services/AlertStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +9 -0
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeMemberService.js +8 -4
- package/build/dist/Server/Services/IncidentEpisodeMemberService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js +224 -0
- package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js.map +1 -0
- package/build/dist/Server/Services/IncidentEpisodeService.js +47 -82
- package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeStateTimelineService.js +3 -2
- package/build/dist/Server/Services/IncidentEpisodeStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentInternalNoteService.js +4 -2
- package/build/dist/Server/Services/IncidentInternalNoteService.js.map +1 -1
- package/build/dist/Server/Services/IncidentMemberService.js +8 -4
- package/build/dist/Server/Services/IncidentMemberService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOwnerTeamService.js +8 -4
- package/build/dist/Server/Services/IncidentOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOwnerUserService.js +8 -4
- package/build/dist/Server/Services/IncidentOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/IncidentPublicNoteService.js +4 -2
- package/build/dist/Server/Services/IncidentPublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +24 -94
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncidentStateTimelineService.js +5 -3
- package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +2 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js +20 -16
- package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js +10 -8
- package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +207 -0
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceInternalNoteService.js +4 -3
- package/build/dist/Server/Services/ScheduledMaintenanceInternalNoteService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js +4 -3
- package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceService.js +16 -37
- package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js +3 -3
- package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationRuleService.js +33 -25
- package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Utils/AI/IncidentEpisodeAIContextBuilder.js +4 -2
- package/build/dist/Server/Utils/AI/IncidentEpisodeAIContextBuilder.js.map +1 -1
- package/build/dist/Server/Utils/Browser.js +19 -12
- package/build/dist/Server/Utils/Browser.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +4 -0
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +9 -0
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- package/build/dist/Server/Utils/PushNotificationUtil.js +36 -28
- package/build/dist/Server/Utils/PushNotificationUtil.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +8 -4
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Alert.js +8 -8
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Alert.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js +18 -10
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.js +8 -8
- package/build/dist/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/WorkspaceMessages/Alert.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/WorkspaceMessages/Incident.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/WorkspaceMessages/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Types/Email/EmailTemplateType.js +3 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/Icon/IconProp.js +172 -0
- package/build/dist/Types/Icon/IconProp.js.map +1 -1
- package/build/dist/Types/Monitor/CriteriaIncident.js +1 -0
- package/build/dist/Types/Monitor/CriteriaIncident.js.map +1 -1
- package/build/dist/Types/Permission.js +34 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/StatusPage/StatusPageSubscriberNotificationEventType.js +4 -0
- package/build/dist/Types/StatusPage/StatusPageSubscriberNotificationEventType.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +502 -1
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/Utils/Analytics.js +5 -0
- package/build/dist/Utils/Analytics.js.map +1 -1
- package/package.json +1 -1
package/Server/Utils/Browser.ts
CHANGED
|
@@ -10,6 +10,7 @@ import ScreenSizeType from "../../Types/ScreenSizeType";
|
|
|
10
10
|
import BrowserType from "../../Types/BrowserType";
|
|
11
11
|
import logger from "./Logger";
|
|
12
12
|
import CaptureSpan from "./Telemetry/CaptureSpan";
|
|
13
|
+
import os from "os";
|
|
13
14
|
|
|
14
15
|
export type Page = PlaywrightPage;
|
|
15
16
|
export type Browser = PlaywrightBrowser;
|
|
@@ -138,19 +139,26 @@ export default class BrowserUtil {
|
|
|
138
139
|
return { height: viewPortHeight, width: viewPortWidth };
|
|
139
140
|
}
|
|
140
141
|
|
|
142
|
+
private static getPlaywrightBrowsersPath(): string {
|
|
143
|
+
return (
|
|
144
|
+
process.env["PLAYWRIGHT_BROWSERS_PATH"] ||
|
|
145
|
+
`${os.homedir()}/.cache/ms-playwright`
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
|
|
141
149
|
@CaptureSpan()
|
|
142
150
|
public static async getChromeExecutablePath(): Promise<string> {
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
151
|
+
const browsersPath: string = this.getPlaywrightBrowsersPath();
|
|
152
|
+
|
|
153
|
+
const doesDirectoryExist: boolean =
|
|
154
|
+
await LocalFile.doesDirectoryExist(browsersPath);
|
|
146
155
|
if (!doesDirectoryExist) {
|
|
147
156
|
throw new BadDataException("Chrome executable path not found.");
|
|
148
157
|
}
|
|
149
158
|
|
|
150
159
|
// get list of files in the directory
|
|
151
|
-
const directories: string[] =
|
|
152
|
-
|
|
153
|
-
);
|
|
160
|
+
const directories: string[] =
|
|
161
|
+
await LocalFile.getListOfDirectories(browsersPath);
|
|
154
162
|
|
|
155
163
|
if (directories.length === 0) {
|
|
156
164
|
throw new BadDataException("Chrome executable path not found.");
|
|
@@ -167,10 +175,10 @@ export default class BrowserUtil {
|
|
|
167
175
|
}
|
|
168
176
|
|
|
169
177
|
const chromeExecutableCandidates: Array<string> = [
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
178
|
+
`${browsersPath}/${chromeInstallationName}/chrome-linux/chrome`,
|
|
179
|
+
`${browsersPath}/${chromeInstallationName}/chrome-linux64/chrome`,
|
|
180
|
+
`${browsersPath}/${chromeInstallationName}/chrome64/chrome`,
|
|
181
|
+
`${browsersPath}/${chromeInstallationName}/chrome/chrome`,
|
|
174
182
|
];
|
|
175
183
|
|
|
176
184
|
for (const executablePath of chromeExecutableCandidates) {
|
|
@@ -184,17 +192,17 @@ export default class BrowserUtil {
|
|
|
184
192
|
|
|
185
193
|
@CaptureSpan()
|
|
186
194
|
public static async getFirefoxExecutablePath(): Promise<string> {
|
|
187
|
-
const
|
|
188
|
-
|
|
189
|
-
|
|
195
|
+
const browsersPath: string = this.getPlaywrightBrowsersPath();
|
|
196
|
+
|
|
197
|
+
const doesDirectoryExist: boolean =
|
|
198
|
+
await LocalFile.doesDirectoryExist(browsersPath);
|
|
190
199
|
if (!doesDirectoryExist) {
|
|
191
200
|
throw new BadDataException("Firefox executable path not found.");
|
|
192
201
|
}
|
|
193
202
|
|
|
194
203
|
// get list of files in the directory
|
|
195
|
-
const directories: string[] =
|
|
196
|
-
|
|
197
|
-
);
|
|
204
|
+
const directories: string[] =
|
|
205
|
+
await LocalFile.getListOfDirectories(browsersPath);
|
|
198
206
|
|
|
199
207
|
if (directories.length === 0) {
|
|
200
208
|
throw new BadDataException("Firefox executable path not found.");
|
|
@@ -211,10 +219,10 @@ export default class BrowserUtil {
|
|
|
211
219
|
}
|
|
212
220
|
|
|
213
221
|
const firefoxExecutableCandidates: Array<string> = [
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
222
|
+
`${browsersPath}/${firefoxInstallationName}/firefox/firefox`,
|
|
223
|
+
`${browsersPath}/${firefoxInstallationName}/firefox-linux64/firefox`,
|
|
224
|
+
`${browsersPath}/${firefoxInstallationName}/firefox64/firefox`,
|
|
225
|
+
`${browsersPath}/${firefoxInstallationName}/firefox-64/firefox`,
|
|
218
226
|
];
|
|
219
227
|
|
|
220
228
|
for (const executablePath of firefoxExecutableCandidates) {
|
|
@@ -50,6 +50,7 @@ export default class MonitorAlert {
|
|
|
50
50
|
createdCriteriaId: true,
|
|
51
51
|
projectId: true,
|
|
52
52
|
alertNumber: true,
|
|
53
|
+
alertNumberWithPrefix: true,
|
|
53
54
|
},
|
|
54
55
|
props: {
|
|
55
56
|
isRoot: true,
|
|
@@ -81,6 +82,7 @@ export default class MonitorAlert {
|
|
|
81
82
|
"Alert auto-resolved because autoresolve is enabled for this criteria.",
|
|
82
83
|
relatedAlertId: openAlert.id?.toString(),
|
|
83
84
|
relatedAlertNumber: openAlert.alertNumber,
|
|
85
|
+
relatedAlertNumberWithPrefix: openAlert.alertNumberWithPrefix,
|
|
84
86
|
relatedCriteriaId: input.criteriaInstance?.data?.id,
|
|
85
87
|
at: OneUptimeDate.getCurrentDate(),
|
|
86
88
|
});
|
|
@@ -150,6 +152,8 @@ export default class MonitorAlert {
|
|
|
150
152
|
relatedCriteriaId: input.criteriaInstance.data?.id,
|
|
151
153
|
relatedAlertId: alreadyOpenAlert?.id?.toString(),
|
|
152
154
|
relatedAlertNumber: alreadyOpenAlert?.alertNumber,
|
|
155
|
+
relatedAlertNumberWithPrefix:
|
|
156
|
+
alreadyOpenAlert?.alertNumberWithPrefix,
|
|
153
157
|
at: OneUptimeDate.getCurrentDate(),
|
|
154
158
|
});
|
|
155
159
|
continue;
|
|
@@ -292,6 +296,7 @@ export default class MonitorAlert {
|
|
|
292
296
|
relatedCriteriaId: input.criteriaInstance.data?.id,
|
|
293
297
|
relatedAlertId: createdAlert.id?.toString(),
|
|
294
298
|
relatedAlertNumber: createdAlert.alertNumber,
|
|
299
|
+
relatedAlertNumberWithPrefix: createdAlert.alertNumberWithPrefix,
|
|
295
300
|
at: OneUptimeDate.getCurrentDate(),
|
|
296
301
|
});
|
|
297
302
|
}
|
|
@@ -56,6 +56,7 @@ export default class MonitorIncident {
|
|
|
56
56
|
createdIncidentTemplateId: true,
|
|
57
57
|
projectId: true,
|
|
58
58
|
incidentNumber: true,
|
|
59
|
+
incidentNumberWithPrefix: true,
|
|
59
60
|
},
|
|
60
61
|
props: {
|
|
61
62
|
isRoot: true,
|
|
@@ -87,6 +88,8 @@ export default class MonitorIncident {
|
|
|
87
88
|
"Incident auto-resolved because autoresolve is enabled for this criteria.",
|
|
88
89
|
relatedIncidentId: openIncident.id?.toString(),
|
|
89
90
|
relatedIncidentNumber: openIncident.incidentNumber,
|
|
91
|
+
relatedIncidentNumberWithPrefix:
|
|
92
|
+
openIncident.incidentNumberWithPrefix,
|
|
90
93
|
relatedCriteriaId: input.criteriaInstance?.data?.id,
|
|
91
94
|
at: OneUptimeDate.getCurrentDate(),
|
|
92
95
|
});
|
|
@@ -161,6 +164,8 @@ export default class MonitorIncident {
|
|
|
161
164
|
relatedCriteriaId: input.criteriaInstance.data?.id,
|
|
162
165
|
relatedIncidentId: alreadyOpenIncident?.id?.toString(),
|
|
163
166
|
relatedIncidentNumber: alreadyOpenIncident?.incidentNumber,
|
|
167
|
+
relatedIncidentNumberWithPrefix:
|
|
168
|
+
alreadyOpenIncident?.incidentNumberWithPrefix,
|
|
164
169
|
at: OneUptimeDate.getCurrentDate(),
|
|
165
170
|
});
|
|
166
171
|
continue;
|
|
@@ -242,6 +247,12 @@ export default class MonitorIncident {
|
|
|
242
247
|
|
|
243
248
|
incident.isCreatedAutomatically = true;
|
|
244
249
|
|
|
250
|
+
// Set status page visibility (defaults to true if not specified)
|
|
251
|
+
if (criteriaIncident.showIncidentOnStatusPage !== undefined) {
|
|
252
|
+
incident.isVisibleOnStatusPage =
|
|
253
|
+
criteriaIncident.showIncidentOnStatusPage;
|
|
254
|
+
}
|
|
255
|
+
|
|
245
256
|
if (input.props.telemetryQuery) {
|
|
246
257
|
incident.telemetryQuery = input.props.telemetryQuery;
|
|
247
258
|
}
|
|
@@ -347,6 +358,8 @@ export default class MonitorIncident {
|
|
|
347
358
|
relatedCriteriaId: input.criteriaInstance.data?.id,
|
|
348
359
|
relatedIncidentId: createdIncident.id?.toString(),
|
|
349
360
|
relatedIncidentNumber: createdIncident.incidentNumber,
|
|
361
|
+
relatedIncidentNumberWithPrefix:
|
|
362
|
+
createdIncident.incidentNumberWithPrefix,
|
|
350
363
|
at: OneUptimeDate.getCurrentDate(),
|
|
351
364
|
});
|
|
352
365
|
}
|
|
@@ -20,14 +20,22 @@ export default class PushNotificationUtil {
|
|
|
20
20
|
projectName: string;
|
|
21
21
|
incidentViewLink: string;
|
|
22
22
|
incidentNumber?: number;
|
|
23
|
+
incidentNumberWithPrefix?: string;
|
|
23
24
|
}): PushNotificationMessage {
|
|
24
|
-
const {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
const {
|
|
26
|
+
incidentTitle,
|
|
27
|
+
projectName,
|
|
28
|
+
incidentViewLink,
|
|
29
|
+
incidentNumber,
|
|
30
|
+
incidentNumberWithPrefix,
|
|
31
|
+
} = params;
|
|
32
|
+
const displayNumber: string =
|
|
33
|
+
incidentNumberWithPrefix || (incidentNumber ? `#${incidentNumber}` : "");
|
|
34
|
+
const incidentIdentifier: string = displayNumber
|
|
35
|
+
? `${displayNumber} (${incidentTitle})`
|
|
28
36
|
: incidentTitle;
|
|
29
37
|
return PushNotificationUtil.applyDefaults({
|
|
30
|
-
title: `New Incident${
|
|
38
|
+
title: `New Incident${displayNumber ? ` ${displayNumber}` : ""}: ${incidentTitle}`,
|
|
31
39
|
body: `A new incident has been created: ${incidentIdentifier} in ${projectName}. Click to view details.`,
|
|
32
40
|
clickAction: incidentViewLink,
|
|
33
41
|
url: incidentViewLink,
|
|
@@ -49,6 +57,7 @@ export default class PushNotificationUtil {
|
|
|
49
57
|
previousState?: string;
|
|
50
58
|
incidentViewLink: string;
|
|
51
59
|
incidentNumber?: number;
|
|
60
|
+
incidentNumberWithPrefix?: string;
|
|
52
61
|
}): PushNotificationMessage {
|
|
53
62
|
const {
|
|
54
63
|
incidentTitle,
|
|
@@ -57,15 +66,18 @@ export default class PushNotificationUtil {
|
|
|
57
66
|
previousState,
|
|
58
67
|
incidentViewLink,
|
|
59
68
|
incidentNumber,
|
|
69
|
+
incidentNumberWithPrefix,
|
|
60
70
|
} = params;
|
|
61
|
-
const
|
|
62
|
-
? `#${incidentNumber}
|
|
71
|
+
const displayNumber: string =
|
|
72
|
+
incidentNumberWithPrefix || (incidentNumber ? `#${incidentNumber}` : "");
|
|
73
|
+
const incidentIdentifier: string = displayNumber
|
|
74
|
+
? `${displayNumber} (${incidentTitle})`
|
|
63
75
|
: incidentTitle;
|
|
64
76
|
const stateChangeText: string = previousState
|
|
65
77
|
? `Incident ${incidentIdentifier} state changed from ${previousState} to ${newState}`
|
|
66
78
|
: `Incident ${incidentIdentifier} state changed to ${newState}`;
|
|
67
79
|
return PushNotificationUtil.applyDefaults({
|
|
68
|
-
title: `Incident${
|
|
80
|
+
title: `Incident${displayNumber ? ` ${displayNumber}` : ""} Updated: ${incidentTitle}`,
|
|
69
81
|
body: `${stateChangeText} in ${projectName}. Click to view details.`,
|
|
70
82
|
clickAction: incidentViewLink,
|
|
71
83
|
url: incidentViewLink,
|
|
@@ -88,6 +100,7 @@ export default class PushNotificationUtil {
|
|
|
88
100
|
isPrivateNote: boolean;
|
|
89
101
|
incidentViewLink: string;
|
|
90
102
|
incidentNumber?: number;
|
|
103
|
+
incidentNumberWithPrefix?: string;
|
|
91
104
|
}): PushNotificationMessage {
|
|
92
105
|
const {
|
|
93
106
|
incidentTitle,
|
|
@@ -95,13 +108,16 @@ export default class PushNotificationUtil {
|
|
|
95
108
|
isPrivateNote,
|
|
96
109
|
incidentViewLink,
|
|
97
110
|
incidentNumber,
|
|
111
|
+
incidentNumberWithPrefix,
|
|
98
112
|
} = params;
|
|
99
113
|
const noteType: string = isPrivateNote ? "Private" : "Public";
|
|
100
|
-
const
|
|
101
|
-
? `#${incidentNumber}
|
|
114
|
+
const displayNumber: string =
|
|
115
|
+
incidentNumberWithPrefix || (incidentNumber ? `#${incidentNumber}` : "");
|
|
116
|
+
const incidentIdentifier: string = displayNumber
|
|
117
|
+
? `${displayNumber} (${incidentTitle})`
|
|
102
118
|
: incidentTitle;
|
|
103
119
|
return PushNotificationUtil.applyDefaults({
|
|
104
|
-
title: `${noteType} Note Added: Incident${
|
|
120
|
+
title: `${noteType} Note Added: Incident${displayNumber ? ` ${displayNumber}` : ""} - ${incidentTitle}`,
|
|
105
121
|
body: `A ${noteType.toLowerCase()} note has been posted on incident ${incidentIdentifier} in ${projectName}. Click to view details.`,
|
|
106
122
|
clickAction: incidentViewLink,
|
|
107
123
|
url: incidentViewLink,
|
|
@@ -122,13 +138,22 @@ export default class PushNotificationUtil {
|
|
|
122
138
|
projectName: string;
|
|
123
139
|
alertViewLink: string;
|
|
124
140
|
alertNumber?: number;
|
|
141
|
+
alertNumberWithPrefix?: string;
|
|
125
142
|
}): PushNotificationMessage {
|
|
126
|
-
const {
|
|
127
|
-
|
|
128
|
-
|
|
143
|
+
const {
|
|
144
|
+
alertTitle,
|
|
145
|
+
projectName,
|
|
146
|
+
alertViewLink,
|
|
147
|
+
alertNumber,
|
|
148
|
+
alertNumberWithPrefix,
|
|
149
|
+
} = params;
|
|
150
|
+
const displayNumber: string =
|
|
151
|
+
alertNumberWithPrefix || (alertNumber ? `#${alertNumber}` : "");
|
|
152
|
+
const alertIdentifier: string = displayNumber
|
|
153
|
+
? `${displayNumber} (${alertTitle})`
|
|
129
154
|
: alertTitle;
|
|
130
155
|
return PushNotificationUtil.applyDefaults({
|
|
131
|
-
title: `New Alert${
|
|
156
|
+
title: `New Alert${displayNumber ? ` ${displayNumber}` : ""}: ${alertTitle}`,
|
|
132
157
|
body: `A new alert has been created: ${alertIdentifier} in ${projectName}. Click to view details.`,
|
|
133
158
|
clickAction: alertViewLink,
|
|
134
159
|
url: alertViewLink,
|
|
@@ -148,18 +173,22 @@ export default class PushNotificationUtil {
|
|
|
148
173
|
projectName: string;
|
|
149
174
|
alertEpisodeViewLink: string;
|
|
150
175
|
episodeNumber?: number;
|
|
176
|
+
episodeNumberWithPrefix?: string;
|
|
151
177
|
}): PushNotificationMessage {
|
|
152
178
|
const {
|
|
153
179
|
alertEpisodeTitle,
|
|
154
180
|
projectName,
|
|
155
181
|
alertEpisodeViewLink,
|
|
156
182
|
episodeNumber,
|
|
183
|
+
episodeNumberWithPrefix,
|
|
157
184
|
} = params;
|
|
158
|
-
const
|
|
159
|
-
? `#${episodeNumber}
|
|
185
|
+
const displayNumber: string =
|
|
186
|
+
episodeNumberWithPrefix || (episodeNumber ? `#${episodeNumber}` : "");
|
|
187
|
+
const episodeIdentifier: string = displayNumber
|
|
188
|
+
? `${displayNumber} (${alertEpisodeTitle})`
|
|
160
189
|
: alertEpisodeTitle;
|
|
161
190
|
return PushNotificationUtil.applyDefaults({
|
|
162
|
-
title: `New Alert Episode${
|
|
191
|
+
title: `New Alert Episode${displayNumber ? ` ${displayNumber}` : ""}: ${alertEpisodeTitle}`,
|
|
163
192
|
body: `A new alert episode has been created: ${episodeIdentifier} in ${projectName}. Click to view details.`,
|
|
164
193
|
clickAction: alertEpisodeViewLink,
|
|
165
194
|
url: alertEpisodeViewLink,
|
|
@@ -179,18 +208,22 @@ export default class PushNotificationUtil {
|
|
|
179
208
|
projectName: string;
|
|
180
209
|
incidentEpisodeViewLink: string;
|
|
181
210
|
episodeNumber?: number;
|
|
211
|
+
episodeNumberWithPrefix?: string;
|
|
182
212
|
}): PushNotificationMessage {
|
|
183
213
|
const {
|
|
184
214
|
incidentEpisodeTitle,
|
|
185
215
|
projectName,
|
|
186
216
|
incidentEpisodeViewLink,
|
|
187
217
|
episodeNumber,
|
|
218
|
+
episodeNumberWithPrefix,
|
|
188
219
|
} = params;
|
|
189
|
-
const
|
|
190
|
-
? `#${episodeNumber}
|
|
220
|
+
const displayNumber: string =
|
|
221
|
+
episodeNumberWithPrefix || (episodeNumber ? `#${episodeNumber}` : "");
|
|
222
|
+
const episodeIdentifier: string = displayNumber
|
|
223
|
+
? `${displayNumber} (${incidentEpisodeTitle})`
|
|
191
224
|
: incidentEpisodeTitle;
|
|
192
225
|
return PushNotificationUtil.applyDefaults({
|
|
193
|
-
title: `New Incident Episode${
|
|
226
|
+
title: `New Incident Episode${displayNumber ? ` ${displayNumber}` : ""}: ${incidentEpisodeTitle}`,
|
|
194
227
|
body: `A new incident episode has been created: ${episodeIdentifier} in ${projectName}. Click to view details.`,
|
|
195
228
|
clickAction: incidentEpisodeViewLink,
|
|
196
229
|
url: incidentEpisodeViewLink,
|
|
@@ -246,14 +279,24 @@ export default class PushNotificationUtil {
|
|
|
246
279
|
state: string;
|
|
247
280
|
viewLink: string;
|
|
248
281
|
scheduledMaintenanceNumber?: number;
|
|
282
|
+
scheduledMaintenanceNumberWithPrefix?: string;
|
|
249
283
|
}): PushNotificationMessage {
|
|
250
|
-
const {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
284
|
+
const {
|
|
285
|
+
title,
|
|
286
|
+
projectName,
|
|
287
|
+
state,
|
|
288
|
+
viewLink,
|
|
289
|
+
scheduledMaintenanceNumber,
|
|
290
|
+
scheduledMaintenanceNumberWithPrefix,
|
|
291
|
+
} = params;
|
|
292
|
+
const displayNumber: string =
|
|
293
|
+
scheduledMaintenanceNumberWithPrefix ||
|
|
294
|
+
(scheduledMaintenanceNumber ? `#${scheduledMaintenanceNumber}` : "");
|
|
295
|
+
const maintenanceIdentifier: string = displayNumber
|
|
296
|
+
? `${displayNumber} (${title})`
|
|
254
297
|
: title;
|
|
255
298
|
return PushNotificationUtil.applyDefaults({
|
|
256
|
-
title: `Scheduled Maintenance${
|
|
299
|
+
title: `Scheduled Maintenance${displayNumber ? ` ${displayNumber}` : ""} ${state}: ${title}`,
|
|
257
300
|
body: `Scheduled maintenance ${maintenanceIdentifier} ${state.toLowerCase()} in ${projectName}. Click to view details.`,
|
|
258
301
|
clickAction: viewLink,
|
|
259
302
|
url: viewLink,
|
|
@@ -2003,6 +2003,7 @@ Just type any of these commands to get the information you need!`;
|
|
|
2003
2003
|
select: {
|
|
2004
2004
|
_id: true,
|
|
2005
2005
|
incidentNumber: true,
|
|
2006
|
+
incidentNumberWithPrefix: true,
|
|
2006
2007
|
title: true,
|
|
2007
2008
|
description: true,
|
|
2008
2009
|
currentIncidentState: {
|
|
@@ -2063,7 +2064,7 @@ If you need to report an incident or check historical incidents, please visit th
|
|
|
2063
2064
|
incident.id!,
|
|
2064
2065
|
);
|
|
2065
2066
|
|
|
2066
|
-
message += `${severityIcon} **[Incident
|
|
2067
|
+
message += `${severityIcon} **[Incident ${incident.incidentNumberWithPrefix || "#" + incident.incidentNumber}: ${incident.title}](${incidentUrl.toString()})**
|
|
2067
2068
|
• **Severity:** ${severity}
|
|
2068
2069
|
• **Status:** ${state}
|
|
2069
2070
|
• **Declared:** ${declaredAtText}
|
|
@@ -2124,6 +2125,7 @@ If you need to report an incident or check historical incidents, please visit th
|
|
|
2124
2125
|
name: true,
|
|
2125
2126
|
},
|
|
2126
2127
|
scheduledMaintenanceNumber: true,
|
|
2128
|
+
scheduledMaintenanceNumberWithPrefix: true,
|
|
2127
2129
|
},
|
|
2128
2130
|
sort: {
|
|
2129
2131
|
startsAt: SortOrder.Ascending,
|
|
@@ -2169,7 +2171,7 @@ Check back later for upcoming maintenance windows.`;
|
|
|
2169
2171
|
event.id!,
|
|
2170
2172
|
);
|
|
2171
2173
|
|
|
2172
|
-
message += `🛠️ **[Scheduled Maintenance
|
|
2174
|
+
message += `🛠️ **[Scheduled Maintenance ${event.scheduledMaintenanceNumberWithPrefix || "#" + event.scheduledMaintenanceNumber}: ${event.title}](${eventUrl.toString()})**
|
|
2173
2175
|
• **Status:** ${state}
|
|
2174
2176
|
• **Starts:** ${startTime}
|
|
2175
2177
|
• **Ends:** ${endTime}
|
|
@@ -2229,6 +2231,7 @@ Check back later for upcoming maintenance windows.`;
|
|
|
2229
2231
|
name: true,
|
|
2230
2232
|
},
|
|
2231
2233
|
scheduledMaintenanceNumber: true,
|
|
2234
|
+
scheduledMaintenanceNumberWithPrefix: true,
|
|
2232
2235
|
},
|
|
2233
2236
|
sort: {
|
|
2234
2237
|
startsAt: SortOrder.Descending,
|
|
@@ -2274,7 +2277,7 @@ All systems are currently operating normally.`;
|
|
|
2274
2277
|
event.id!,
|
|
2275
2278
|
);
|
|
2276
2279
|
|
|
2277
|
-
message += `🔧 **[Scheduled Maintenance
|
|
2280
|
+
message += `🔧 **[Scheduled Maintenance ${event.scheduledMaintenanceNumberWithPrefix || "#" + event.scheduledMaintenanceNumber}: ${event.title}](${eventUrl.toString()})**
|
|
2278
2281
|
• **Status:** ${state}
|
|
2279
2282
|
• **Started:** ${startTime}
|
|
2280
2283
|
• **Expected End:** ${endTime}
|
|
@@ -2331,6 +2334,7 @@ All systems are currently operating normally.`;
|
|
|
2331
2334
|
select: {
|
|
2332
2335
|
_id: true,
|
|
2333
2336
|
alertNumber: true,
|
|
2337
|
+
alertNumberWithPrefix: true,
|
|
2334
2338
|
title: true,
|
|
2335
2339
|
description: true,
|
|
2336
2340
|
currentAlertState: {
|
|
@@ -2387,7 +2391,7 @@ All monitoring checks are passing normally.`;
|
|
|
2387
2391
|
alert.id!,
|
|
2388
2392
|
);
|
|
2389
2393
|
|
|
2390
|
-
message += `⚠️ **[Alert
|
|
2394
|
+
message += `⚠️ **[Alert ${alert.alertNumberWithPrefix || "#" + alert.alertNumber}: ${alert.title}](${alertUrl.toString()})**
|
|
2391
2395
|
• **Severity:** ${severity}
|
|
2392
2396
|
• **Status:** ${state}
|
|
2393
2397
|
• **Triggered:** ${createdAt}
|
|
@@ -110,14 +110,17 @@ export default class SlackAlertActions {
|
|
|
110
110
|
});
|
|
111
111
|
|
|
112
112
|
if (isAlreadyAcknowledged) {
|
|
113
|
-
const
|
|
113
|
+
const alertNumberResult: {
|
|
114
|
+
number: number | null;
|
|
115
|
+
numberWithPrefix: string | null;
|
|
116
|
+
} = await AlertService.getAlertNumber({
|
|
114
117
|
alertId: alertId,
|
|
115
118
|
});
|
|
116
119
|
|
|
117
120
|
// send a message to the channel visible to user, that the alert has already been acknowledged.
|
|
118
121
|
const markdwonPayload: WorkspacePayloadMarkdown = {
|
|
119
122
|
_type: "WorkspacePayloadMarkdown",
|
|
120
|
-
text: `@${slackUsername}, unfortunately you cannot acknowledge the **[Alert ${
|
|
123
|
+
text: `@${slackUsername}, unfortunately you cannot acknowledge the **[Alert ${alertNumberResult.numberWithPrefix || "#" + alertNumberResult.number}](${await AlertService.getAlertLinkInDashboard(slackRequest.projectId!, alertId)})**. It has already been acknowledged.`,
|
|
121
124
|
};
|
|
122
125
|
|
|
123
126
|
await SlackUtil.sendDirectMessageToUser({
|
|
@@ -232,13 +235,16 @@ export default class SlackAlertActions {
|
|
|
232
235
|
});
|
|
233
236
|
|
|
234
237
|
if (isAlreadyResolved) {
|
|
235
|
-
const
|
|
238
|
+
const alertNumberResult: {
|
|
239
|
+
number: number | null;
|
|
240
|
+
numberWithPrefix: string | null;
|
|
241
|
+
} = await AlertService.getAlertNumber({
|
|
236
242
|
alertId: alertId,
|
|
237
243
|
});
|
|
238
244
|
// send a message to the channel visible to user, that the alert has already been Resolved.
|
|
239
245
|
const markdwonPayload: WorkspacePayloadMarkdown = {
|
|
240
246
|
_type: "WorkspacePayloadMarkdown",
|
|
241
|
-
text: `@${slackUsername}, unfortunately you cannot resolve the **[Alert ${
|
|
247
|
+
text: `@${slackUsername}, unfortunately you cannot resolve the **[Alert ${alertNumberResult.numberWithPrefix || "#" + alertNumberResult.number}](${await AlertService.getAlertLinkInDashboard(slackRequest.projectId!, alertId)})**. It has already been resolved.`,
|
|
242
248
|
};
|
|
243
249
|
|
|
244
250
|
await SlackUtil.sendDirectMessageToUser({
|
|
@@ -568,13 +574,16 @@ export default class SlackAlertActions {
|
|
|
568
574
|
});
|
|
569
575
|
|
|
570
576
|
if (isAlreadyResolved) {
|
|
571
|
-
const
|
|
577
|
+
const alertNumberResult: {
|
|
578
|
+
number: number | null;
|
|
579
|
+
numberWithPrefix: string | null;
|
|
580
|
+
} = await AlertService.getAlertNumber({
|
|
572
581
|
alertId: alertId,
|
|
573
582
|
});
|
|
574
583
|
// send a message to the channel visible to user, that the alert has already been Resolved.
|
|
575
584
|
const markdwonPayload: WorkspacePayloadMarkdown = {
|
|
576
585
|
_type: "WorkspacePayloadMarkdown",
|
|
577
|
-
text: `@${slackUsername}, unfortunately you cannot execute the on-call policy for **[Alert ${
|
|
586
|
+
text: `@${slackUsername}, unfortunately you cannot execute the on-call policy for **[Alert ${alertNumberResult.numberWithPrefix || "#" + alertNumberResult.number}](${await AlertService.getAlertLinkInDashboard(slackRequest.projectId!, alertId)})**. It has already been resolved.`,
|
|
578
587
|
};
|
|
579
588
|
|
|
580
589
|
await SlackUtil.sendDirectMessageToUser({
|
|
@@ -853,7 +862,10 @@ export default class SlackAlertActions {
|
|
|
853
862
|
const alertId: ObjectID = workspaceLog.alertId;
|
|
854
863
|
|
|
855
864
|
// Get the alert number for the confirmation message
|
|
856
|
-
const
|
|
865
|
+
const alertNumberResult: {
|
|
866
|
+
number: number | null;
|
|
867
|
+
numberWithPrefix: string | null;
|
|
868
|
+
} = await AlertService.getAlertNumber({
|
|
857
869
|
alertId: alertId,
|
|
858
870
|
});
|
|
859
871
|
|
|
@@ -940,7 +952,7 @@ export default class SlackAlertActions {
|
|
|
940
952
|
await AlertService.getAlertLinkInDashboard(projectId, alertId)
|
|
941
953
|
).toString();
|
|
942
954
|
|
|
943
|
-
const confirmationMessage: string = `✅ Message saved as *private note* to <${alertLink}|Alert
|
|
955
|
+
const confirmationMessage: string = `✅ Message saved as *private note* to <${alertLink}|Alert ${alertNumberResult.numberWithPrefix || "#" + alertNumberResult.number}>.`;
|
|
944
956
|
|
|
945
957
|
await SlackUtil.sendMessageToThread({
|
|
946
958
|
authToken: authToken,
|
|
@@ -242,7 +242,7 @@ export default class SlackIncidentActions {
|
|
|
242
242
|
messageBlocks: [
|
|
243
243
|
{
|
|
244
244
|
_type: "WorkspacePayloadMarkdown",
|
|
245
|
-
text: `**Incident
|
|
245
|
+
text: `**Incident ${createdIncident.incidentNumberWithPrefix || "#" + createdIncident.incidentNumber}** created successfully. [View Incident](${await IncidentService.getIncidentLinkInDashboard(
|
|
246
246
|
slackRequest.projectId!,
|
|
247
247
|
createdIncident.id!,
|
|
248
248
|
)})`,
|
|
@@ -563,15 +563,20 @@ export default class SlackIncidentActions {
|
|
|
563
563
|
});
|
|
564
564
|
|
|
565
565
|
if (isAlreadyAcknowledged) {
|
|
566
|
-
const
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
566
|
+
const incidentNumberResult: {
|
|
567
|
+
number: number | null;
|
|
568
|
+
numberWithPrefix: string | null;
|
|
569
|
+
} = await IncidentService.getIncidentNumber({
|
|
570
|
+
incidentId: incidentId,
|
|
571
|
+
});
|
|
572
|
+
const incidentNumberDisplay: string =
|
|
573
|
+
incidentNumberResult.numberWithPrefix ||
|
|
574
|
+
"#" + incidentNumberResult.number;
|
|
570
575
|
|
|
571
576
|
// send a message to the channel visible to user, that the incident has already been acknowledged.
|
|
572
577
|
const markdwonPayload: WorkspacePayloadMarkdown = {
|
|
573
578
|
_type: "WorkspacePayloadMarkdown",
|
|
574
|
-
text: `@${slackUsername}, unfortunately you cannot acknowledge the **[Incident ${
|
|
579
|
+
text: `@${slackUsername}, unfortunately you cannot acknowledge the **[Incident ${incidentNumberDisplay}](${await IncidentService.getIncidentLinkInDashboard(slackRequest.projectId!, incidentId)})**. It has already been acknowledged.`,
|
|
575
580
|
};
|
|
576
581
|
|
|
577
582
|
await SlackUtil.sendDirectMessageToUser({
|
|
@@ -687,14 +692,19 @@ export default class SlackIncidentActions {
|
|
|
687
692
|
});
|
|
688
693
|
|
|
689
694
|
if (isAlreadyResolved) {
|
|
690
|
-
const
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
695
|
+
const incidentNumberResult: {
|
|
696
|
+
number: number | null;
|
|
697
|
+
numberWithPrefix: string | null;
|
|
698
|
+
} = await IncidentService.getIncidentNumber({
|
|
699
|
+
incidentId: incidentId,
|
|
700
|
+
});
|
|
701
|
+
const incidentNumberDisplay: string =
|
|
702
|
+
incidentNumberResult.numberWithPrefix ||
|
|
703
|
+
"#" + incidentNumberResult.number;
|
|
694
704
|
// send a message to the channel visible to user, that the incident has already been Resolved.
|
|
695
705
|
const markdwonPayload: WorkspacePayloadMarkdown = {
|
|
696
706
|
_type: "WorkspacePayloadMarkdown",
|
|
697
|
-
text: `@${slackUsername}, unfortunately you cannot resolve the **[Incident ${
|
|
707
|
+
text: `@${slackUsername}, unfortunately you cannot resolve the **[Incident ${incidentNumberDisplay}](${await IncidentService.getIncidentLinkInDashboard(slackRequest.projectId!, incidentId)})**. It has already been resolved.`,
|
|
698
708
|
};
|
|
699
709
|
|
|
700
710
|
await SlackUtil.sendDirectMessageToUser({
|
|
@@ -1026,14 +1036,19 @@ export default class SlackIncidentActions {
|
|
|
1026
1036
|
});
|
|
1027
1037
|
|
|
1028
1038
|
if (isAlreadyResolved) {
|
|
1029
|
-
const
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1039
|
+
const incidentNumberResult: {
|
|
1040
|
+
number: number | null;
|
|
1041
|
+
numberWithPrefix: string | null;
|
|
1042
|
+
} = await IncidentService.getIncidentNumber({
|
|
1043
|
+
incidentId: incidentId,
|
|
1044
|
+
});
|
|
1045
|
+
const incidentNumberDisplay: string =
|
|
1046
|
+
incidentNumberResult.numberWithPrefix ||
|
|
1047
|
+
"#" + incidentNumberResult.number;
|
|
1033
1048
|
// send a message to the channel visible to user, that the incident has already been Resolved.
|
|
1034
1049
|
const markdwonPayload: WorkspacePayloadMarkdown = {
|
|
1035
1050
|
_type: "WorkspacePayloadMarkdown",
|
|
1036
|
-
text: `@${slackUsername}, unfortunately you cannot execute the on-call policy for **[Incident ${
|
|
1051
|
+
text: `@${slackUsername}, unfortunately you cannot execute the on-call policy for **[Incident ${incidentNumberDisplay}](${await IncidentService.getIncidentLinkInDashboard(slackRequest.projectId!, incidentId)})**. It has already been resolved.`,
|
|
1037
1052
|
};
|
|
1038
1053
|
|
|
1039
1054
|
await SlackUtil.sendDirectMessageToUser({
|
|
@@ -1369,10 +1384,15 @@ export default class SlackIncidentActions {
|
|
|
1369
1384
|
const incidentId: ObjectID = workspaceLog.incidentId;
|
|
1370
1385
|
|
|
1371
1386
|
// Get the incident number for the confirmation message
|
|
1372
|
-
const
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1387
|
+
const incidentNumberResult: {
|
|
1388
|
+
number: number | null;
|
|
1389
|
+
numberWithPrefix: string | null;
|
|
1390
|
+
} = await IncidentService.getIncidentNumber({
|
|
1391
|
+
incidentId: incidentId,
|
|
1392
|
+
});
|
|
1393
|
+
const incidentNumberDisplay: string =
|
|
1394
|
+
incidentNumberResult.numberWithPrefix ||
|
|
1395
|
+
"#" + incidentNumberResult.number;
|
|
1376
1396
|
|
|
1377
1397
|
// Get the user ID in OneUptime based on Slack user ID
|
|
1378
1398
|
const userAuth: WorkspaceUserAuthToken | null =
|
|
@@ -1491,8 +1511,8 @@ export default class SlackIncidentActions {
|
|
|
1491
1511
|
|
|
1492
1512
|
const confirmationMessage: string =
|
|
1493
1513
|
noteType === "private"
|
|
1494
|
-
? `✅ Message saved as *private note* to <${incidentLink}|Incident
|
|
1495
|
-
: `✅ Message saved as *public note* to <${incidentLink}|Incident
|
|
1514
|
+
? `✅ Message saved as *private note* to <${incidentLink}|Incident ${incidentNumberDisplay}>.`
|
|
1515
|
+
: `✅ Message saved as *public note* to <${incidentLink}|Incident ${incidentNumberDisplay}>. This note will be visible on the status page.`;
|
|
1496
1516
|
|
|
1497
1517
|
await SlackUtil.sendMessageToThread({
|
|
1498
1518
|
authToken: authToken,
|