@oneuptime/common 11.3.21 → 11.3.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/AnalyticsModels/AnalyticsBaseModel/CommonModel.ts +2 -0
- package/Models/AnalyticsModels/ExceptionInstance.ts +1 -0
- package/Models/AnalyticsModels/Log.ts +1 -0
- package/Models/AnalyticsModels/Metric.ts +1 -0
- package/Models/AnalyticsModels/MonitorLog.ts +1 -0
- package/Models/AnalyticsModels/Span.ts +1 -0
- package/Models/DatabaseModels/Alert.ts +100 -0
- package/Models/DatabaseModels/AlertInternalNote.ts +2 -0
- package/Models/DatabaseModels/AlertReminderRule.ts +597 -0
- package/Models/DatabaseModels/AlertSeverity.ts +2 -0
- package/Models/DatabaseModels/AlertState.ts +2 -0
- package/Models/DatabaseModels/AlertStateTimeline.ts +2 -0
- package/Models/DatabaseModels/Incident.ts +100 -0
- package/Models/DatabaseModels/IncidentInternalNote.ts +2 -0
- package/Models/DatabaseModels/IncidentPublicNote.ts +2 -0
- package/Models/DatabaseModels/IncidentReminderRule.ts +597 -0
- package/Models/DatabaseModels/IncidentSeverity.ts +2 -0
- package/Models/DatabaseModels/IncidentStateTimeline.ts +2 -0
- package/Models/DatabaseModels/Index.ts +6 -0
- package/Models/DatabaseModels/Label.ts +2 -0
- package/Models/DatabaseModels/MonitorStatusTimeline.ts +2 -0
- package/Models/DatabaseModels/ScheduledMaintenance.ts +100 -0
- package/Models/DatabaseModels/ScheduledMaintenanceReminderRule.ts +585 -0
- package/Models/DatabaseModels/ScheduledMaintenanceState.ts +2 -0
- package/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.ts +2 -0
- package/Models/DatabaseModels/StatusPageAnnouncement.ts +2 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783234451106-AddIncidentAlertReminderRules.ts +211 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783320000000-AddScheduledMaintenanceReminderRules.ts +113 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783330000000-AddRemindWhileScheduledToScheduledMaintenanceReminderRule.ts +20 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1783340000000-AddLabelsToIncidentAndAlertReminderRules.ts +69 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
- package/Server/Services/AlertReminderRuleService.ts +253 -0
- package/Server/Services/AlertService.ts +106 -0
- package/Server/Services/IncidentReminderRuleService.ts +256 -0
- package/Server/Services/IncidentService.ts +143 -0
- package/Server/Services/Index.ts +6 -0
- package/Server/Services/ScheduledMaintenanceReminderRuleService.ts +236 -0
- package/Server/Services/ScheduledMaintenanceService.ts +127 -0
- package/Server/Services/TelemetryExceptionService.ts +123 -0
- package/Server/Services/UserNotificationSettingService.ts +24 -0
- package/Server/Utils/AnalyticsDatabase/Statement.ts +7 -3
- package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +35 -0
- package/Server/Utils/WhatsAppTemplateUtil.ts +10 -0
- package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +49 -0
- package/Types/Email/EmailTemplateType.ts +3 -0
- package/Types/NotificationSetting/NotificationSettingEventType.ts +3 -0
- package/Types/Permission.ts +144 -0
- package/Types/Reminder/ReminderStopState.ts +6 -0
- package/Types/Reminder/ScheduledMaintenanceReminderStopState.ts +6 -0
- package/Types/WhatsApp/WhatsAppTemplates.ts +14 -0
- package/build/dist/Models/AnalyticsModels/AnalyticsBaseModel/CommonModel.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/ExceptionInstance.js +1 -0
- package/build/dist/Models/AnalyticsModels/ExceptionInstance.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/Log.js +1 -0
- package/build/dist/Models/AnalyticsModels/Log.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/Metric.js +1 -0
- package/build/dist/Models/AnalyticsModels/Metric.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/MonitorLog.js +1 -0
- package/build/dist/Models/AnalyticsModels/MonitorLog.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/Span.js +1 -0
- package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Alert.js +103 -0
- package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertInternalNote.js +2 -0
- package/build/dist/Models/DatabaseModels/AlertInternalNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertReminderRule.js +605 -0
- package/build/dist/Models/DatabaseModels/AlertReminderRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/AlertSeverity.js +2 -0
- package/build/dist/Models/DatabaseModels/AlertSeverity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertState.js +2 -0
- package/build/dist/Models/DatabaseModels/AlertState.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertStateTimeline.js +2 -0
- package/build/dist/Models/DatabaseModels/AlertStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Incident.js +103 -0
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentInternalNote.js +2 -0
- package/build/dist/Models/DatabaseModels/IncidentInternalNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentPublicNote.js +2 -0
- package/build/dist/Models/DatabaseModels/IncidentPublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentReminderRule.js +605 -0
- package/build/dist/Models/DatabaseModels/IncidentReminderRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/IncidentSeverity.js +2 -0
- package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js +2 -0
- package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +6 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Label.js +2 -0
- package/build/dist/Models/DatabaseModels/Label.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorStatusTimeline.js +2 -0
- package/build/dist/Models/DatabaseModels/MonitorStatusTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +103 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceReminderRule.js +596 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceReminderRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceState.js +2 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceState.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js +2 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js +2 -0
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783234451106-AddIncidentAlertReminderRules.js +78 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783234451106-AddIncidentAlertReminderRules.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783320000000-AddScheduledMaintenanceReminderRules.js +44 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783320000000-AddScheduledMaintenanceReminderRules.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783330000000-AddRemindWhileScheduledToScheduledMaintenanceReminderRule.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783330000000-AddRemindWhileScheduledToScheduledMaintenanceReminderRule.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783340000000-AddLabelsToIncidentAndAlertReminderRules.js +30 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783340000000-AddLabelsToIncidentAndAlertReminderRules.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/AlertReminderRuleService.js +228 -0
- package/build/dist/Server/Services/AlertReminderRuleService.js.map +1 -0
- package/build/dist/Server/Services/AlertService.js +87 -0
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/IncidentReminderRuleService.js +231 -0
- package/build/dist/Server/Services/IncidentReminderRuleService.js.map +1 -0
- package/build/dist/Server/Services/IncidentService.js +116 -0
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +6 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js +214 -0
- package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js.map +1 -0
- package/build/dist/Server/Services/ScheduledMaintenanceService.js +102 -0
- package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryExceptionService.js +101 -0
- package/build/dist/Server/Services/TelemetryExceptionService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationSettingService.js +6 -0
- package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js +4 -2
- package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +29 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
- package/build/dist/Server/Utils/WhatsAppTemplateUtil.js +6 -0
- package/build/dist/Server/Utils/WhatsAppTemplateUtil.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/NotificationSetting/NotificationSettingEventType.js +3 -0
- package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js.map +1 -1
- package/build/dist/Types/Permission.js +126 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Reminder/ReminderStopState.js +7 -0
- package/build/dist/Types/Reminder/ReminderStopState.js.map +1 -0
- package/build/dist/Types/Reminder/ScheduledMaintenanceReminderStopState.js +7 -0
- package/build/dist/Types/Reminder/ScheduledMaintenanceReminderStopState.js.map +1 -0
- package/build/dist/Types/WhatsApp/WhatsAppTemplates.js +9 -0
- package/build/dist/Types/WhatsApp/WhatsAppTemplates.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,597 @@
|
|
|
1
|
+
import IncidentSeverity from "./IncidentSeverity";
|
|
2
|
+
import Label from "./Label";
|
|
3
|
+
import Project from "./Project";
|
|
4
|
+
import User from "./User";
|
|
5
|
+
import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
|
|
6
|
+
import Route from "../../Types/API/Route";
|
|
7
|
+
import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
|
|
8
|
+
import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
|
|
9
|
+
import ColumnLength from "../../Types/Database/ColumnLength";
|
|
10
|
+
import ColumnType from "../../Types/Database/ColumnType";
|
|
11
|
+
import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
|
|
12
|
+
import EnableDocumentation from "../../Types/Database/EnableDocumentation";
|
|
13
|
+
import EnableWorkflow from "../../Types/Database/EnableWorkflow";
|
|
14
|
+
import TableColumn from "../../Types/Database/TableColumn";
|
|
15
|
+
import TableColumnType from "../../Types/Database/TableColumnType";
|
|
16
|
+
import TableMetadata from "../../Types/Database/TableMetadata";
|
|
17
|
+
import TenantColumn from "../../Types/Database/TenantColumn";
|
|
18
|
+
import IconProp from "../../Types/Icon/IconProp";
|
|
19
|
+
import ObjectID from "../../Types/ObjectID";
|
|
20
|
+
import Permission from "../../Types/Permission";
|
|
21
|
+
import ReminderStopState from "../../Types/Reminder/ReminderStopState";
|
|
22
|
+
import {
|
|
23
|
+
Column,
|
|
24
|
+
Entity,
|
|
25
|
+
Index,
|
|
26
|
+
JoinColumn,
|
|
27
|
+
JoinTable,
|
|
28
|
+
ManyToMany,
|
|
29
|
+
ManyToOne,
|
|
30
|
+
} from "typeorm";
|
|
31
|
+
|
|
32
|
+
@EnableDocumentation()
|
|
33
|
+
@TenantColumn("projectId")
|
|
34
|
+
@TableAccessControl({
|
|
35
|
+
create: [
|
|
36
|
+
Permission.ProjectOwner,
|
|
37
|
+
Permission.ProjectAdmin,
|
|
38
|
+
Permission.CreateIncidentReminderRule,
|
|
39
|
+
],
|
|
40
|
+
read: [
|
|
41
|
+
Permission.ProjectOwner,
|
|
42
|
+
Permission.ProjectAdmin,
|
|
43
|
+
Permission.ProjectMember,
|
|
44
|
+
Permission.Viewer,
|
|
45
|
+
Permission.IncidentAdmin,
|
|
46
|
+
Permission.IncidentMember,
|
|
47
|
+
Permission.IncidentViewer,
|
|
48
|
+
Permission.ReadIncidentReminderRule,
|
|
49
|
+
],
|
|
50
|
+
delete: [
|
|
51
|
+
Permission.ProjectOwner,
|
|
52
|
+
Permission.ProjectAdmin,
|
|
53
|
+
Permission.DeleteIncidentReminderRule,
|
|
54
|
+
],
|
|
55
|
+
update: [
|
|
56
|
+
Permission.ProjectOwner,
|
|
57
|
+
Permission.ProjectAdmin,
|
|
58
|
+
Permission.EditIncidentReminderRule,
|
|
59
|
+
],
|
|
60
|
+
})
|
|
61
|
+
@CrudApiEndpoint(new Route("/incident-reminder-rule"))
|
|
62
|
+
@Entity({
|
|
63
|
+
name: "IncidentReminderRule",
|
|
64
|
+
})
|
|
65
|
+
@EnableWorkflow({
|
|
66
|
+
create: true,
|
|
67
|
+
delete: true,
|
|
68
|
+
update: true,
|
|
69
|
+
read: true,
|
|
70
|
+
})
|
|
71
|
+
@TableMetadata({
|
|
72
|
+
tableName: "IncidentReminderRule",
|
|
73
|
+
singularName: "Incident Reminder Rule",
|
|
74
|
+
pluralName: "Incident Reminder Rules",
|
|
75
|
+
icon: IconProp.Bell,
|
|
76
|
+
tableDescription:
|
|
77
|
+
"Configure reminder rules to periodically notify incident owners while an incident is still open",
|
|
78
|
+
})
|
|
79
|
+
export default class IncidentReminderRule extends BaseModel {
|
|
80
|
+
@ColumnAccessControl({
|
|
81
|
+
create: [
|
|
82
|
+
Permission.ProjectOwner,
|
|
83
|
+
Permission.ProjectAdmin,
|
|
84
|
+
Permission.CreateIncidentReminderRule,
|
|
85
|
+
],
|
|
86
|
+
read: [
|
|
87
|
+
Permission.ProjectOwner,
|
|
88
|
+
Permission.ProjectAdmin,
|
|
89
|
+
Permission.ProjectMember,
|
|
90
|
+
Permission.Viewer,
|
|
91
|
+
Permission.IncidentAdmin,
|
|
92
|
+
Permission.IncidentMember,
|
|
93
|
+
Permission.IncidentViewer,
|
|
94
|
+
Permission.ReadIncidentReminderRule,
|
|
95
|
+
],
|
|
96
|
+
update: [],
|
|
97
|
+
})
|
|
98
|
+
@TableColumn({
|
|
99
|
+
manyToOneRelationColumn: "projectId",
|
|
100
|
+
type: TableColumnType.Entity,
|
|
101
|
+
modelType: Project,
|
|
102
|
+
title: "Project",
|
|
103
|
+
description: "Relation to Project Resource in which this object belongs",
|
|
104
|
+
})
|
|
105
|
+
@ManyToOne(
|
|
106
|
+
() => {
|
|
107
|
+
return Project;
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
eager: false,
|
|
111
|
+
nullable: true,
|
|
112
|
+
onDelete: "CASCADE",
|
|
113
|
+
orphanedRowAction: "nullify",
|
|
114
|
+
},
|
|
115
|
+
)
|
|
116
|
+
@JoinColumn({ name: "projectId" })
|
|
117
|
+
public project?: Project = undefined;
|
|
118
|
+
|
|
119
|
+
@ColumnAccessControl({
|
|
120
|
+
create: [
|
|
121
|
+
Permission.ProjectOwner,
|
|
122
|
+
Permission.ProjectAdmin,
|
|
123
|
+
Permission.CreateIncidentReminderRule,
|
|
124
|
+
],
|
|
125
|
+
read: [
|
|
126
|
+
Permission.ProjectOwner,
|
|
127
|
+
Permission.ProjectAdmin,
|
|
128
|
+
Permission.ProjectMember,
|
|
129
|
+
Permission.Viewer,
|
|
130
|
+
Permission.IncidentAdmin,
|
|
131
|
+
Permission.IncidentMember,
|
|
132
|
+
Permission.IncidentViewer,
|
|
133
|
+
Permission.ReadIncidentReminderRule,
|
|
134
|
+
],
|
|
135
|
+
update: [],
|
|
136
|
+
})
|
|
137
|
+
@Index()
|
|
138
|
+
@TableColumn({
|
|
139
|
+
type: TableColumnType.ObjectID,
|
|
140
|
+
required: true,
|
|
141
|
+
canReadOnRelationQuery: true,
|
|
142
|
+
title: "Project ID",
|
|
143
|
+
description: "ID of your OneUptime Project in which this object belongs",
|
|
144
|
+
})
|
|
145
|
+
@Column({
|
|
146
|
+
type: ColumnType.ObjectID,
|
|
147
|
+
nullable: false,
|
|
148
|
+
transformer: ObjectID.getDatabaseTransformer(),
|
|
149
|
+
})
|
|
150
|
+
public projectId?: ObjectID = undefined;
|
|
151
|
+
|
|
152
|
+
@ColumnAccessControl({
|
|
153
|
+
create: [
|
|
154
|
+
Permission.ProjectOwner,
|
|
155
|
+
Permission.ProjectAdmin,
|
|
156
|
+
Permission.CreateIncidentReminderRule,
|
|
157
|
+
],
|
|
158
|
+
read: [
|
|
159
|
+
Permission.ProjectOwner,
|
|
160
|
+
Permission.ProjectAdmin,
|
|
161
|
+
Permission.ProjectMember,
|
|
162
|
+
Permission.Viewer,
|
|
163
|
+
Permission.IncidentAdmin,
|
|
164
|
+
Permission.IncidentMember,
|
|
165
|
+
Permission.IncidentViewer,
|
|
166
|
+
Permission.ReadIncidentReminderRule,
|
|
167
|
+
],
|
|
168
|
+
update: [
|
|
169
|
+
Permission.ProjectOwner,
|
|
170
|
+
Permission.ProjectAdmin,
|
|
171
|
+
Permission.EditIncidentReminderRule,
|
|
172
|
+
],
|
|
173
|
+
})
|
|
174
|
+
@Index()
|
|
175
|
+
@TableColumn({
|
|
176
|
+
required: true,
|
|
177
|
+
type: TableColumnType.ShortText,
|
|
178
|
+
canReadOnRelationQuery: true,
|
|
179
|
+
title: "Name",
|
|
180
|
+
description: "Name of this reminder rule",
|
|
181
|
+
})
|
|
182
|
+
@Column({
|
|
183
|
+
nullable: false,
|
|
184
|
+
type: ColumnType.ShortText,
|
|
185
|
+
length: ColumnLength.ShortText,
|
|
186
|
+
})
|
|
187
|
+
public name?: string = undefined;
|
|
188
|
+
|
|
189
|
+
@ColumnAccessControl({
|
|
190
|
+
create: [
|
|
191
|
+
Permission.ProjectOwner,
|
|
192
|
+
Permission.ProjectAdmin,
|
|
193
|
+
Permission.CreateIncidentReminderRule,
|
|
194
|
+
],
|
|
195
|
+
read: [
|
|
196
|
+
Permission.ProjectOwner,
|
|
197
|
+
Permission.ProjectAdmin,
|
|
198
|
+
Permission.ProjectMember,
|
|
199
|
+
Permission.Viewer,
|
|
200
|
+
Permission.IncidentAdmin,
|
|
201
|
+
Permission.IncidentMember,
|
|
202
|
+
Permission.IncidentViewer,
|
|
203
|
+
Permission.ReadIncidentReminderRule,
|
|
204
|
+
],
|
|
205
|
+
update: [
|
|
206
|
+
Permission.ProjectOwner,
|
|
207
|
+
Permission.ProjectAdmin,
|
|
208
|
+
Permission.EditIncidentReminderRule,
|
|
209
|
+
],
|
|
210
|
+
})
|
|
211
|
+
@TableColumn({
|
|
212
|
+
required: false,
|
|
213
|
+
type: TableColumnType.LongText,
|
|
214
|
+
title: "Description",
|
|
215
|
+
description: "Description of this reminder rule",
|
|
216
|
+
canReadOnRelationQuery: true,
|
|
217
|
+
})
|
|
218
|
+
@Column({
|
|
219
|
+
nullable: true,
|
|
220
|
+
type: ColumnType.LongText,
|
|
221
|
+
length: ColumnLength.LongText,
|
|
222
|
+
})
|
|
223
|
+
public description?: string = undefined;
|
|
224
|
+
|
|
225
|
+
@ColumnAccessControl({
|
|
226
|
+
create: [
|
|
227
|
+
Permission.ProjectOwner,
|
|
228
|
+
Permission.ProjectAdmin,
|
|
229
|
+
Permission.CreateIncidentReminderRule,
|
|
230
|
+
],
|
|
231
|
+
read: [
|
|
232
|
+
Permission.ProjectOwner,
|
|
233
|
+
Permission.ProjectAdmin,
|
|
234
|
+
Permission.ProjectMember,
|
|
235
|
+
Permission.Viewer,
|
|
236
|
+
Permission.IncidentAdmin,
|
|
237
|
+
Permission.IncidentMember,
|
|
238
|
+
Permission.IncidentViewer,
|
|
239
|
+
Permission.ReadIncidentReminderRule,
|
|
240
|
+
],
|
|
241
|
+
update: [
|
|
242
|
+
Permission.ProjectOwner,
|
|
243
|
+
Permission.ProjectAdmin,
|
|
244
|
+
Permission.EditIncidentReminderRule,
|
|
245
|
+
],
|
|
246
|
+
})
|
|
247
|
+
@Index()
|
|
248
|
+
@TableColumn({
|
|
249
|
+
required: true,
|
|
250
|
+
type: TableColumnType.Number,
|
|
251
|
+
title: "Order",
|
|
252
|
+
description:
|
|
253
|
+
"Order/priority of this rule. Rules are evaluated in order (lowest first). First matching rule wins.",
|
|
254
|
+
defaultValue: 1,
|
|
255
|
+
isDefaultValueColumn: true,
|
|
256
|
+
})
|
|
257
|
+
@Column({
|
|
258
|
+
type: ColumnType.Number,
|
|
259
|
+
nullable: false,
|
|
260
|
+
default: 1,
|
|
261
|
+
})
|
|
262
|
+
public order?: number = undefined;
|
|
263
|
+
|
|
264
|
+
@ColumnAccessControl({
|
|
265
|
+
create: [
|
|
266
|
+
Permission.ProjectOwner,
|
|
267
|
+
Permission.ProjectAdmin,
|
|
268
|
+
Permission.CreateIncidentReminderRule,
|
|
269
|
+
],
|
|
270
|
+
read: [
|
|
271
|
+
Permission.ProjectOwner,
|
|
272
|
+
Permission.ProjectAdmin,
|
|
273
|
+
Permission.ProjectMember,
|
|
274
|
+
Permission.Viewer,
|
|
275
|
+
Permission.IncidentAdmin,
|
|
276
|
+
Permission.IncidentMember,
|
|
277
|
+
Permission.IncidentViewer,
|
|
278
|
+
Permission.ReadIncidentReminderRule,
|
|
279
|
+
],
|
|
280
|
+
update: [
|
|
281
|
+
Permission.ProjectOwner,
|
|
282
|
+
Permission.ProjectAdmin,
|
|
283
|
+
Permission.EditIncidentReminderRule,
|
|
284
|
+
],
|
|
285
|
+
})
|
|
286
|
+
@Index()
|
|
287
|
+
@TableColumn({
|
|
288
|
+
required: true,
|
|
289
|
+
type: TableColumnType.Boolean,
|
|
290
|
+
title: "Is Enabled",
|
|
291
|
+
description: "Whether this reminder rule is enabled",
|
|
292
|
+
defaultValue: true,
|
|
293
|
+
isDefaultValueColumn: true,
|
|
294
|
+
})
|
|
295
|
+
@Column({
|
|
296
|
+
type: ColumnType.Boolean,
|
|
297
|
+
nullable: false,
|
|
298
|
+
default: true,
|
|
299
|
+
})
|
|
300
|
+
public isEnabled?: boolean = undefined;
|
|
301
|
+
|
|
302
|
+
@ColumnAccessControl({
|
|
303
|
+
create: [
|
|
304
|
+
Permission.ProjectOwner,
|
|
305
|
+
Permission.ProjectAdmin,
|
|
306
|
+
Permission.CreateIncidentReminderRule,
|
|
307
|
+
],
|
|
308
|
+
read: [
|
|
309
|
+
Permission.ProjectOwner,
|
|
310
|
+
Permission.ProjectAdmin,
|
|
311
|
+
Permission.ProjectMember,
|
|
312
|
+
Permission.Viewer,
|
|
313
|
+
Permission.IncidentAdmin,
|
|
314
|
+
Permission.IncidentMember,
|
|
315
|
+
Permission.IncidentViewer,
|
|
316
|
+
Permission.ReadIncidentReminderRule,
|
|
317
|
+
],
|
|
318
|
+
update: [
|
|
319
|
+
Permission.ProjectOwner,
|
|
320
|
+
Permission.ProjectAdmin,
|
|
321
|
+
Permission.EditIncidentReminderRule,
|
|
322
|
+
],
|
|
323
|
+
})
|
|
324
|
+
@TableColumn({
|
|
325
|
+
required: true,
|
|
326
|
+
type: TableColumnType.Number,
|
|
327
|
+
title: "Reminder Interval (Minutes)",
|
|
328
|
+
description:
|
|
329
|
+
"How often (in minutes) to remind incident owners while the incident is still open. For example, set to 30 to remind owners every 30 minutes.",
|
|
330
|
+
canReadOnRelationQuery: true,
|
|
331
|
+
})
|
|
332
|
+
@Column({
|
|
333
|
+
type: ColumnType.Number,
|
|
334
|
+
nullable: false,
|
|
335
|
+
})
|
|
336
|
+
public reminderIntervalInMinutes?: number = undefined;
|
|
337
|
+
|
|
338
|
+
@ColumnAccessControl({
|
|
339
|
+
create: [
|
|
340
|
+
Permission.ProjectOwner,
|
|
341
|
+
Permission.ProjectAdmin,
|
|
342
|
+
Permission.CreateIncidentReminderRule,
|
|
343
|
+
],
|
|
344
|
+
read: [
|
|
345
|
+
Permission.ProjectOwner,
|
|
346
|
+
Permission.ProjectAdmin,
|
|
347
|
+
Permission.ProjectMember,
|
|
348
|
+
Permission.Viewer,
|
|
349
|
+
Permission.IncidentAdmin,
|
|
350
|
+
Permission.IncidentMember,
|
|
351
|
+
Permission.IncidentViewer,
|
|
352
|
+
Permission.ReadIncidentReminderRule,
|
|
353
|
+
],
|
|
354
|
+
update: [
|
|
355
|
+
Permission.ProjectOwner,
|
|
356
|
+
Permission.ProjectAdmin,
|
|
357
|
+
Permission.EditIncidentReminderRule,
|
|
358
|
+
],
|
|
359
|
+
})
|
|
360
|
+
@TableColumn({
|
|
361
|
+
required: true,
|
|
362
|
+
type: TableColumnType.ShortText,
|
|
363
|
+
title: "Stop Reminders When",
|
|
364
|
+
description:
|
|
365
|
+
"Stop sending reminders once the incident reaches this state. Select Acknowledged to stop reminders when the incident is acknowledged, or Resolved to keep reminding until the incident is resolved.",
|
|
366
|
+
defaultValue: ReminderStopState.Resolved,
|
|
367
|
+
isDefaultValueColumn: true,
|
|
368
|
+
canReadOnRelationQuery: true,
|
|
369
|
+
})
|
|
370
|
+
@Column({
|
|
371
|
+
type: ColumnType.ShortText,
|
|
372
|
+
nullable: false,
|
|
373
|
+
default: ReminderStopState.Resolved,
|
|
374
|
+
})
|
|
375
|
+
public stopRemindersOnState?: ReminderStopState = undefined;
|
|
376
|
+
|
|
377
|
+
// Match Criteria - Incident Severities
|
|
378
|
+
|
|
379
|
+
@ColumnAccessControl({
|
|
380
|
+
create: [
|
|
381
|
+
Permission.ProjectOwner,
|
|
382
|
+
Permission.ProjectAdmin,
|
|
383
|
+
Permission.CreateIncidentReminderRule,
|
|
384
|
+
],
|
|
385
|
+
read: [
|
|
386
|
+
Permission.ProjectOwner,
|
|
387
|
+
Permission.ProjectAdmin,
|
|
388
|
+
Permission.ProjectMember,
|
|
389
|
+
Permission.Viewer,
|
|
390
|
+
Permission.IncidentAdmin,
|
|
391
|
+
Permission.IncidentMember,
|
|
392
|
+
Permission.IncidentViewer,
|
|
393
|
+
Permission.ReadIncidentReminderRule,
|
|
394
|
+
],
|
|
395
|
+
update: [
|
|
396
|
+
Permission.ProjectOwner,
|
|
397
|
+
Permission.ProjectAdmin,
|
|
398
|
+
Permission.EditIncidentReminderRule,
|
|
399
|
+
],
|
|
400
|
+
})
|
|
401
|
+
@TableColumn({
|
|
402
|
+
required: false,
|
|
403
|
+
type: TableColumnType.EntityArray,
|
|
404
|
+
modelType: IncidentSeverity,
|
|
405
|
+
title: "Incident Severities",
|
|
406
|
+
description:
|
|
407
|
+
"Only apply this reminder rule to incidents with these severities. Leave empty to match incidents of any severity.",
|
|
408
|
+
})
|
|
409
|
+
@ManyToMany(
|
|
410
|
+
() => {
|
|
411
|
+
return IncidentSeverity;
|
|
412
|
+
},
|
|
413
|
+
{ eager: false },
|
|
414
|
+
)
|
|
415
|
+
@JoinTable({
|
|
416
|
+
name: "IncidentReminderRuleIncidentSeverity",
|
|
417
|
+
inverseJoinColumn: {
|
|
418
|
+
name: "incidentSeverityId",
|
|
419
|
+
referencedColumnName: "_id",
|
|
420
|
+
},
|
|
421
|
+
joinColumn: {
|
|
422
|
+
name: "incidentReminderRuleId",
|
|
423
|
+
referencedColumnName: "_id",
|
|
424
|
+
},
|
|
425
|
+
})
|
|
426
|
+
public incidentSeverities?: Array<IncidentSeverity> = undefined;
|
|
427
|
+
|
|
428
|
+
// Match Criteria - Labels
|
|
429
|
+
|
|
430
|
+
@ColumnAccessControl({
|
|
431
|
+
create: [
|
|
432
|
+
Permission.ProjectOwner,
|
|
433
|
+
Permission.ProjectAdmin,
|
|
434
|
+
Permission.CreateIncidentReminderRule,
|
|
435
|
+
],
|
|
436
|
+
read: [
|
|
437
|
+
Permission.ProjectOwner,
|
|
438
|
+
Permission.ProjectAdmin,
|
|
439
|
+
Permission.ProjectMember,
|
|
440
|
+
Permission.Viewer,
|
|
441
|
+
Permission.IncidentAdmin,
|
|
442
|
+
Permission.IncidentMember,
|
|
443
|
+
Permission.IncidentViewer,
|
|
444
|
+
Permission.ReadIncidentReminderRule,
|
|
445
|
+
],
|
|
446
|
+
update: [
|
|
447
|
+
Permission.ProjectOwner,
|
|
448
|
+
Permission.ProjectAdmin,
|
|
449
|
+
Permission.EditIncidentReminderRule,
|
|
450
|
+
],
|
|
451
|
+
})
|
|
452
|
+
@TableColumn({
|
|
453
|
+
required: false,
|
|
454
|
+
type: TableColumnType.EntityArray,
|
|
455
|
+
modelType: Label,
|
|
456
|
+
title: "Labels",
|
|
457
|
+
description:
|
|
458
|
+
"Only apply this reminder rule to incidents with these labels. Leave empty to match incidents with any labels.",
|
|
459
|
+
})
|
|
460
|
+
@ManyToMany(
|
|
461
|
+
() => {
|
|
462
|
+
return Label;
|
|
463
|
+
},
|
|
464
|
+
{ eager: false },
|
|
465
|
+
)
|
|
466
|
+
@JoinTable({
|
|
467
|
+
name: "IncidentReminderRuleLabel",
|
|
468
|
+
inverseJoinColumn: {
|
|
469
|
+
name: "labelId",
|
|
470
|
+
referencedColumnName: "_id",
|
|
471
|
+
},
|
|
472
|
+
joinColumn: {
|
|
473
|
+
name: "incidentReminderRuleId",
|
|
474
|
+
referencedColumnName: "_id",
|
|
475
|
+
},
|
|
476
|
+
})
|
|
477
|
+
public labels?: Array<Label> = undefined;
|
|
478
|
+
|
|
479
|
+
// Created By / Deleted By User Relations
|
|
480
|
+
|
|
481
|
+
@ColumnAccessControl({
|
|
482
|
+
create: [
|
|
483
|
+
Permission.ProjectOwner,
|
|
484
|
+
Permission.ProjectAdmin,
|
|
485
|
+
Permission.CreateIncidentReminderRule,
|
|
486
|
+
],
|
|
487
|
+
read: [
|
|
488
|
+
Permission.ProjectOwner,
|
|
489
|
+
Permission.ProjectAdmin,
|
|
490
|
+
Permission.ProjectMember,
|
|
491
|
+
Permission.Viewer,
|
|
492
|
+
Permission.IncidentAdmin,
|
|
493
|
+
Permission.IncidentMember,
|
|
494
|
+
Permission.IncidentViewer,
|
|
495
|
+
Permission.ReadIncidentReminderRule,
|
|
496
|
+
],
|
|
497
|
+
update: [],
|
|
498
|
+
})
|
|
499
|
+
@TableColumn({
|
|
500
|
+
manyToOneRelationColumn: "createdByUserId",
|
|
501
|
+
type: TableColumnType.Entity,
|
|
502
|
+
modelType: User,
|
|
503
|
+
title: "Created by User",
|
|
504
|
+
description:
|
|
505
|
+
"Relation to User who created this object (if this object was created by a User)",
|
|
506
|
+
})
|
|
507
|
+
@ManyToOne(
|
|
508
|
+
() => {
|
|
509
|
+
return User;
|
|
510
|
+
},
|
|
511
|
+
{
|
|
512
|
+
eager: false,
|
|
513
|
+
nullable: true,
|
|
514
|
+
onDelete: "SET NULL",
|
|
515
|
+
orphanedRowAction: "nullify",
|
|
516
|
+
},
|
|
517
|
+
)
|
|
518
|
+
@JoinColumn({ name: "createdByUserId" })
|
|
519
|
+
public createdByUser?: User = undefined;
|
|
520
|
+
|
|
521
|
+
@ColumnAccessControl({
|
|
522
|
+
create: [
|
|
523
|
+
Permission.ProjectOwner,
|
|
524
|
+
Permission.ProjectAdmin,
|
|
525
|
+
Permission.CreateIncidentReminderRule,
|
|
526
|
+
],
|
|
527
|
+
read: [
|
|
528
|
+
Permission.ProjectOwner,
|
|
529
|
+
Permission.ProjectAdmin,
|
|
530
|
+
Permission.ProjectMember,
|
|
531
|
+
Permission.Viewer,
|
|
532
|
+
Permission.IncidentAdmin,
|
|
533
|
+
Permission.IncidentMember,
|
|
534
|
+
Permission.IncidentViewer,
|
|
535
|
+
Permission.ReadIncidentReminderRule,
|
|
536
|
+
],
|
|
537
|
+
update: [],
|
|
538
|
+
})
|
|
539
|
+
@TableColumn({
|
|
540
|
+
type: TableColumnType.ObjectID,
|
|
541
|
+
title: "Created by User ID",
|
|
542
|
+
description:
|
|
543
|
+
"User ID who created this object (if this object was created by a User)",
|
|
544
|
+
})
|
|
545
|
+
@Column({
|
|
546
|
+
type: ColumnType.ObjectID,
|
|
547
|
+
nullable: true,
|
|
548
|
+
transformer: ObjectID.getDatabaseTransformer(),
|
|
549
|
+
})
|
|
550
|
+
public createdByUserId?: ObjectID = undefined;
|
|
551
|
+
|
|
552
|
+
@ColumnAccessControl({
|
|
553
|
+
create: [],
|
|
554
|
+
read: [],
|
|
555
|
+
update: [],
|
|
556
|
+
})
|
|
557
|
+
@TableColumn({
|
|
558
|
+
manyToOneRelationColumn: "deletedByUserId",
|
|
559
|
+
type: TableColumnType.Entity,
|
|
560
|
+
title: "Deleted by User",
|
|
561
|
+
modelType: User,
|
|
562
|
+
description:
|
|
563
|
+
"Relation to User who deleted this object (if this object was deleted by a User)",
|
|
564
|
+
})
|
|
565
|
+
@ManyToOne(
|
|
566
|
+
() => {
|
|
567
|
+
return User;
|
|
568
|
+
},
|
|
569
|
+
{
|
|
570
|
+
cascade: false,
|
|
571
|
+
eager: false,
|
|
572
|
+
nullable: true,
|
|
573
|
+
onDelete: "SET NULL",
|
|
574
|
+
orphanedRowAction: "nullify",
|
|
575
|
+
},
|
|
576
|
+
)
|
|
577
|
+
@JoinColumn({ name: "deletedByUserId" })
|
|
578
|
+
public deletedByUser?: User = undefined;
|
|
579
|
+
|
|
580
|
+
@ColumnAccessControl({
|
|
581
|
+
create: [],
|
|
582
|
+
read: [],
|
|
583
|
+
update: [],
|
|
584
|
+
})
|
|
585
|
+
@TableColumn({
|
|
586
|
+
type: TableColumnType.ObjectID,
|
|
587
|
+
title: "Deleted by User ID",
|
|
588
|
+
description:
|
|
589
|
+
"User ID who deleted this object (if this object was deleted by a User)",
|
|
590
|
+
})
|
|
591
|
+
@Column({
|
|
592
|
+
type: ColumnType.ObjectID,
|
|
593
|
+
nullable: true,
|
|
594
|
+
transformer: ObjectID.getDatabaseTransformer(),
|
|
595
|
+
})
|
|
596
|
+
public deletedByUserId?: ObjectID = undefined;
|
|
597
|
+
}
|
|
@@ -11,6 +11,7 @@ import ColumnLength from "../../Types/Database/ColumnLength";
|
|
|
11
11
|
import ColumnType from "../../Types/Database/ColumnType";
|
|
12
12
|
import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
|
|
13
13
|
import EnableDocumentation from "../../Types/Database/EnableDocumentation";
|
|
14
|
+
import EnableMCP from "../../Types/Database/EnableMCP";
|
|
14
15
|
import EnableWorkflow from "../../Types/Database/EnableWorkflow";
|
|
15
16
|
import ColorField from "../../Types/Database/ColorField";
|
|
16
17
|
import SlugifyColumn from "../../Types/Database/SlugifyColumn";
|
|
@@ -31,6 +32,7 @@ import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
|
|
|
31
32
|
delete: PlanType.Growth,
|
|
32
33
|
})
|
|
33
34
|
@EnableDocumentation()
|
|
35
|
+
@EnableMCP()
|
|
34
36
|
@TenantColumn("projectId")
|
|
35
37
|
@TableAccessControl({
|
|
36
38
|
create: [
|
|
@@ -11,6 +11,7 @@ import CanAccessIfCanReadOn from "../../Types/Database/CanAccessIfCanReadOn";
|
|
|
11
11
|
import ColumnType from "../../Types/Database/ColumnType";
|
|
12
12
|
import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
|
|
13
13
|
import EnableDocumentation from "../../Types/Database/EnableDocumentation";
|
|
14
|
+
import EnableMCP from "../../Types/Database/EnableMCP";
|
|
14
15
|
import EnableWorkflow from "../../Types/Database/EnableWorkflow";
|
|
15
16
|
import TableColumn from "../../Types/Database/TableColumn";
|
|
16
17
|
import TableColumnType from "../../Types/Database/TableColumnType";
|
|
@@ -24,6 +25,7 @@ import StatusPageSubscriberNotificationStatus from "../../Types/StatusPage/Statu
|
|
|
24
25
|
import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
|
|
25
26
|
|
|
26
27
|
@EnableDocumentation()
|
|
28
|
+
@EnableMCP()
|
|
27
29
|
@CanAccessIfCanReadOn("incident")
|
|
28
30
|
@TenantColumn("projectId")
|
|
29
31
|
@Index(["incidentId", "startsAt"]) // Composite index for efficient incident timeline queries
|
|
@@ -337,6 +337,9 @@ import IncidentEpisodePrivacyRule from "./IncidentEpisodePrivacyRule";
|
|
|
337
337
|
import IncidentEpisodeLabelRule from "./IncidentEpisodeLabelRule";
|
|
338
338
|
import IncidentSlaRule from "./IncidentSlaRule";
|
|
339
339
|
import IncidentSla from "./IncidentSla";
|
|
340
|
+
import IncidentReminderRule from "./IncidentReminderRule";
|
|
341
|
+
import AlertReminderRule from "./AlertReminderRule";
|
|
342
|
+
import ScheduledMaintenanceReminderRule from "./ScheduledMaintenanceReminderRule";
|
|
340
343
|
import MonitorOwnerRule from "./MonitorOwnerRule";
|
|
341
344
|
import MonitorLabelRule from "./MonitorLabelRule";
|
|
342
345
|
import StatusPageOwnerRule from "./StatusPageOwnerRule";
|
|
@@ -512,6 +515,9 @@ const AllModelTypes: Array<{
|
|
|
512
515
|
IncidentEpisodeLabelRule,
|
|
513
516
|
IncidentSlaRule,
|
|
514
517
|
IncidentSla,
|
|
518
|
+
IncidentReminderRule,
|
|
519
|
+
AlertReminderRule,
|
|
520
|
+
ScheduledMaintenanceReminderRule,
|
|
515
521
|
|
|
516
522
|
MonitorOwnerRule,
|
|
517
523
|
MonitorLabelRule,
|
|
@@ -11,6 +11,7 @@ import ColumnLength from "../../Types/Database/ColumnLength";
|
|
|
11
11
|
import ColumnType from "../../Types/Database/ColumnType";
|
|
12
12
|
import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
|
|
13
13
|
import EnableDocumentation from "../../Types/Database/EnableDocumentation";
|
|
14
|
+
import EnableMCP from "../../Types/Database/EnableMCP";
|
|
14
15
|
import EnableAuditLog from "../../Types/Database/EnableAuditLog";
|
|
15
16
|
import EnableWorkflow from "../../Types/Database/EnableWorkflow";
|
|
16
17
|
import ColorField from "../../Types/Database/ColorField";
|
|
@@ -32,6 +33,7 @@ import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
|
|
|
32
33
|
delete: PlanType.Free,
|
|
33
34
|
})
|
|
34
35
|
@EnableDocumentation()
|
|
36
|
+
@EnableMCP()
|
|
35
37
|
@TenantColumn("projectId")
|
|
36
38
|
@TableAccessControl({
|
|
37
39
|
create: [
|
|
@@ -11,6 +11,7 @@ import CanAccessIfCanReadOn from "../../Types/Database/CanAccessIfCanReadOn";
|
|
|
11
11
|
import ColumnType from "../../Types/Database/ColumnType";
|
|
12
12
|
import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
|
|
13
13
|
import EnableDocumentation from "../../Types/Database/EnableDocumentation";
|
|
14
|
+
import EnableMCP from "../../Types/Database/EnableMCP";
|
|
14
15
|
import EnableWorkflow from "../../Types/Database/EnableWorkflow";
|
|
15
16
|
import SlugifyColumn from "../../Types/Database/SlugifyColumn";
|
|
16
17
|
import TableColumn from "../../Types/Database/TableColumn";
|
|
@@ -24,6 +25,7 @@ import Permission from "../../Types/Permission";
|
|
|
24
25
|
import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
|
|
25
26
|
|
|
26
27
|
@EnableDocumentation()
|
|
28
|
+
@EnableMCP()
|
|
27
29
|
@CanAccessIfCanReadOn("monitor")
|
|
28
30
|
@TenantColumn("projectId")
|
|
29
31
|
@Index(["monitorId", "projectId", "startsAt"]) // Composite index for efficient timeline queries
|