@oneuptime/common 7.0.3717 → 7.0.3786
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 +3 -2
- package/Models/DatabaseModels/Incident.ts +3 -2
- package/Models/DatabaseModels/Index.ts +3 -0
- package/Models/DatabaseModels/ProjectUser.ts +335 -0
- package/Models/DatabaseModels/ScheduledMaintenance.ts +3 -2
- package/Server/API/SlackAPI.ts +65 -97
- package/Server/API/UserOnCallLogTimelineAPI.ts +2 -9
- package/Server/Infrastructure/Postgres/SchemaMigrations/1740597525803-MigrationName.ts +17 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1740598793630-MigrationName.ts +17 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1741031019972-MigrationName.ts +17 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1741209339971-MigrationName.ts +101 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
- package/Server/Middleware/SlackAuthorization.ts +11 -2
- package/Server/Services/AlertFeedService.ts +2 -2
- package/Server/Services/AlertInternalNoteService.ts +2 -2
- package/Server/Services/AlertOwnerTeamService.ts +4 -4
- package/Server/Services/AlertOwnerUserService.ts +3 -3
- package/Server/Services/AlertService.ts +62 -20
- package/Server/Services/AlertStateTimelineService.ts +8 -18
- package/Server/Services/IncidentFeedService.ts +101 -2
- package/Server/Services/IncidentInternalNoteService.ts +47 -4
- package/Server/Services/IncidentOwnerTeamService.ts +57 -4
- package/Server/Services/IncidentOwnerUserService.ts +59 -15
- package/Server/Services/IncidentPublicNoteService.ts +41 -4
- package/Server/Services/IncidentService.ts +279 -193
- package/Server/Services/IncidentStateService.ts +25 -0
- package/Server/Services/IncidentStateTimelineService.ts +37 -19
- package/Server/Services/MonitorStatusTimelineService.ts +7 -17
- package/Server/Services/OnCallDutyPolicyEscalationRuleService.ts +2 -0
- package/Server/Services/OnCallDutyPolicyExecutionLogService.ts +74 -7
- package/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.ts +63 -4
- package/Server/Services/OnCallDutyPolicyService.ts +13 -0
- package/Server/Services/ProjectUserService.ts +130 -0
- package/Server/Services/ScheduledMaintenanceFeedService.ts +2 -2
- package/Server/Services/ScheduledMaintenanceInternalNoteService.ts +12 -10
- package/Server/Services/ScheduledMaintenanceOwnerTeamService.ts +22 -18
- package/Server/Services/ScheduledMaintenanceOwnerUserService.ts +28 -30
- package/Server/Services/ScheduledMaintenancePublicNoteService.ts +12 -10
- package/Server/Services/ScheduledMaintenanceService.ts +16 -10
- package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +1 -1
- package/Server/Services/StatusPageSubscriberService.ts +3 -0
- package/Server/Services/TeamMemberService.ts +20 -0
- package/Server/Services/UserNotificationRuleService.ts +74 -0
- package/Server/Services/UserOnCallLogService.ts +1 -1
- package/Server/Services/UserService.ts +35 -0
- package/Server/Services/WorkspaceNotificationRuleService.ts +508 -149
- package/Server/Services/WorkspaceUserAuthTokenService.ts +23 -0
- package/Server/Utils/Express.ts +1 -1
- package/Server/Utils/StartServer.ts +6 -1
- package/Server/Utils/Workspace/MicrosoftTeams/Messages/Incident.ts +195 -0
- package/Server/Utils/Workspace/Slack/Actions/ActionTypes.ts +20 -0
- package/Server/Utils/Workspace/Slack/Actions/Auth.ts +266 -0
- package/Server/Utils/Workspace/Slack/Actions/Incident.ts +1117 -0
- package/Server/Utils/Workspace/Slack/Messages/Incident.ts +116 -0
- package/Server/Utils/Workspace/Slack/Slack.ts +555 -18
- package/Server/Utils/Workspace/Slack/app-manifest.json +18 -10
- package/Server/Utils/Workspace/Workspace.ts +194 -1
- package/Server/Utils/Workspace/WorkspaceBase.ts +145 -19
- package/Server/Utils/Workspace/WorkspaceMessages/Incident.ts +68 -0
- package/Types/Icon/IconProp.ts +1 -0
- package/Types/Workspace/NotificationRules/NotificationRuleCondition.ts +2 -1
- package/Types/Workspace/NotificationRules/NotificationRuleUtil.ts +251 -121
- package/Types/Workspace/NotificationRules/NotificationRuleWorkspaceChannel.ts +6 -0
- package/Types/Workspace/WorkspaceMessagePayload.ts +71 -2
- package/UI/Components/ComingSoon/ComingSoon.tsx +13 -3
- package/UI/Components/Forms/Fields/FormField.tsx +2 -2
- package/UI/Components/Icon/Icon.tsx +39 -2
- package/UI/Components/ModelTable/BaseModelTable.tsx +16 -0
- package/UI/Components/Radio/Radio.tsx +11 -2
- package/UI/Components/Table/TableCard.tsx +2 -2
- package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Incident.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/ProjectUser.js +340 -0
- package/build/dist/Models/DatabaseModels/ProjectUser.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Server/API/SlackAPI.js +39 -79
- package/build/dist/Server/API/SlackAPI.js.map +1 -1
- package/build/dist/Server/API/UserOnCallLogTimelineAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1740597525803-MigrationName.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1740597525803-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1740598793630-MigrationName.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1740598793630-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741031019972-MigrationName.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741031019972-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741209339971-MigrationName.js +42 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741209339971-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/SlackAuthorization.js +8 -2
- package/build/dist/Server/Middleware/SlackAuthorization.js.map +1 -1
- package/build/dist/Server/Services/AlertFeedService.js +2 -2
- package/build/dist/Server/Services/AlertFeedService.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 +3 -3
- package/build/dist/Server/Services/AlertOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/AlertService.js +44 -19
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/AlertStateTimelineService.js +6 -16
- package/build/dist/Server/Services/AlertStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentFeedService.js +62 -2
- package/build/dist/Server/Services/IncidentFeedService.js.map +1 -1
- package/build/dist/Server/Services/IncidentInternalNoteService.js +35 -4
- package/build/dist/Server/Services/IncidentInternalNoteService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOwnerTeamService.js +42 -4
- package/build/dist/Server/Services/IncidentOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOwnerUserService.js +43 -15
- package/build/dist/Server/Services/IncidentOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/IncidentPublicNoteService.js +32 -4
- package/build/dist/Server/Services/IncidentPublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +221 -170
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncidentStateService.js +14 -0
- package/build/dist/Server/Services/IncidentStateService.js.map +1 -1
- package/build/dist/Server/Services/IncidentStateTimelineService.js +31 -17
- package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorStatusTimelineService.js +5 -15
- package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js +1 -0
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js +62 -7
- package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js +51 -5
- package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyService.js +6 -0
- package/build/dist/Server/Services/OnCallDutyPolicyService.js.map +1 -1
- package/build/dist/Server/Services/ProjectUserService.js +106 -0
- package/build/dist/Server/Services/ProjectUserService.js.map +1 -0
- package/build/dist/Server/Services/ScheduledMaintenanceFeedService.js +2 -2
- package/build/dist/Server/Services/ScheduledMaintenanceFeedService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceInternalNoteService.js +2 -2
- package/build/dist/Server/Services/ScheduledMaintenanceInternalNoteService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerTeamService.js +4 -4
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerUserService.js +8 -16
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js +2 -2
- package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceService.js +5 -2
- package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberService.js +3 -0
- package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
- package/build/dist/Server/Services/TeamMemberService.js +17 -0
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationRuleService.js +52 -0
- package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Services/UserOnCallLogService.js +1 -1
- package/build/dist/Server/Services/UserOnCallLogService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +23 -0
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Services/WorkspaceNotificationRuleService.js +306 -84
- package/build/dist/Server/Services/WorkspaceNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Services/WorkspaceUserAuthTokenService.js +18 -0
- package/build/dist/Server/Services/WorkspaceUserAuthTokenService.js.map +1 -1
- package/build/dist/Server/Utils/StartServer.js +4 -0
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Messages/Incident.js +148 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Messages/Incident.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/Slack/Actions/ActionTypes.js +19 -0
- package/build/dist/Server/Utils/Workspace/Slack/Actions/ActionTypes.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js +167 -0
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js +727 -0
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/Slack/Messages/Incident.js +82 -0
- package/build/dist/Server/Utils/Workspace/Slack/Messages/Incident.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js +397 -14
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/app-manifest.json +18 -10
- package/build/dist/Server/Utils/Workspace/Workspace.js +126 -0
- package/build/dist/Server/Utils/Workspace/Workspace.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/WorkspaceBase.js +69 -11
- package/build/dist/Server/Utils/Workspace/WorkspaceBase.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/WorkspaceMessages/Incident.js +47 -0
- package/build/dist/Server/Utils/Workspace/WorkspaceMessages/Incident.js.map +1 -0
- package/build/dist/Types/Icon/IconProp.js +1 -0
- package/build/dist/Types/Icon/IconProp.js.map +1 -1
- package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js +2 -1
- package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js.map +1 -1
- package/build/dist/Types/Workspace/NotificationRules/NotificationRuleUtil.js +214 -120
- package/build/dist/Types/Workspace/NotificationRules/NotificationRuleUtil.js.map +1 -1
- package/build/dist/Types/Workspace/NotificationRules/NotificationRuleWorkspaceChannel.js +2 -0
- package/build/dist/Types/Workspace/NotificationRules/NotificationRuleWorkspaceChannel.js.map +1 -0
- package/build/dist/UI/Components/ComingSoon/ComingSoon.js +3 -2
- package/build/dist/UI/Components/ComingSoon/ComingSoon.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js +2 -2
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +19 -2
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +11 -0
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/Radio/Radio.js +5 -2
- package/build/dist/UI/Components/Radio/Radio.js.map +1 -1
- package/build/dist/UI/Components/Table/TableCard.js +2 -2
- package/build/dist/UI/Components/Table/TableCard.js.map +1 -1
- package/package.json +3 -2
- package/Server/Utils/Workspace/Slack/app-manifest.example.json +0 -198
|
@@ -67,15 +67,17 @@ export class Service extends DatabaseService<Model> {
|
|
|
67
67
|
});
|
|
68
68
|
|
|
69
69
|
if (user && user.name) {
|
|
70
|
-
await ScheduledMaintenanceFeedService.
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
70
|
+
await ScheduledMaintenanceFeedService.createScheduledMaintenanceFeedItem(
|
|
71
|
+
{
|
|
72
|
+
scheduledMaintenanceId: scheduledMaintenanceId,
|
|
73
|
+
projectId: projectId,
|
|
74
|
+
scheduledMaintenanceFeedEventType:
|
|
75
|
+
ScheduledMaintenanceFeedEventType.OwnerUserRemoved,
|
|
76
|
+
displayColor: Red500,
|
|
77
|
+
feedInfoInMarkdown: `Removed **${user.name.toString()}** (${user.email?.toString()}) from the scheduled maintenance as the owner.`,
|
|
78
|
+
userId: deleteByUserId || undefined,
|
|
79
|
+
},
|
|
80
|
+
);
|
|
79
81
|
}
|
|
80
82
|
}
|
|
81
83
|
}
|
|
@@ -97,27 +99,23 @@ export class Service extends DatabaseService<Model> {
|
|
|
97
99
|
createdItem.createdByUserId || onCreate.createBy.props.userId;
|
|
98
100
|
|
|
99
101
|
if (scheduledMaintenanceId && userId && projectId) {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
displayColor: Gray500,
|
|
118
|
-
feedInfoInMarkdown: `**${user.name.toString()}** (${user.email?.toString()}) was added to the scheduled maintenance as the owner.`,
|
|
119
|
-
userId: createdByUserId || undefined,
|
|
120
|
-
});
|
|
102
|
+
if (userId) {
|
|
103
|
+
await ScheduledMaintenanceFeedService.createScheduledMaintenanceFeedItem(
|
|
104
|
+
{
|
|
105
|
+
scheduledMaintenanceId: scheduledMaintenanceId,
|
|
106
|
+
projectId: projectId,
|
|
107
|
+
scheduledMaintenanceFeedEventType:
|
|
108
|
+
ScheduledMaintenanceFeedEventType.OwnerUserAdded,
|
|
109
|
+
displayColor: Gray500,
|
|
110
|
+
feedInfoInMarkdown: `Added **${await UserService.getUserMarkdownString(
|
|
111
|
+
{
|
|
112
|
+
userId: userId,
|
|
113
|
+
projectId: projectId,
|
|
114
|
+
},
|
|
115
|
+
)}** to the scheduled maintenance as the owner.`,
|
|
116
|
+
userId: createdByUserId || undefined,
|
|
117
|
+
},
|
|
118
|
+
);
|
|
121
119
|
}
|
|
122
120
|
}
|
|
123
121
|
|
|
@@ -34,7 +34,7 @@ export class Service extends DatabaseService<Model> {
|
|
|
34
34
|
const userId: ObjectID | null | undefined =
|
|
35
35
|
createdItem.createdByUserId || createdItem.createdByUser?.id;
|
|
36
36
|
|
|
37
|
-
await ScheduledMaintenanceFeedService.
|
|
37
|
+
await ScheduledMaintenanceFeedService.createScheduledMaintenanceFeedItem({
|
|
38
38
|
scheduledMaintenanceId: createdItem.scheduledMaintenanceId!,
|
|
39
39
|
projectId: createdItem.projectId!,
|
|
40
40
|
scheduledMaintenanceFeedEventType:
|
|
@@ -77,19 +77,21 @@ ${createdItem.note}
|
|
|
77
77
|
onUpdate.updateBy.props.userId;
|
|
78
78
|
|
|
79
79
|
for (const updatedItem of updatedItems) {
|
|
80
|
-
await ScheduledMaintenanceFeedService.
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
80
|
+
await ScheduledMaintenanceFeedService.createScheduledMaintenanceFeedItem(
|
|
81
|
+
{
|
|
82
|
+
scheduledMaintenanceId: updatedItem.scheduledMaintenanceId!,
|
|
83
|
+
projectId: updatedItem.projectId!,
|
|
84
|
+
scheduledMaintenanceFeedEventType:
|
|
85
|
+
ScheduledMaintenanceFeedEventType.PublicNote,
|
|
86
|
+
displayColor: Blue500,
|
|
87
|
+
userId: userId || undefined,
|
|
87
88
|
|
|
88
|
-
|
|
89
|
+
feedInfoInMarkdown: `**Updated Public Note**
|
|
89
90
|
|
|
90
91
|
${updatedItem.note}
|
|
91
92
|
`,
|
|
92
|
-
|
|
93
|
+
},
|
|
94
|
+
);
|
|
93
95
|
}
|
|
94
96
|
}
|
|
95
97
|
return onUpdate;
|
|
@@ -162,6 +162,10 @@ export class Service extends DatabaseService<Model> {
|
|
|
162
162
|
continue;
|
|
163
163
|
}
|
|
164
164
|
|
|
165
|
+
if (!statuspage.showScheduledMaintenanceEventsOnStatusPage) {
|
|
166
|
+
continue; // Do not send notification to subscribers if incidents are not visible on status page.
|
|
167
|
+
}
|
|
168
|
+
|
|
165
169
|
const subscribers: Array<StatusPageSubscriber> =
|
|
166
170
|
await StatusPageSubscriberService.getSubscribersByStatusPage(
|
|
167
171
|
statuspage.id!,
|
|
@@ -487,7 +491,7 @@ export class Service extends DatabaseService<Model> {
|
|
|
487
491
|
const createdByUserId: ObjectID | undefined | null =
|
|
488
492
|
createdItem.createdByUserId || createdItem.createdByUser?.id;
|
|
489
493
|
|
|
490
|
-
await ScheduledMaintenanceFeedService.
|
|
494
|
+
await ScheduledMaintenanceFeedService.createScheduledMaintenanceFeedItem({
|
|
491
495
|
scheduledMaintenanceId: createdItem.id!,
|
|
492
496
|
projectId: createdItem.projectId!,
|
|
493
497
|
scheduledMaintenanceFeedEventType:
|
|
@@ -940,15 +944,17 @@ ${labels
|
|
|
940
944
|
}
|
|
941
945
|
|
|
942
946
|
if (shouldAddScheduledMaintenanceFeed) {
|
|
943
|
-
await ScheduledMaintenanceFeedService.
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
947
|
+
await ScheduledMaintenanceFeedService.createScheduledMaintenanceFeedItem(
|
|
948
|
+
{
|
|
949
|
+
scheduledMaintenanceId: scheduledMaintenanceId,
|
|
950
|
+
projectId: onUpdate.updateBy.props.tenantId as ObjectID,
|
|
951
|
+
scheduledMaintenanceFeedEventType:
|
|
952
|
+
ScheduledMaintenanceFeedEventType.ScheduledMaintenanceUpdated,
|
|
953
|
+
displayColor: Gray500,
|
|
954
|
+
feedInfoInMarkdown: feedInfoInMarkdown,
|
|
955
|
+
userId: createdByUserId || undefined,
|
|
956
|
+
},
|
|
957
|
+
);
|
|
952
958
|
}
|
|
953
959
|
}
|
|
954
960
|
}
|
|
@@ -155,7 +155,7 @@ export class Service extends DatabaseService<ScheduledMaintenanceStateTimeline>
|
|
|
155
155
|
|
|
156
156
|
const stateName: string = scheduledMaintenanceState?.name || "";
|
|
157
157
|
|
|
158
|
-
await ScheduledMaintenanceFeedService.
|
|
158
|
+
await ScheduledMaintenanceFeedService.createScheduledMaintenanceFeedItem({
|
|
159
159
|
scheduledMaintenanceId: createdItem.scheduledMaintenanceId!,
|
|
160
160
|
projectId: createdItem.projectId!,
|
|
161
161
|
scheduledMaintenanceFeedEventType:
|
|
@@ -800,6 +800,9 @@ export class Service extends DatabaseService<Model> {
|
|
|
800
800
|
subscriberTimezones: true,
|
|
801
801
|
reportDataInDays: true,
|
|
802
802
|
isReportEnabled: true,
|
|
803
|
+
showAnnouncementsOnStatusPage: true,
|
|
804
|
+
showIncidentsOnStatusPage: true,
|
|
805
|
+
showScheduledMaintenanceEventsOnStatusPage: true,
|
|
803
806
|
},
|
|
804
807
|
});
|
|
805
808
|
|
|
@@ -32,6 +32,7 @@ import PositiveNumber from "../../Types/PositiveNumber";
|
|
|
32
32
|
import Project from "Common/Models/DatabaseModels/Project";
|
|
33
33
|
import TeamMember from "Common/Models/DatabaseModels/TeamMember";
|
|
34
34
|
import User from "Common/Models/DatabaseModels/User";
|
|
35
|
+
import ProjectUserService from "./ProjectUserService";
|
|
35
36
|
|
|
36
37
|
export class TeamMemberService extends DatabaseService<TeamMember> {
|
|
37
38
|
public constructor() {
|
|
@@ -190,6 +191,12 @@ export class TeamMemberService extends DatabaseService<TeamMember> {
|
|
|
190
191
|
onCreate.createBy.data.projectId!,
|
|
191
192
|
);
|
|
192
193
|
|
|
194
|
+
ProjectUserService.refreshProjectUsersByProject({
|
|
195
|
+
projectId: onCreate.createBy.data.projectId!,
|
|
196
|
+
}).catch((err: Error) => {
|
|
197
|
+
logger.error(err);
|
|
198
|
+
});
|
|
199
|
+
|
|
193
200
|
return createdItem;
|
|
194
201
|
}
|
|
195
202
|
|
|
@@ -232,6 +239,12 @@ export class TeamMemberService extends DatabaseService<TeamMember> {
|
|
|
232
239
|
item.user?.email as Email,
|
|
233
240
|
);
|
|
234
241
|
}
|
|
242
|
+
|
|
243
|
+
ProjectUserService.refreshProjectUsersByProject({
|
|
244
|
+
projectId: item.projectId!,
|
|
245
|
+
}).catch((err: Error) => {
|
|
246
|
+
logger.error(err);
|
|
247
|
+
});
|
|
235
248
|
}
|
|
236
249
|
|
|
237
250
|
return { updateBy, carryForward: onUpdate.carryForward };
|
|
@@ -304,6 +317,13 @@ export class TeamMemberService extends DatabaseService<TeamMember> {
|
|
|
304
317
|
item.userId!,
|
|
305
318
|
item.projectId!,
|
|
306
319
|
);
|
|
320
|
+
|
|
321
|
+
// refresh project users.
|
|
322
|
+
ProjectUserService.refreshProjectUsersByProject({
|
|
323
|
+
projectId: item.projectId!,
|
|
324
|
+
}).catch((err: Error) => {
|
|
325
|
+
logger.error(err);
|
|
326
|
+
});
|
|
307
327
|
}
|
|
308
328
|
|
|
309
329
|
return onDelete;
|
|
@@ -43,6 +43,11 @@ import Alert from "../../Models/DatabaseModels/Alert";
|
|
|
43
43
|
import AlertService from "./AlertService";
|
|
44
44
|
import AlertSeverity from "../../Models/DatabaseModels/AlertSeverity";
|
|
45
45
|
import AlertSeverityService from "./AlertSeverityService";
|
|
46
|
+
import WorkspaceNotificationRule from "../../Models/DatabaseModels/WorkspaceNotificationRule";
|
|
47
|
+
import WorkspaceNotificationRuleService from "./WorkspaceNotificationRuleService";
|
|
48
|
+
import NotificationRuleEventType from "../../Types/Workspace/NotificationRules/EventType";
|
|
49
|
+
import NotificationRuleWorkspaceChannel from "../../Types/Workspace/NotificationRules/NotificationRuleWorkspaceChannel";
|
|
50
|
+
import logger from "../Utils/Logger";
|
|
46
51
|
|
|
47
52
|
export class Service extends DatabaseService<Model> {
|
|
48
53
|
public constructor() {
|
|
@@ -888,6 +893,75 @@ export class Service extends DatabaseService<Model> {
|
|
|
888
893
|
isRoot: true,
|
|
889
894
|
},
|
|
890
895
|
});
|
|
896
|
+
|
|
897
|
+
// Alert workspace here. Invite users to channels for example. If they are not invited.
|
|
898
|
+
|
|
899
|
+
this.runWorkspaceRulesForOnCallNotification({
|
|
900
|
+
projectId: options.projectId,
|
|
901
|
+
alertId: options.triggeredByAlertId,
|
|
902
|
+
incidentId: options.triggeredByIncidentId,
|
|
903
|
+
userId: userId,
|
|
904
|
+
}).catch((error: Error) => {
|
|
905
|
+
logger.error(error);
|
|
906
|
+
});
|
|
907
|
+
}
|
|
908
|
+
|
|
909
|
+
public async runWorkspaceRulesForOnCallNotification(data: {
|
|
910
|
+
projectId: ObjectID;
|
|
911
|
+
incidentId?: ObjectID | undefined;
|
|
912
|
+
alertId?: ObjectID | undefined;
|
|
913
|
+
userId: ObjectID;
|
|
914
|
+
}): Promise<void> {
|
|
915
|
+
// if alert and incidient are both present, then throw an error.
|
|
916
|
+
if (data.incidentId && data.alertId) {
|
|
917
|
+
throw new BadDataException("Either incidentId or alertId is required.");
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
// if none are present, then throw an error.
|
|
921
|
+
|
|
922
|
+
if (!data.incidentId && !data.alertId) {
|
|
923
|
+
throw new BadDataException("Either incidentId or alertId is required.");
|
|
924
|
+
}
|
|
925
|
+
|
|
926
|
+
// get notification rule where inviteOwners is true.
|
|
927
|
+
const notificationRules: Array<WorkspaceNotificationRule> =
|
|
928
|
+
await WorkspaceNotificationRuleService.getNotificationRulesWhereInviteOwnersIsTrue(
|
|
929
|
+
{
|
|
930
|
+
projectId: data.projectId!,
|
|
931
|
+
notificationFor: {
|
|
932
|
+
incidentId: data.incidentId,
|
|
933
|
+
alertId: data.alertId,
|
|
934
|
+
},
|
|
935
|
+
notificationRuleEventType: data.incidentId
|
|
936
|
+
? NotificationRuleEventType.Incident
|
|
937
|
+
: NotificationRuleEventType.Alert,
|
|
938
|
+
},
|
|
939
|
+
);
|
|
940
|
+
|
|
941
|
+
let workspaceChannels: Array<NotificationRuleWorkspaceChannel> = [];
|
|
942
|
+
|
|
943
|
+
if (data.incidentId) {
|
|
944
|
+
workspaceChannels = await IncidentService.getWorkspaceChannelForIncident({
|
|
945
|
+
incidentId: data.incidentId!,
|
|
946
|
+
});
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
if (data.alertId) {
|
|
950
|
+
workspaceChannels = await AlertService.getWorkspaceChannelForAlert({
|
|
951
|
+
alertId: data.alertId!,
|
|
952
|
+
});
|
|
953
|
+
}
|
|
954
|
+
|
|
955
|
+
WorkspaceNotificationRuleService.inviteUsersBasedOnRulesAndWorkspaceChannels(
|
|
956
|
+
{
|
|
957
|
+
notificationRules: notificationRules,
|
|
958
|
+
projectId: data.projectId!,
|
|
959
|
+
workspaceChannels: workspaceChannels,
|
|
960
|
+
userIds: [data.userId],
|
|
961
|
+
},
|
|
962
|
+
).catch((error: Error) => {
|
|
963
|
+
logger.error(error);
|
|
964
|
+
});
|
|
891
965
|
}
|
|
892
966
|
|
|
893
967
|
protected override async onBeforeCreate(
|
|
@@ -266,7 +266,7 @@ export class Service extends DatabaseService<Model> {
|
|
|
266
266
|
id: createdItem.onCallDutyPolicyExecutionLogTimelineId!,
|
|
267
267
|
data: {
|
|
268
268
|
status: OnCallDutyExecutionLogTimelineStatus.NotificationSent,
|
|
269
|
-
statusMessage: "
|
|
269
|
+
statusMessage: "Alert Sent",
|
|
270
270
|
},
|
|
271
271
|
props: {
|
|
272
272
|
isRoot: true,
|
|
@@ -39,6 +39,41 @@ export class Service extends DatabaseService<Model> {
|
|
|
39
39
|
super(Model);
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
+
public async getUserMarkdownString(data: {
|
|
43
|
+
userId: ObjectID;
|
|
44
|
+
projectId: ObjectID;
|
|
45
|
+
}): Promise<string> {
|
|
46
|
+
const user: Model | null = await this.findOneBy({
|
|
47
|
+
query: {
|
|
48
|
+
_id: data.userId,
|
|
49
|
+
},
|
|
50
|
+
select: {
|
|
51
|
+
name: true,
|
|
52
|
+
email: true,
|
|
53
|
+
},
|
|
54
|
+
props: {
|
|
55
|
+
isRoot: true,
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
if (!user) {
|
|
60
|
+
return "";
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return `[${user.name?.toString() || user.email?.toString() || "User"}](${(await this.getUserLinkInDashboard(data.projectId, data.userId)).toString()})`;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
public async getUserLinkInDashboard(
|
|
67
|
+
projectId: ObjectID,
|
|
68
|
+
userId: ObjectID,
|
|
69
|
+
): Promise<URL> {
|
|
70
|
+
const dashboardUrl: URL = await DatabaseConfig.getDashboardUrl();
|
|
71
|
+
|
|
72
|
+
return URL.fromString(dashboardUrl.toString()).addRoute(
|
|
73
|
+
`/${projectId.toString()}/settings/users/${userId.toString()}`,
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
|
|
42
77
|
protected override async onCreateSuccess(
|
|
43
78
|
_onCreate: OnCreate<Model>,
|
|
44
79
|
createdItem: Model,
|