diff --git a/Accounts/src/Pages/LoginWithSSO.tsx b/Accounts/src/Pages/LoginWithSSO.tsx
index 94141a3823..9b7e10d828 100644
--- a/Accounts/src/Pages/LoginWithSSO.tsx
+++ b/Accounts/src/Pages/LoginWithSSO.tsx
@@ -10,7 +10,7 @@ import Navigation from "CommonUI/src/Utils/Navigation";
import UserUtil from "CommonUI/src/Utils/User";
import User from "Model/Models/User";
import React, { ReactElement, useState } from "react";
-import ProjectSSO from "Model/Models/ProjectSSO";
+import ProjectSSO from "Model/Models/ProjectSso";
import PageLoader from "CommonUI/src/Components/Loader/PageLoader";
import API from "CommonUI/src/Utils/API/API";
import BasicForm from "CommonUI/src/Components/Forms/BasicForm";
diff --git a/App/FeatureSet/Notification/Templates/MonitorOwnerStatusChanged.hbs b/App/FeatureSet/Notification/Templates/MonitorOwnerStatusChanged.hbs
index cbe08ae493..ba4c89e826 100644
--- a/App/FeatureSet/Notification/Templates/MonitorOwnerStatusChanged.hbs
+++ b/App/FeatureSet/Notification/Templates/MonitorOwnerStatusChanged.hbs
@@ -11,8 +11,10 @@
{{> DetailBoxStart this }}
{{> DetailBoxField title="Monitor Name:" text=monitorName }}
{{> DetailBoxField title="New Status: " text=currentStatus }}
+{{#ifNotCond rootCause ""}}
{{> DetailBoxField title="Root Cause: " text="" }}
{{> DetailBoxField title="" text=rootCause }}
+{{/ifNotCond}}
{{> DetailBoxField title="Status changed at: " text="" }}
{{> DetailBoxField title="" text=statusChangedAt }}
{{> DetailBoxField title="Description: " text="" }}
diff --git a/App/FeatureSet/Notification/Templates/Partials/DetailBoxField.hbs b/App/FeatureSet/Notification/Templates/Partials/DetailBoxField.hbs
index 609449ef4f..d3d4604e5e 100644
--- a/App/FeatureSet/Notification/Templates/Partials/DetailBoxField.hbs
+++ b/App/FeatureSet/Notification/Templates/Partials/DetailBoxField.hbs
@@ -1,7 +1,7 @@
- {{#if title}}
-
- {{{title}}} {{{text}}}
+
+{{#if title}}
+{{{title}}} {{{text}}}
{{else}}
{{{text}}}
-{{/if}}
\ No newline at end of file
+{{/if}}
+
\ No newline at end of file
diff --git a/App/FeatureSet/Workers/Jobs/IncidentOwners/SendCreatedResourceNotification.ts b/App/FeatureSet/Workers/Jobs/IncidentOwners/SendCreatedResourceNotification.ts
index f07c7f810b..0abb07b35f 100644
--- a/App/FeatureSet/Workers/Jobs/IncidentOwners/SendCreatedResourceNotification.ts
+++ b/App/FeatureSet/Workers/Jobs/IncidentOwners/SendCreatedResourceNotification.ts
@@ -12,6 +12,7 @@ import IncidentService from "CommonServer/Services/IncidentService";
import ProjectService from "CommonServer/Services/ProjectService";
import UserNotificationSettingService from "CommonServer/Services/UserNotificationSettingService";
import Markdown, { MarkdownContentType } from "CommonServer/Types/Markdown";
+import logger from "CommonServer/Utils/Logger";
import Incident from "Model/Models/Incident";
import Monitor from "Model/Models/Monitor";
import User from "Model/Models/User";
@@ -38,6 +39,7 @@ RunCron(
project: {
name: true,
},
+ remediationNotes: true,
currentIncidentState: {
name: true,
},
@@ -83,67 +85,81 @@ RunCron(
}
for (const user of owners) {
- const vars: Dictionary = {
- incidentTitle: incident.title!,
- projectName: incident.project!.name!,
- currentState: incident.currentIncidentState!.name!,
- incidentDescription: await Markdown.convertToHTML(
- incident.description! || "",
- MarkdownContentType.Email,
- ),
- resourcesAffected:
- incident
- .monitors!.map((monitor: Monitor) => {
- return monitor.name!;
- })
- .join(", ") || "None",
- incidentSeverity: incident.incidentSeverity!.name!,
- declaredAt: OneUptimeDate.getDateAsFormattedHTMLInMultipleTimezones({
- date: incidentIdentifiedDate,
- timezones: user.timezone ? [user.timezone] : [],
- }),
- remediationNotes: incident.remediationNotes || "",
- rootCause:
- incident.rootCause || "No root cause identified for this incident",
- incidentViewLink: (
- await IncidentService.getIncidentLinkInDashboard(
- incident.projectId!,
- incident.id!,
- )
- ).toString(),
- };
+ try {
+ const vars: Dictionary = {
+ incidentTitle: incident.title!,
+ projectName: incident.project!.name!,
+ currentState: incident.currentIncidentState!.name!,
+ incidentDescription: await Markdown.convertToHTML(
+ incident.description! || "",
+ MarkdownContentType.Email,
+ ),
+ resourcesAffected:
+ incident
+ .monitors!.map((monitor: Monitor) => {
+ return monitor.name!;
+ })
+ .join(", ") || "None",
+ incidentSeverity: incident.incidentSeverity!.name!,
+ declaredAt: OneUptimeDate.getDateAsFormattedHTMLInMultipleTimezones(
+ {
+ date: incidentIdentifiedDate,
+ timezones: user.timezone ? [user.timezone] : [],
+ },
+ ),
+ remediationNotes:
+ (await Markdown.convertToHTML(
+ incident.remediationNotes! || "",
+ MarkdownContentType.Email,
+ )) || "",
+ rootCause:
+ incident.rootCause ||
+ "No root cause identified for this incident",
+ incidentViewLink: (
+ await IncidentService.getIncidentLinkInDashboard(
+ incident.projectId!,
+ incident.id!,
+ )
+ ).toString(),
+ };
- if (doesResourceHasOwners === true) {
- vars["isOwner"] = "true";
+ if (doesResourceHasOwners === true) {
+ vars["isOwner"] = "true";
+ }
+
+ const emailMessage: EmailEnvelope = {
+ templateType: EmailTemplateType.IncidentOwnerResourceCreated,
+ vars: vars,
+ subject: "[New Incident] " + incident.title!,
+ };
+
+ const sms: SMSMessage = {
+ message: `This is a message from OneUptime. New incident created: ${incident.title}. To unsubscribe from this notification go to User Settings in OneUptime Dashboard.`,
+ };
+
+ const callMessage: CallRequestMessage = {
+ data: [
+ {
+ sayMessage: `This is a message from OneUptime. New incident created: ${incident.title}. To unsubscribe from this notification go to User Settings in OneUptime Dashboard. Good bye.`,
+ },
+ ],
+ };
+
+ await UserNotificationSettingService.sendUserNotification({
+ userId: user.id!,
+ projectId: incident.projectId!,
+ emailEnvelope: emailMessage,
+ smsMessage: sms,
+ callRequestMessage: callMessage,
+ eventType:
+ NotificationSettingEventType.SEND_INCIDENT_CREATED_OWNER_NOTIFICATION,
+ });
+ } catch (e) {
+ logger.error(
+ "Error in sending incident created resource notification",
+ );
+ logger.error(e);
}
-
- const emailMessage: EmailEnvelope = {
- templateType: EmailTemplateType.IncidentOwnerResourceCreated,
- vars: vars,
- subject: "[Incident] " + incident.title!,
- };
-
- const sms: SMSMessage = {
- message: `This is a message from OneUptime. New incident created: ${incident.title}. To unsubscribe from this notification go to User Settings in OneUptime Dashboard.`,
- };
-
- const callMessage: CallRequestMessage = {
- data: [
- {
- sayMessage: `This is a message from OneUptime. New incident created: ${incident.title}. To unsubscribe from this notification go to User Settings in OneUptime Dashboard. Good bye.`,
- },
- ],
- };
-
- await UserNotificationSettingService.sendUserNotification({
- userId: user.id!,
- projectId: incident.projectId!,
- emailEnvelope: emailMessage,
- smsMessage: sms,
- callRequestMessage: callMessage,
- eventType:
- NotificationSettingEventType.SEND_INCIDENT_CREATED_OWNER_NOTIFICATION,
- });
}
}
},
diff --git a/App/FeatureSet/Workers/Jobs/MonitorOwners/SendStatusChangeNotification.ts b/App/FeatureSet/Workers/Jobs/MonitorOwners/SendStatusChangeNotification.ts
index 4c985d369e..c37bee60e2 100644
--- a/App/FeatureSet/Workers/Jobs/MonitorOwners/SendStatusChangeNotification.ts
+++ b/App/FeatureSet/Workers/Jobs/MonitorOwners/SendStatusChangeNotification.ts
@@ -106,8 +106,7 @@ RunCron(
monitor.id!,
)
).toString(),
- rootCause:
- monitorStatusTimeline.rootCause || "No root cause identified.",
+ rootCause: monitorStatusTimeline.rootCause || "",
};
if (doesResourceHasOwners === true) {
diff --git a/CommonUI/src/Utils/Cookie.ts b/CommonUI/src/Utils/Cookie.ts
index 50214ccdd1..2a17186620 100644
--- a/CommonUI/src/Utils/Cookie.ts
+++ b/CommonUI/src/Utils/Cookie.ts
@@ -10,7 +10,7 @@ import CookieName from "Common/Types/CookieName";
export default class Cookie {
public static setItem(
- key: CookieName,
+ key: CookieName | string,
value: JSONValue | Email | URL,
options?:
| {