@oneuptime/common 10.0.53 → 10.0.54

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.
Files changed (380) hide show
  1. package/Models/AnalyticsModels/Metric.ts +78 -0
  2. package/Server/API/AIAgentDataAPI.ts +6 -1
  3. package/Server/API/BillingAPI.ts +28 -6
  4. package/Server/API/CommonAPI.ts +11 -0
  5. package/Server/API/DashboardAPI.ts +6 -2
  6. package/Server/API/DashboardDomainAPI.ts +10 -3
  7. package/Server/API/GitHubAPI.ts +58 -14
  8. package/Server/API/MicrosoftTeamsAPI.ts +97 -33
  9. package/Server/API/OpenSourceDeploymentAPI.ts +2 -2
  10. package/Server/API/SlackAPI.ts +107 -36
  11. package/Server/API/StatusAPI.ts +37 -16
  12. package/Server/API/StatusPageAPI.ts +97 -23
  13. package/Server/API/StatusPageDomainAPI.ts +6 -3
  14. package/Server/API/UserAPI.ts +3 -3
  15. package/Server/API/UserCallAPI.ts +5 -2
  16. package/Server/API/UserEmailAPI.ts +5 -2
  17. package/Server/API/UserPushAPI.ts +9 -3
  18. package/Server/API/UserSmsAPI.ts +5 -2
  19. package/Server/API/UserWhatsAppAPI.ts +5 -2
  20. package/Server/Infrastructure/Postgres/SchemaMigrations/1774559064921-MigrationName.ts +47 -0
  21. package/Server/Infrastructure/Postgres/SchemaMigrations/1775735059360-MigrationName.ts +35 -0
  22. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +4 -0
  23. package/Server/Middleware/NotificationMiddleware.ts +2 -2
  24. package/Server/Middleware/ProjectAuthorization.ts +6 -0
  25. package/Server/Middleware/SCIMAuthorization.ts +2 -1
  26. package/Server/Middleware/SlackAuthorization.ts +28 -10
  27. package/Server/Middleware/TelemetryIngest.ts +16 -3
  28. package/Server/Middleware/UserAuthorization.ts +22 -5
  29. package/Server/Middleware/WhatsAppAuthorization.ts +15 -4
  30. package/Server/Services/AIAgentService.ts +13 -6
  31. package/Server/Services/AIService.ts +9 -3
  32. package/Server/Services/AlertEpisodeFeedService.ts +17 -5
  33. package/Server/Services/AlertEpisodeService.ts +34 -3
  34. package/Server/Services/AlertEpisodeStateTimelineService.ts +80 -22
  35. package/Server/Services/AlertFeedService.ts +17 -5
  36. package/Server/Services/AlertGroupingEngineService.ts +36 -7
  37. package/Server/Services/AlertService.ts +60 -8
  38. package/Server/Services/AlertStateTimelineService.ts +29 -7
  39. package/Server/Services/AnalyticsDatabaseService.ts +59 -25
  40. package/Server/Services/BillingInvoiceService.ts +7 -3
  41. package/Server/Services/BillingService.ts +9 -2
  42. package/Server/Services/DashboardDomainService.ts +56 -22
  43. package/Server/Services/DashboardService.ts +11 -4
  44. package/Server/Services/DatabaseService.ts +31 -11
  45. package/Server/Services/IncidentEpisodeFeedService.ts +17 -5
  46. package/Server/Services/IncidentEpisodeService.ts +34 -3
  47. package/Server/Services/IncidentEpisodeStateTimelineService.ts +80 -22
  48. package/Server/Services/IncidentFeedService.ts +33 -9
  49. package/Server/Services/IncidentGroupingEngineService.ts +35 -6
  50. package/Server/Services/IncidentService.ts +103 -9
  51. package/Server/Services/IncidentSlaRuleService.ts +16 -4
  52. package/Server/Services/IncidentSlaService.ts +20 -4
  53. package/Server/Services/IncidentStateTimelineService.ts +120 -31
  54. package/Server/Services/KubernetesClusterService.ts +62 -14
  55. package/Server/Services/MonitorFeedService.ts +33 -9
  56. package/Server/Services/MonitorProbeService.ts +4 -2
  57. package/Server/Services/MonitorService.ts +35 -4
  58. package/Server/Services/MonitorStatusTimelineService.ts +68 -20
  59. package/Server/Services/NotificationService.ts +4 -2
  60. package/Server/Services/OnCallDutyPolicyEscalationRuleService.ts +53 -9
  61. package/Server/Services/OnCallDutyPolicyEscalationRuleUserService.ts +9 -2
  62. package/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.ts +29 -8
  63. package/Server/Services/OnCallDutyPolicyFeedService.ts +33 -8
  64. package/Server/Services/OnCallDutyPolicyScheduleService.ts +97 -24
  65. package/Server/Services/OnCallDutyPolicyService.ts +2 -1
  66. package/Server/Services/OpenTelemetryIngestService.ts +51 -20
  67. package/Server/Services/ProbeService.ts +16 -7
  68. package/Server/Services/ProjectService.ts +21 -7
  69. package/Server/Services/ScheduledMaintenanceFeedService.ts +17 -4
  70. package/Server/Services/ScheduledMaintenanceService.ts +52 -6
  71. package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +72 -20
  72. package/Server/Services/StatusPageDomainService.ts +59 -23
  73. package/Server/Services/StatusPageService.ts +26 -8
  74. package/Server/Services/StatusPageSubscriberService.ts +382 -111
  75. package/Server/Services/TeamMemberService.ts +9 -3
  76. package/Server/Services/UserNotificationRuleService.ts +9 -3
  77. package/Server/Services/UserService.ts +6 -4
  78. package/Server/Services/UserWhatsAppService.ts +9 -3
  79. package/Server/Services/WorkflowService.ts +7 -3
  80. package/Server/Services/WorkspaceNotificationRuleService.ts +398 -156
  81. package/Server/Types/Domain.ts +15 -5
  82. package/Server/Types/Workflow/Components/API/Post.ts +22 -8
  83. package/Server/Types/Workflow/Components/BaseModel/OnTriggerBaseModel.ts +12 -4
  84. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +10 -0
  85. package/Server/Utils/CodeRepository/CodeRepository.ts +62 -13
  86. package/Server/Utils/Express.ts +1 -0
  87. package/Server/Utils/Greenlock/Greenlock.ts +75 -20
  88. package/Server/Utils/LLM/LLMService.ts +22 -7
  89. package/Server/Utils/Logger.ts +93 -13
  90. package/Server/Utils/Monitor/MonitorAlert.ts +15 -3
  91. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +15 -5
  92. package/Server/Utils/Monitor/MonitorIncident.ts +17 -3
  93. package/Server/Utils/Monitor/MonitorStatusTimeline.ts +6 -1
  94. package/Server/Utils/Profiling.ts +11 -5
  95. package/Server/Utils/Realtime.ts +90 -31
  96. package/Server/Utils/Response.ts +2 -2
  97. package/Server/Utils/StartServer.ts +43 -9
  98. package/Server/Utils/Telemetry/SpanUtil.ts +90 -0
  99. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.ts +58 -15
  100. package/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.ts +58 -15
  101. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.ts +19 -3
  102. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.ts +87 -22
  103. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Monitor.ts +12 -3
  104. package/Server/Utils/Workspace/MicrosoftTeams/Actions/OnCallDutyPolicy.ts +25 -7
  105. package/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.ts +55 -8
  106. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +100 -22
  107. package/Server/Utils/Workspace/Slack/Actions/Alert.ts +35 -9
  108. package/Server/Utils/Workspace/Slack/Actions/AlertEpisode.ts +32 -8
  109. package/Server/Utils/Workspace/Slack/Actions/Auth.ts +3 -1
  110. package/Server/Utils/Workspace/Slack/Actions/Incident.ts +52 -11
  111. package/Server/Utils/Workspace/Slack/Actions/IncidentEpisode.ts +4 -1
  112. package/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.ts +89 -20
  113. package/Server/Utils/Workspace/Slack/Slack.ts +498 -247
  114. package/Server/Utils/Workspace/Workspace.ts +33 -11
  115. package/Server/Utils/Workspace/WorkspaceBase.ts +3 -1
  116. package/Server/Utils/Workspace/WorkspaceMessages/Alert.ts +8 -2
  117. package/Tests/Server/Middleware/UserAuthorization.test.ts +1 -1
  118. package/Tests/Server/Services/AnalyticsDatabaseService.test.ts +12 -3
  119. package/UI/Components/Charts/Area/AreaChart.tsx +35 -1
  120. package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +7 -0
  121. package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +33 -0
  122. package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +33 -0
  123. package/UI/Components/Charts/ChartLibrary/Types/FormattedExemplarPoint.ts +14 -0
  124. package/UI/Components/Charts/Line/LineChart.tsx +35 -1
  125. package/UI/Components/Charts/Types/ExemplarPoint.ts +6 -0
  126. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +3 -3
  127. package/UI/Components/Navbar/NavBar.tsx +10 -0
  128. package/build/dist/Models/AnalyticsModels/Metric.js +70 -0
  129. package/build/dist/Models/AnalyticsModels/Metric.js.map +1 -1
  130. package/build/dist/Server/API/AIAgentDataAPI.js +6 -6
  131. package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
  132. package/build/dist/Server/API/BillingAPI.js +13 -13
  133. package/build/dist/Server/API/BillingAPI.js.map +1 -1
  134. package/build/dist/Server/API/CommonAPI.js +5 -0
  135. package/build/dist/Server/API/CommonAPI.js.map +1 -1
  136. package/build/dist/Server/API/DashboardAPI.js +2 -2
  137. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  138. package/build/dist/Server/API/DashboardDomainAPI.js +3 -3
  139. package/build/dist/Server/API/DashboardDomainAPI.js.map +1 -1
  140. package/build/dist/Server/API/GitHubAPI.js +19 -19
  141. package/build/dist/Server/API/GitHubAPI.js.map +1 -1
  142. package/build/dist/Server/API/MicrosoftTeamsAPI.js +34 -34
  143. package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
  144. package/build/dist/Server/API/OpenSourceDeploymentAPI.js +2 -2
  145. package/build/dist/Server/API/OpenSourceDeploymentAPI.js.map +1 -1
  146. package/build/dist/Server/API/SlackAPI.js +38 -38
  147. package/build/dist/Server/API/SlackAPI.js.map +1 -1
  148. package/build/dist/Server/API/StatusAPI.js +16 -16
  149. package/build/dist/Server/API/StatusAPI.js.map +1 -1
  150. package/build/dist/Server/API/StatusPageAPI.js +52 -52
  151. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  152. package/build/dist/Server/API/StatusPageDomainAPI.js +3 -3
  153. package/build/dist/Server/API/StatusPageDomainAPI.js.map +1 -1
  154. package/build/dist/Server/API/UserAPI.js +3 -3
  155. package/build/dist/Server/API/UserAPI.js.map +1 -1
  156. package/build/dist/Server/API/UserCallAPI.js +2 -2
  157. package/build/dist/Server/API/UserCallAPI.js.map +1 -1
  158. package/build/dist/Server/API/UserEmailAPI.js +2 -2
  159. package/build/dist/Server/API/UserEmailAPI.js.map +1 -1
  160. package/build/dist/Server/API/UserPushAPI.js +3 -3
  161. package/build/dist/Server/API/UserPushAPI.js.map +1 -1
  162. package/build/dist/Server/API/UserSmsAPI.js +2 -2
  163. package/build/dist/Server/API/UserSmsAPI.js.map +1 -1
  164. package/build/dist/Server/API/UserWhatsAppAPI.js +2 -2
  165. package/build/dist/Server/API/UserWhatsAppAPI.js.map +1 -1
  166. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1774559064921-MigrationName.js +40 -0
  167. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1774559064921-MigrationName.js.map +1 -0
  168. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1775735059360-MigrationName.js +18 -0
  169. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1775735059360-MigrationName.js.map +1 -0
  170. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +4 -0
  171. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  172. package/build/dist/Server/Middleware/NotificationMiddleware.js +2 -2
  173. package/build/dist/Server/Middleware/NotificationMiddleware.js.map +1 -1
  174. package/build/dist/Server/Middleware/ProjectAuthorization.js +5 -0
  175. package/build/dist/Server/Middleware/ProjectAuthorization.js.map +1 -1
  176. package/build/dist/Server/Middleware/SCIMAuthorization.js +2 -2
  177. package/build/dist/Server/Middleware/SCIMAuthorization.js.map +1 -1
  178. package/build/dist/Server/Middleware/SlackAuthorization.js +10 -10
  179. package/build/dist/Server/Middleware/SlackAuthorization.js.map +1 -1
  180. package/build/dist/Server/Middleware/TelemetryIngest.js +9 -4
  181. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  182. package/build/dist/Server/Middleware/UserAuthorization.js +10 -5
  183. package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
  184. package/build/dist/Server/Middleware/WhatsAppAuthorization.js +6 -6
  185. package/build/dist/Server/Middleware/WhatsAppAuthorization.js.map +1 -1
  186. package/build/dist/Server/Services/AIAgentService.js +13 -7
  187. package/build/dist/Server/Services/AIAgentService.js.map +1 -1
  188. package/build/dist/Server/Services/AIService.js +9 -2
  189. package/build/dist/Server/Services/AIService.js.map +1 -1
  190. package/build/dist/Server/Services/AlertEpisodeFeedService.js +17 -5
  191. package/build/dist/Server/Services/AlertEpisodeFeedService.js.map +1 -1
  192. package/build/dist/Server/Services/AlertEpisodeService.js +40 -10
  193. package/build/dist/Server/Services/AlertEpisodeService.js.map +1 -1
  194. package/build/dist/Server/Services/AlertEpisodeStateTimelineService.js +81 -24
  195. package/build/dist/Server/Services/AlertEpisodeStateTimelineService.js.map +1 -1
  196. package/build/dist/Server/Services/AlertFeedService.js +17 -5
  197. package/build/dist/Server/Services/AlertFeedService.js.map +1 -1
  198. package/build/dist/Server/Services/AlertGroupingEngineService.js +44 -28
  199. package/build/dist/Server/Services/AlertGroupingEngineService.js.map +1 -1
  200. package/build/dist/Server/Services/AlertService.js +72 -20
  201. package/build/dist/Server/Services/AlertService.js.map +1 -1
  202. package/build/dist/Server/Services/AlertStateTimelineService.js +36 -13
  203. package/build/dist/Server/Services/AlertStateTimelineService.js.map +1 -1
  204. package/build/dist/Server/Services/AnalyticsDatabaseService.js +52 -28
  205. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  206. package/build/dist/Server/Services/BillingInvoiceService.js +7 -2
  207. package/build/dist/Server/Services/BillingInvoiceService.js.map +1 -1
  208. package/build/dist/Server/Services/BillingService.js +8 -8
  209. package/build/dist/Server/Services/BillingService.js.map +1 -1
  210. package/build/dist/Server/Services/DashboardDomainService.js +49 -27
  211. package/build/dist/Server/Services/DashboardDomainService.js.map +1 -1
  212. package/build/dist/Server/Services/DashboardService.js +11 -4
  213. package/build/dist/Server/Services/DashboardService.js.map +1 -1
  214. package/build/dist/Server/Services/DatabaseService.js +32 -12
  215. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  216. package/build/dist/Server/Services/IncidentEpisodeFeedService.js +17 -5
  217. package/build/dist/Server/Services/IncidentEpisodeFeedService.js.map +1 -1
  218. package/build/dist/Server/Services/IncidentEpisodeService.js +40 -10
  219. package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
  220. package/build/dist/Server/Services/IncidentEpisodeStateTimelineService.js +81 -24
  221. package/build/dist/Server/Services/IncidentEpisodeStateTimelineService.js.map +1 -1
  222. package/build/dist/Server/Services/IncidentFeedService.js +34 -10
  223. package/build/dist/Server/Services/IncidentFeedService.js.map +1 -1
  224. package/build/dist/Server/Services/IncidentGroupingEngineService.js +43 -29
  225. package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
  226. package/build/dist/Server/Services/IncidentService.js +116 -28
  227. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  228. package/build/dist/Server/Services/IncidentSlaRuleService.js +19 -11
  229. package/build/dist/Server/Services/IncidentSlaRuleService.js.map +1 -1
  230. package/build/dist/Server/Services/IncidentSlaService.js +21 -14
  231. package/build/dist/Server/Services/IncidentSlaService.js.map +1 -1
  232. package/build/dist/Server/Services/IncidentStateTimelineService.js +130 -37
  233. package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
  234. package/build/dist/Server/Services/KubernetesClusterService.js +51 -14
  235. package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -1
  236. package/build/dist/Server/Services/MonitorFeedService.js +34 -10
  237. package/build/dist/Server/Services/MonitorFeedService.js.map +1 -1
  238. package/build/dist/Server/Services/MonitorProbeService.js +4 -2
  239. package/build/dist/Server/Services/MonitorProbeService.js.map +1 -1
  240. package/build/dist/Server/Services/MonitorService.js +42 -11
  241. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  242. package/build/dist/Server/Services/MonitorStatusTimelineService.js +69 -21
  243. package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
  244. package/build/dist/Server/Services/NotificationService.js +4 -3
  245. package/build/dist/Server/Services/NotificationService.js.map +1 -1
  246. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js +49 -12
  247. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js.map +1 -1
  248. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleUserService.js +9 -3
  249. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleUserService.js.map +1 -1
  250. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js +26 -11
  251. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js.map +1 -1
  252. package/build/dist/Server/Services/OnCallDutyPolicyFeedService.js +34 -10
  253. package/build/dist/Server/Services/OnCallDutyPolicyFeedService.js.map +1 -1
  254. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js +94 -37
  255. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
  256. package/build/dist/Server/Services/OnCallDutyPolicyService.js +1 -1
  257. package/build/dist/Server/Services/OnCallDutyPolicyService.js.map +1 -1
  258. package/build/dist/Server/Services/OpenTelemetryIngestService.js +45 -17
  259. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  260. package/build/dist/Server/Services/ProbeService.js +13 -7
  261. package/build/dist/Server/Services/ProbeService.js.map +1 -1
  262. package/build/dist/Server/Services/ProjectService.js +33 -17
  263. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  264. package/build/dist/Server/Services/ScheduledMaintenanceFeedService.js +17 -5
  265. package/build/dist/Server/Services/ScheduledMaintenanceFeedService.js.map +1 -1
  266. package/build/dist/Server/Services/ScheduledMaintenanceService.js +71 -24
  267. package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
  268. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js +72 -24
  269. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js.map +1 -1
  270. package/build/dist/Server/Services/StatusPageDomainService.js +55 -29
  271. package/build/dist/Server/Services/StatusPageDomainService.js.map +1 -1
  272. package/build/dist/Server/Services/StatusPageService.js +29 -9
  273. package/build/dist/Server/Services/StatusPageService.js.map +1 -1
  274. package/build/dist/Server/Services/StatusPageSubscriberService.js +393 -130
  275. package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
  276. package/build/dist/Server/Services/TeamMemberService.js +10 -2
  277. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  278. package/build/dist/Server/Services/UserNotificationRuleService.js +10 -2
  279. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  280. package/build/dist/Server/Services/UserService.js +8 -3
  281. package/build/dist/Server/Services/UserService.js.map +1 -1
  282. package/build/dist/Server/Services/UserWhatsAppService.js +10 -2
  283. package/build/dist/Server/Services/UserWhatsAppService.js.map +1 -1
  284. package/build/dist/Server/Services/WorkflowService.js +7 -2
  285. package/build/dist/Server/Services/WorkflowService.js.map +1 -1
  286. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js +367 -180
  287. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js.map +1 -1
  288. package/build/dist/Server/Types/Domain.js +12 -6
  289. package/build/dist/Server/Types/Domain.js.map +1 -1
  290. package/build/dist/Server/Types/Workflow/Components/API/Post.js +11 -7
  291. package/build/dist/Server/Types/Workflow/Components/API/Post.js.map +1 -1
  292. package/build/dist/Server/Types/Workflow/Components/BaseModel/OnTriggerBaseModel.js +11 -4
  293. package/build/dist/Server/Types/Workflow/Components/BaseModel/OnTriggerBaseModel.js.map +1 -1
  294. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +7 -0
  295. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  296. package/build/dist/Server/Utils/CodeRepository/CodeRepository.js +45 -17
  297. package/build/dist/Server/Utils/CodeRepository/CodeRepository.js.map +1 -1
  298. package/build/dist/Server/Utils/Express.js.map +1 -1
  299. package/build/dist/Server/Utils/Greenlock/Greenlock.js +36 -29
  300. package/build/dist/Server/Utils/Greenlock/Greenlock.js.map +1 -1
  301. package/build/dist/Server/Utils/LLM/LLMService.js +18 -6
  302. package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
  303. package/build/dist/Server/Utils/Logger.js +61 -13
  304. package/build/dist/Server/Utils/Logger.js.map +1 -1
  305. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +23 -20
  306. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  307. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +13 -4
  308. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  309. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +25 -22
  310. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  311. package/build/dist/Server/Utils/Monitor/MonitorStatusTimeline.js +6 -3
  312. package/build/dist/Server/Utils/Monitor/MonitorStatusTimeline.js.map +1 -1
  313. package/build/dist/Server/Utils/Profiling.js +9 -6
  314. package/build/dist/Server/Utils/Profiling.js.map +1 -1
  315. package/build/dist/Server/Utils/Realtime.js +50 -34
  316. package/build/dist/Server/Utils/Realtime.js.map +1 -1
  317. package/build/dist/Server/Utils/Response.js +2 -2
  318. package/build/dist/Server/Utils/Response.js.map +1 -1
  319. package/build/dist/Server/Utils/StartServer.js +23 -11
  320. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  321. package/build/dist/Server/Utils/Telemetry/SpanUtil.js +52 -0
  322. package/build/dist/Server/Utils/Telemetry/SpanUtil.js.map +1 -0
  323. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js +58 -15
  324. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js.map +1 -1
  325. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js +58 -15
  326. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js.map +1 -1
  327. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js +19 -5
  328. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js.map +1 -1
  329. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js +90 -26
  330. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js.map +1 -1
  331. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Monitor.js +12 -3
  332. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Monitor.js.map +1 -1
  333. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/OnCallDutyPolicy.js +25 -7
  334. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/OnCallDutyPolicy.js.map +1 -1
  335. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js +58 -19
  336. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js.map +1 -1
  337. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +102 -29
  338. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  339. package/build/dist/Server/Utils/Workspace/Slack/Actions/Alert.js +38 -9
  340. package/build/dist/Server/Utils/Workspace/Slack/Actions/Alert.js.map +1 -1
  341. package/build/dist/Server/Utils/Workspace/Slack/Actions/AlertEpisode.js +34 -8
  342. package/build/dist/Server/Utils/Workspace/Slack/Actions/AlertEpisode.js.map +1 -1
  343. package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js +3 -1
  344. package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js.map +1 -1
  345. package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js +55 -13
  346. package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js.map +1 -1
  347. package/build/dist/Server/Utils/Workspace/Slack/Actions/IncidentEpisode.js +5 -1
  348. package/build/dist/Server/Utils/Workspace/Slack/Actions/IncidentEpisode.js.map +1 -1
  349. package/build/dist/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.js +91 -26
  350. package/build/dist/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.js.map +1 -1
  351. package/build/dist/Server/Utils/Workspace/Slack/Slack.js +355 -270
  352. package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
  353. package/build/dist/Server/Utils/Workspace/Workspace.js +21 -12
  354. package/build/dist/Server/Utils/Workspace/Workspace.js.map +1 -1
  355. package/build/dist/Server/Utils/Workspace/WorkspaceBase.js +3 -1
  356. package/build/dist/Server/Utils/Workspace/WorkspaceBase.js.map +1 -1
  357. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/Alert.js +9 -2
  358. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/Alert.js.map +1 -1
  359. package/build/dist/Tests/Server/Middleware/UserAuthorization.test.js +1 -1
  360. package/build/dist/Tests/Server/Middleware/UserAuthorization.test.js.map +1 -1
  361. package/build/dist/Tests/Server/Services/AnalyticsDatabaseService.test.js +12 -6
  362. package/build/dist/Tests/Server/Services/AnalyticsDatabaseService.test.js.map +1 -1
  363. package/build/dist/UI/Components/Charts/Area/AreaChart.js +20 -2
  364. package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
  365. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +2 -2
  366. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
  367. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +9 -2
  368. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
  369. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +9 -2
  370. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
  371. package/build/dist/UI/Components/Charts/ChartLibrary/Types/FormattedExemplarPoint.js +2 -0
  372. package/build/dist/UI/Components/Charts/ChartLibrary/Types/FormattedExemplarPoint.js.map +1 -0
  373. package/build/dist/UI/Components/Charts/Line/LineChart.js +20 -2
  374. package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
  375. package/build/dist/UI/Components/Charts/Types/ExemplarPoint.js +2 -0
  376. package/build/dist/UI/Components/Charts/Types/ExemplarPoint.js.map +1 -0
  377. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +3 -3
  378. package/build/dist/UI/Components/Navbar/NavBar.js +9 -1
  379. package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
  380. package/package.json +1 -1
@@ -9,7 +9,7 @@ import CreateBy from "../Types/Database/CreateBy";
9
9
  import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
10
10
  import { OnCreate } from "../Types/Database/Hooks";
11
11
  import QueryHelper from "../Types/Database/QueryHelper";
12
- import logger from "../Utils/Logger";
12
+ import logger, { LogAttributes } from "../Utils/Logger";
13
13
  import DatabaseService from "./DatabaseService";
14
14
  import MailService from "./MailService";
15
15
  import ProjectCallSMSConfigService from "./ProjectCallSMSConfigService";
@@ -43,38 +43,63 @@ export class Service extends DatabaseService<Model> {
43
43
  protected override async onBeforeCreate(
44
44
  data: CreateBy<Model>,
45
45
  ): Promise<OnCreate<Model>> {
46
- logger.debug("onBeforeCreate called with data:");
47
- logger.debug(data);
46
+ logger.debug("onBeforeCreate called with data:", {
47
+ projectId: data.data.projectId?.toString(),
48
+ statusPageId: data.data.statusPageId?.toString(),
49
+ } as LogAttributes);
50
+ logger.debug(data, {
51
+ projectId: data.data.projectId?.toString(),
52
+ statusPageId: data.data.statusPageId?.toString(),
53
+ } as LogAttributes);
48
54
 
49
55
  if (!data.data.statusPageId) {
50
- logger.debug("Status Page ID is missing.");
56
+ logger.debug("Status Page ID is missing.", {
57
+ projectId: data.data.projectId?.toString(),
58
+ } as LogAttributes);
51
59
  throw new BadDataException("Status Page ID is required.");
52
60
  }
53
61
 
54
62
  if (!data.data.projectId) {
55
- logger.debug("Project ID is missing.");
63
+ logger.debug("Project ID is missing.", {
64
+ statusPageId: data.data.statusPageId?.toString(),
65
+ } as LogAttributes);
56
66
  throw new BadDataException("Project ID is required.");
57
67
  }
58
68
 
59
69
  const projectId: ObjectID = data.data.projectId;
60
- logger.debug(`Project ID: ${projectId}`);
70
+ logger.debug(`Project ID: ${projectId}`, {
71
+ projectId: data.data.projectId?.toString(),
72
+ statusPageId: data.data.statusPageId?.toString(),
73
+ } as LogAttributes);
61
74
 
62
75
  // if the project is on the free plan, then only allow 1 status page.
63
76
  if (IsBillingEnabled) {
64
- logger.debug("Billing is enabled.");
77
+ logger.debug("Billing is enabled.", {
78
+ projectId: data.data.projectId?.toString(),
79
+ statusPageId: data.data.statusPageId?.toString(),
80
+ } as LogAttributes);
65
81
  const currentPlan: CurrentPlan =
66
82
  await ProjectService.getCurrentPlan(projectId);
67
- logger.debug(`Current Plan: ${JSON.stringify(currentPlan)}`);
83
+ logger.debug(`Current Plan: ${JSON.stringify(currentPlan)}`, {
84
+ projectId: data.data.projectId?.toString(),
85
+ statusPageId: data.data.statusPageId?.toString(),
86
+ } as LogAttributes);
68
87
 
69
88
  if (currentPlan.isSubscriptionUnpaid) {
70
- logger.debug("Subscription is unpaid.");
89
+ logger.debug("Subscription is unpaid.", {
90
+ projectId: data.data.projectId?.toString(),
91
+ statusPageId: data.data.statusPageId?.toString(),
92
+ } as LogAttributes);
71
93
  throw new BadDataException(
72
94
  "Your subscription is unpaid. Please update your payment method and to add subscribers.",
73
95
  );
74
96
  }
75
97
 
76
98
  if (currentPlan.plan === PlanType.Free) {
77
- logger.debug("Current plan is Free.");
99
+ logger.debug("Current plan is Free.", {
100
+ projectId: data.data.projectId?.toString(),
101
+ statusPageId: data.data.statusPageId?.toString(),
102
+ } as LogAttributes);
78
103
  const subscribersCount: PositiveNumber = await this.countBy({
79
104
  query: {
80
105
  projectId: projectId,
@@ -83,11 +108,18 @@ export class Service extends DatabaseService<Model> {
83
108
  isRoot: true,
84
109
  },
85
110
  });
86
- logger.debug(`Subscribers Count: ${subscribersCount.toNumber()}`);
111
+ logger.debug(`Subscribers Count: ${subscribersCount.toNumber()}`, {
112
+ projectId: data.data.projectId?.toString(),
113
+ statusPageId: data.data.statusPageId?.toString(),
114
+ } as LogAttributes);
87
115
 
88
116
  if (subscribersCount.toNumber() >= AllowedSubscribersCountInFreePlan) {
89
117
  logger.debug(
90
118
  "Reached maximum allowed subscriber limit for the free plan.",
119
+ {
120
+ projectId: data.data.projectId?.toString(),
121
+ statusPageId: data.data.statusPageId?.toString(),
122
+ } as LogAttributes,
91
123
  );
92
124
  throw new BadDataException(
93
125
  `You have reached the maximum allowed subscriber limit for the free plan. Please upgrade your plan to add more subscribers.`,
@@ -99,7 +131,10 @@ export class Service extends DatabaseService<Model> {
99
131
  let subscriber: Model | null = null;
100
132
 
101
133
  if (data.data.subscriberEmail) {
102
- logger.debug(`Subscriber Email: ${data.data.subscriberEmail}`);
134
+ logger.debug(`Subscriber Email: ${data.data.subscriberEmail}`, {
135
+ projectId: data.data.projectId?.toString(),
136
+ statusPageId: data.data.statusPageId?.toString(),
137
+ } as LogAttributes);
103
138
  subscriber = await this.findOneBy({
104
139
  query: {
105
140
  statusPageId: data.data.statusPageId,
@@ -114,18 +149,30 @@ export class Service extends DatabaseService<Model> {
114
149
  ignoreHooks: true,
115
150
  },
116
151
  });
117
- logger.debug(`Found Subscriber by Email: ${JSON.stringify(subscriber)}`);
152
+ logger.debug(`Found Subscriber by Email: ${JSON.stringify(subscriber)}`, {
153
+ projectId: data.data.projectId?.toString(),
154
+ statusPageId: data.data.statusPageId?.toString(),
155
+ } as LogAttributes);
118
156
  }
119
157
 
120
158
  if (data.data.subscriberPhone) {
121
- logger.debug(`Subscriber Phone: ${data.data.subscriberPhone}`);
159
+ logger.debug(`Subscriber Phone: ${data.data.subscriberPhone}`, {
160
+ projectId: data.data.projectId?.toString(),
161
+ statusPageId: data.data.statusPageId?.toString(),
162
+ } as LogAttributes);
122
163
  // check if this project has SMS enabled.
123
164
  const isSMSEnabled: boolean =
124
165
  await ProjectService.isSMSNotificationsEnabled(projectId);
125
- logger.debug(`Is SMS Enabled: ${isSMSEnabled}`);
166
+ logger.debug(`Is SMS Enabled: ${isSMSEnabled}`, {
167
+ projectId: data.data.projectId?.toString(),
168
+ statusPageId: data.data.statusPageId?.toString(),
169
+ } as LogAttributes);
126
170
 
127
171
  if (!isSMSEnabled) {
128
- logger.debug("SMS notifications are not enabled for this project.");
172
+ logger.debug("SMS notifications are not enabled for this project.", {
173
+ projectId: data.data.projectId?.toString(),
174
+ statusPageId: data.data.statusPageId?.toString(),
175
+ } as LogAttributes);
129
176
  throw new BadDataException(
130
177
  "SMS notifications are not enabled for this project. Please enable SMS notifications in the Project Settings > Notifications Settings.",
131
178
  );
@@ -146,11 +193,17 @@ export class Service extends DatabaseService<Model> {
146
193
  },
147
194
  });
148
195
 
149
- logger.debug(`Found Subscriber by Phone: ${JSON.stringify(subscriber)}`);
196
+ logger.debug(`Found Subscriber by Phone: ${JSON.stringify(subscriber)}`, {
197
+ projectId: data.data.projectId?.toString(),
198
+ statusPageId: data.data.statusPageId?.toString(),
199
+ } as LogAttributes);
150
200
  }
151
201
 
152
202
  if (subscriber && !subscriber.isUnsubscribed) {
153
- logger.debug("Subscriber is already subscribed and not unsubscribed.");
203
+ logger.debug("Subscriber is already subscribed and not unsubscribed.", {
204
+ projectId: data.data.projectId?.toString(),
205
+ statusPageId: data.data.statusPageId?.toString(),
206
+ } as LogAttributes);
154
207
  throw new BadDataException(
155
208
  "You are already subscribed to this status page.",
156
209
  );
@@ -158,7 +211,10 @@ export class Service extends DatabaseService<Model> {
158
211
 
159
212
  // if the user is unsubscribed, delete this record and it'll create a new one.
160
213
  if (subscriber) {
161
- logger.debug("Subscriber is unsubscribed. Deleting old record.");
214
+ logger.debug("Subscriber is unsubscribed. Deleting old record.", {
215
+ projectId: data.data.projectId?.toString(),
216
+ statusPageId: data.data.statusPageId?.toString(),
217
+ } as LogAttributes);
162
218
  await this.deleteOneBy({
163
219
  query: {
164
220
  _id: subscriber?._id as string,
@@ -172,7 +228,10 @@ export class Service extends DatabaseService<Model> {
172
228
 
173
229
  const statuspages: Array<StatusPage> =
174
230
  await this.getStatusPagesToSendNotification([data.data.statusPageId]);
175
- logger.debug(`Status Pages: ${JSON.stringify(statuspages)}`);
231
+ logger.debug(`Status Pages: ${JSON.stringify(statuspages)}`, {
232
+ projectId: data.data.projectId?.toString(),
233
+ statusPageId: data.data.statusPageId?.toString(),
234
+ } as LogAttributes);
176
235
 
177
236
  const statuspage: StatusPage | undefined = statuspages.find(
178
237
  (statuspage: StatusPage) => {
@@ -183,19 +242,31 @@ export class Service extends DatabaseService<Model> {
183
242
  );
184
243
 
185
244
  if (!statuspage || !statuspage.projectId) {
186
- logger.debug("Status Page not found or Project ID is missing.");
245
+ logger.debug("Status Page not found or Project ID is missing.", {
246
+ projectId: data.data.projectId?.toString(),
247
+ statusPageId: data.data.statusPageId?.toString(),
248
+ } as LogAttributes);
187
249
  throw new BadDataException("Status Page not found");
188
250
  }
189
251
 
190
252
  data.data.projectId = statuspage.projectId;
191
- logger.debug(`Updated Project ID: ${data.data.projectId}`);
253
+ logger.debug(`Updated Project ID: ${data.data.projectId}`, {
254
+ projectId: data.data.projectId?.toString(),
255
+ statusPageId: data.data.statusPageId?.toString(),
256
+ } as LogAttributes);
192
257
 
193
258
  const isEmailSubscriber: boolean = Boolean(data.data.subscriberEmail);
194
259
  const isSubscriptionConfirmed: boolean = Boolean(
195
260
  data.data.isSubscriptionConfirmed,
196
261
  );
197
- logger.debug(`Is Email Subscriber: ${isEmailSubscriber}`);
198
- logger.debug(`Is Subscription Confirmed: ${isSubscriptionConfirmed}`);
262
+ logger.debug(`Is Email Subscriber: ${isEmailSubscriber}`, {
263
+ projectId: data.data.projectId?.toString(),
264
+ statusPageId: data.data.statusPageId?.toString(),
265
+ } as LogAttributes);
266
+ logger.debug(`Is Subscription Confirmed: ${isSubscriptionConfirmed}`, {
267
+ projectId: data.data.projectId?.toString(),
268
+ statusPageId: data.data.statusPageId?.toString(),
269
+ } as LogAttributes);
199
270
 
200
271
  if (isEmailSubscriber && !isSubscriptionConfirmed) {
201
272
  data.data.isSubscriptionConfirmed = false;
@@ -204,6 +275,10 @@ export class Service extends DatabaseService<Model> {
204
275
  }
205
276
  logger.debug(
206
277
  `Final Subscription Confirmed: ${data.data.isSubscriptionConfirmed}`,
278
+ {
279
+ projectId: data.data.projectId?.toString(),
280
+ statusPageId: data.data.statusPageId?.toString(),
281
+ } as LogAttributes,
207
282
  );
208
283
 
209
284
  // if slack incoming webhook is provided, then see if it starts with https://hooks.slack.com/services/
@@ -211,13 +286,20 @@ export class Service extends DatabaseService<Model> {
211
286
  if (data.data.slackIncomingWebhookUrl) {
212
287
  logger.debug(
213
288
  `Slack Incoming Webhook URL: ${data.data.slackIncomingWebhookUrl}`,
289
+ {
290
+ projectId: data.data.projectId?.toString(),
291
+ statusPageId: data.data.statusPageId?.toString(),
292
+ } as LogAttributes,
214
293
  );
215
294
  if (
216
295
  !SlackUtil.isValidSlackIncomingWebhookUrl(
217
296
  data.data.slackIncomingWebhookUrl,
218
297
  )
219
298
  ) {
220
- logger.debug("Invalid Slack Incoming Webhook URL.");
299
+ logger.debug("Invalid Slack Incoming Webhook URL.", {
300
+ projectId: data.data.projectId?.toString(),
301
+ statusPageId: data.data.statusPageId?.toString(),
302
+ } as LogAttributes);
221
303
  throw new BadDataException("Invalid Slack Incoming Webhook URL.");
222
304
  }
223
305
  }
@@ -226,13 +308,20 @@ export class Service extends DatabaseService<Model> {
226
308
  if (data.data.microsoftTeamsIncomingWebhookUrl) {
227
309
  logger.debug(
228
310
  `Microsoft Teams Incoming Webhook URL: ${data.data.microsoftTeamsIncomingWebhookUrl}`,
311
+ {
312
+ projectId: data.data.projectId?.toString(),
313
+ statusPageId: data.data.statusPageId?.toString(),
314
+ } as LogAttributes,
229
315
  );
230
316
  if (
231
317
  !MicrosoftTeamsUtil.isValidMicrosoftTeamsIncomingWebhookUrl(
232
318
  data.data.microsoftTeamsIncomingWebhookUrl,
233
319
  )
234
320
  ) {
235
- logger.debug("Invalid Microsoft Teams Incoming Webhook URL.");
321
+ logger.debug("Invalid Microsoft Teams Incoming Webhook URL.", {
322
+ projectId: data.data.projectId?.toString(),
323
+ statusPageId: data.data.statusPageId?.toString(),
324
+ } as LogAttributes);
236
325
  throw new BadDataException(
237
326
  "Invalid Microsoft Teams Incoming Webhook URL.",
238
327
  );
@@ -245,10 +334,20 @@ export class Service extends DatabaseService<Model> {
245
334
  ).toString();
246
335
  logger.debug(
247
336
  `Subscription Confirmation Token: ${data.data.subscriptionConfirmationToken}`,
337
+ {
338
+ projectId: data.data.projectId?.toString(),
339
+ statusPageId: data.data.statusPageId?.toString(),
340
+ } as LogAttributes,
248
341
  );
249
342
 
250
- logger.debug("onBeforeCreate processed data:");
251
- logger.debug(data);
343
+ logger.debug("onBeforeCreate processed data:", {
344
+ projectId: data.data.projectId?.toString(),
345
+ statusPageId: data.data.statusPageId?.toString(),
346
+ } as LogAttributes);
347
+ logger.debug(data, {
348
+ projectId: data.data.projectId?.toString(),
349
+ statusPageId: data.data.statusPageId?.toString(),
350
+ } as LogAttributes);
252
351
 
253
352
  return { createBy: data, carryForward: statuspage };
254
353
  }
@@ -258,30 +357,42 @@ export class Service extends DatabaseService<Model> {
258
357
  onCreate: OnCreate<Model>,
259
358
  createdItem: Model,
260
359
  ): Promise<Model> {
261
- logger.debug("onCreateSuccess called with createdItem:");
262
- logger.debug(createdItem);
360
+ logger.debug("onCreateSuccess called with createdItem:", {
361
+ projectId: createdItem.projectId?.toString(),
362
+ } as LogAttributes);
363
+ logger.debug(createdItem, {
364
+ projectId: createdItem.projectId?.toString(),
365
+ } as LogAttributes);
263
366
 
264
367
  if (!createdItem.statusPageId) {
265
- logger.debug("Status Page ID is missing in createdItem.");
368
+ logger.debug("Status Page ID is missing in createdItem.", {
369
+ projectId: createdItem.projectId?.toString(),
370
+ } as LogAttributes);
266
371
  return createdItem;
267
372
  }
268
373
 
269
374
  const statusPageURL: string = await StatusPageService.getStatusPageURL(
270
375
  createdItem.statusPageId,
271
376
  );
272
- logger.debug(`Status Page URL: ${statusPageURL}`);
377
+ logger.debug(`Status Page URL: ${statusPageURL}`, {
378
+ projectId: createdItem.projectId?.toString(),
379
+ } as LogAttributes);
273
380
 
274
381
  const statusPageName: string =
275
382
  onCreate.carryForward.pageTitle ||
276
383
  onCreate.carryForward.name ||
277
384
  "Status Page";
278
- logger.debug(`Status Page Name: ${statusPageName}`);
385
+ logger.debug(`Status Page Name: ${statusPageName}`, {
386
+ projectId: createdItem.projectId?.toString(),
387
+ } as LogAttributes);
279
388
 
280
389
  const unsubscribeLink: string = this.getUnsubscribeLink(
281
390
  URL.fromString(statusPageURL),
282
391
  createdItem.id!,
283
392
  ).toString();
284
- logger.debug(`Unsubscribe Link: ${unsubscribeLink}`);
393
+ logger.debug(`Unsubscribe Link: ${unsubscribeLink}`, {
394
+ projectId: createdItem.projectId?.toString(),
395
+ } as LogAttributes);
285
396
 
286
397
  if (
287
398
  createdItem.statusPageId &&
@@ -291,6 +402,7 @@ export class Service extends DatabaseService<Model> {
291
402
  ) {
292
403
  logger.debug(
293
404
  "Subscriber has a phone number and sendYouHaveSubscribedMessage is true.",
405
+ { projectId: createdItem.projectId?.toString() } as LogAttributes,
294
406
  );
295
407
  const statusPage: StatusPage | null = await StatusPageService.findOneBy({
296
408
  query: {
@@ -312,12 +424,15 @@ export class Service extends DatabaseService<Model> {
312
424
  });
313
425
 
314
426
  if (!statusPage) {
315
- logger.debug("Status Page not found.");
427
+ logger.debug("Status Page not found.", {
428
+ projectId: createdItem.projectId?.toString(),
429
+ } as LogAttributes);
316
430
  return createdItem;
317
431
  }
318
432
 
319
433
  logger.debug(
320
434
  `Status Page Call SMS Config: ${JSON.stringify(statusPage.callSmsConfig)}`,
435
+ { projectId: createdItem.projectId?.toString() } as LogAttributes,
321
436
  );
322
437
 
323
438
  SmsService.sendSms(
@@ -334,7 +449,9 @@ export class Service extends DatabaseService<Model> {
334
449
  statusPageId: createdItem.statusPageId!,
335
450
  },
336
451
  ).catch((err: Error) => {
337
- logger.error(err);
452
+ logger.error(err, {
453
+ projectId: createdItem.projectId?.toString(),
454
+ } as LogAttributes);
338
455
  });
339
456
  }
340
457
 
@@ -343,15 +460,20 @@ export class Service extends DatabaseService<Model> {
343
460
  createdItem.subscriberEmail &&
344
461
  createdItem._id
345
462
  ) {
346
- logger.debug("Subscriber has an email.");
463
+ logger.debug("Subscriber has an email.", {
464
+ projectId: createdItem.projectId?.toString(),
465
+ } as LogAttributes);
347
466
  const isSubcriptionConfirmed: boolean = Boolean(
348
467
  createdItem.isSubscriptionConfirmed,
349
468
  );
350
- logger.debug(`Is Subscription Confirmed: ${isSubcriptionConfirmed}`);
469
+ logger.debug(`Is Subscription Confirmed: ${isSubcriptionConfirmed}`, {
470
+ projectId: createdItem.projectId?.toString(),
471
+ } as LogAttributes);
351
472
 
352
473
  if (!isSubcriptionConfirmed) {
353
474
  logger.debug(
354
475
  "Subscription is not confirmed. Sending confirmation email.",
476
+ { projectId: createdItem.projectId?.toString() } as LogAttributes,
355
477
  );
356
478
  await this.sendConfirmSubscriptionEmail({
357
479
  subscriberId: createdItem.id!,
@@ -361,6 +483,7 @@ export class Service extends DatabaseService<Model> {
361
483
  if (isSubcriptionConfirmed && createdItem.sendYouHaveSubscribedMessage) {
362
484
  logger.debug(
363
485
  "Subscription is confirmed and sendYouHaveSubscribedMessage is true. Sending 'You have subscribed' email.",
486
+ { projectId: createdItem.projectId?.toString() } as LogAttributes,
364
487
  );
365
488
  await this.sendYouHaveSubscribedEmail({
366
489
  subscriberId: createdItem.id!,
@@ -370,7 +493,9 @@ export class Service extends DatabaseService<Model> {
370
493
 
371
494
  // if slack incoming webhook is provided, then send a message to the slack channel.
372
495
  if (createdItem.slackIncomingWebhookUrl) {
373
- logger.debug("Sending Slack notification for new subscriber.");
496
+ logger.debug("Sending Slack notification for new subscriber.", {
497
+ projectId: createdItem.projectId?.toString(),
498
+ } as LogAttributes);
374
499
  const slackMessage: string = `## 📢 New Subscription to ${statusPageName}
375
500
 
376
501
  **You have successfully subscribed to receive status updates!**
@@ -386,18 +511,26 @@ You will receive real-time notifications for:
386
511
 
387
512
  Stay informed about service availability! 🚀`;
388
513
 
389
- logger.debug(`Slack Message: ${slackMessage}`);
514
+ logger.debug(`Slack Message: ${slackMessage}`, {
515
+ projectId: createdItem.projectId?.toString(),
516
+ } as LogAttributes);
390
517
 
391
518
  SlackUtil.sendMessageToChannelViaIncomingWebhook({
392
519
  url: URL.fromString(createdItem.slackIncomingWebhookUrl.toString()),
393
520
  text: SlackUtil.convertMarkdownToSlackRichText(slackMessage),
394
521
  })
395
522
  .then(() => {
396
- logger.debug("Slack notification sent successfully.");
523
+ logger.debug("Slack notification sent successfully.", {
524
+ projectId: createdItem.projectId?.toString(),
525
+ } as LogAttributes);
397
526
  })
398
527
  .catch((err: Error) => {
399
- logger.error("Error sending Slack notification:");
400
- logger.error(err);
528
+ logger.error("Error sending Slack notification:", {
529
+ projectId: createdItem.projectId?.toString(),
530
+ } as LogAttributes);
531
+ logger.error(err, {
532
+ projectId: createdItem.projectId?.toString(),
533
+ } as LogAttributes);
401
534
  });
402
535
  }
403
536
 
@@ -406,7 +539,9 @@ Stay informed about service availability! 🚀`;
406
539
  createdItem.microsoftTeamsIncomingWebhookUrl &&
407
540
  createdItem.sendYouHaveSubscribedMessage
408
541
  ) {
409
- logger.debug("Sending Microsoft Teams notification for new subscriber.");
542
+ logger.debug("Sending Microsoft Teams notification for new subscriber.", {
543
+ projectId: createdItem.projectId?.toString(),
544
+ } as LogAttributes);
410
545
  const teamsMessage: string = `## 📢 New Subscription to ${statusPageName}
411
546
 
412
547
  **You have successfully subscribed to receive status updates!**
@@ -422,7 +557,9 @@ You will receive real-time notifications for:
422
557
 
423
558
  Stay informed about service availability! 🚀`;
424
559
 
425
- logger.debug(`Teams Message: ${teamsMessage}`);
560
+ logger.debug(`Teams Message: ${teamsMessage}`, {
561
+ projectId: createdItem.projectId?.toString(),
562
+ } as LogAttributes);
426
563
 
427
564
  MicrosoftTeamsUtil.sendMessageToChannelViaIncomingWebhook({
428
565
  url: URL.fromString(
@@ -431,15 +568,23 @@ Stay informed about service availability! 🚀`;
431
568
  text: teamsMessage,
432
569
  })
433
570
  .then(() => {
434
- logger.debug("Microsoft Teams notification sent successfully.");
571
+ logger.debug("Microsoft Teams notification sent successfully.", {
572
+ projectId: createdItem.projectId?.toString(),
573
+ } as LogAttributes);
435
574
  })
436
575
  .catch((err: Error) => {
437
- logger.error("Error sending Microsoft Teams notification:");
438
- logger.error(err);
576
+ logger.error("Error sending Microsoft Teams notification:", {
577
+ projectId: createdItem.projectId?.toString(),
578
+ } as LogAttributes);
579
+ logger.error(err, {
580
+ projectId: createdItem.projectId?.toString(),
581
+ } as LogAttributes);
439
582
  });
440
583
  }
441
584
 
442
- logger.debug("onCreateSuccess completed.");
585
+ logger.debug("onCreateSuccess completed.", {
586
+ projectId: createdItem.projectId?.toString(),
587
+ } as LogAttributes);
443
588
  return createdItem;
444
589
  }
445
590
 
@@ -447,8 +592,12 @@ Stay informed about service availability! 🚀`;
447
592
  public async sendConfirmSubscriptionEmail(data: {
448
593
  subscriberId: ObjectID;
449
594
  }): Promise<void> {
450
- logger.debug("sendConfirmSubscriptionEmail called with data:");
451
- logger.debug(data);
595
+ logger.debug("sendConfirmSubscriptionEmail called with data:", {
596
+ statusPageSubscriberId: data.subscriberId?.toString(),
597
+ } as LogAttributes);
598
+ logger.debug(data, {
599
+ statusPageSubscriberId: data.subscriberId?.toString(),
600
+ } as LogAttributes);
452
601
 
453
602
  // get subscriber
454
603
  const subscriber: Model | null = await this.findOneBy({
@@ -468,11 +617,15 @@ Stay informed about service availability! 🚀`;
468
617
  ignoreHooks: true,
469
618
  },
470
619
  });
471
- logger.debug(`Found Subscriber: ${JSON.stringify(subscriber)}`);
620
+ logger.debug(`Found Subscriber: ${JSON.stringify(subscriber)}`, {
621
+ statusPageSubscriberId: data.subscriberId?.toString(),
622
+ } as LogAttributes);
472
623
 
473
624
  // get status page
474
625
  if (!subscriber || !subscriber.statusPageId) {
475
- logger.debug("Subscriber or Status Page ID is missing.");
626
+ logger.debug("Subscriber or Status Page ID is missing.", {
627
+ statusPageSubscriberId: data.subscriberId?.toString(),
628
+ } as LogAttributes);
476
629
  return;
477
630
  }
478
631
 
@@ -501,27 +654,39 @@ Stay informed about service availability! 🚀`;
501
654
  ignoreHooks: true,
502
655
  },
503
656
  });
504
- logger.debug(`Found Status Page: ${JSON.stringify(statusPage)}`);
657
+ logger.debug(`Found Status Page: ${JSON.stringify(statusPage)}`, {
658
+ statusPageSubscriberId: data.subscriberId?.toString(),
659
+ } as LogAttributes);
505
660
 
506
661
  if (!statusPage || !statusPage.id) {
507
- logger.debug("Status Page not found or ID is missing.");
662
+ logger.debug("Status Page not found or ID is missing.", {
663
+ statusPageSubscriberId: data.subscriberId?.toString(),
664
+ } as LogAttributes);
508
665
  return;
509
666
  }
510
667
 
511
668
  const statusPageURL: string = await StatusPageService.getStatusPageURL(
512
669
  statusPage.id,
513
670
  );
514
- logger.debug(`Status Page URL: ${statusPageURL}`);
671
+ logger.debug(`Status Page URL: ${statusPageURL}`, {
672
+ statusPageSubscriberId: data.subscriberId?.toString(),
673
+ } as LogAttributes);
515
674
 
516
675
  const statusPageName: string =
517
676
  statusPage.pageTitle || statusPage.name || "Status Page";
518
- logger.debug(`Status Page Name: ${statusPageName}`);
677
+ logger.debug(`Status Page Name: ${statusPageName}`, {
678
+ statusPageSubscriberId: data.subscriberId?.toString(),
679
+ } as LogAttributes);
519
680
 
520
681
  const host: Hostname = await DatabaseConfig.getHost();
521
- logger.debug(`Host: ${host}`);
682
+ logger.debug(`Host: ${host}`, {
683
+ statusPageSubscriberId: data.subscriberId?.toString(),
684
+ } as LogAttributes);
522
685
 
523
686
  const httpProtocol: Protocol = await DatabaseConfig.getHttpProtocol();
524
- logger.debug(`HTTP Protocol: ${httpProtocol}`);
687
+ logger.debug(`HTTP Protocol: ${httpProtocol}`, {
688
+ statusPageSubscriberId: data.subscriberId?.toString(),
689
+ } as LogAttributes);
525
690
  const statusPageIdString: string | null =
526
691
  statusPage.id?.toString() || statusPage._id?.toString() || null;
527
692
 
@@ -530,7 +695,9 @@ Stay informed about service availability! 🚀`;
530
695
  confirmationToken: subscriber.subscriptionConfirmationToken || "",
531
696
  statusPageSubscriberId: subscriber.id!,
532
697
  }).toString();
533
- logger.debug(`Confirm Subscription Link: ${confirmSubscriptionLink}`);
698
+ logger.debug(`Confirm Subscription Link: ${confirmSubscriptionLink}`, {
699
+ statusPageSubscriberId: data.subscriberId?.toString(),
700
+ } as LogAttributes);
534
701
 
535
702
  if (
536
703
  subscriber.statusPageId &&
@@ -541,7 +708,9 @@ Stay informed about service availability! 🚀`;
541
708
  URL.fromString(statusPageURL),
542
709
  subscriber.id!,
543
710
  ).toString();
544
- logger.debug(`Unsubscribe URL: ${unsubscribeUrl}`);
711
+ logger.debug(`Unsubscribe URL: ${unsubscribeUrl}`, {
712
+ statusPageSubscriberId: data.subscriberId?.toString(),
713
+ } as LogAttributes);
545
714
 
546
715
  MailService.sendMail(
547
716
  {
@@ -573,11 +742,17 @@ Stay informed about service availability! 🚀`;
573
742
  statusPageId: statusPage.id!,
574
743
  },
575
744
  ).catch((err: Error) => {
576
- logger.error(err);
745
+ logger.error(err, {
746
+ projectId: subscriber.projectId?.toString(),
747
+ } as LogAttributes);
577
748
  });
578
- logger.debug("Confirmation email sent.");
749
+ logger.debug("Confirmation email sent.", {
750
+ statusPageSubscriberId: data.subscriberId?.toString(),
751
+ } as LogAttributes);
579
752
  } else {
580
- logger.debug("Subscriber email or ID is missing.");
753
+ logger.debug("Subscriber email or ID is missing.", {
754
+ statusPageSubscriberId: data.subscriberId?.toString(),
755
+ } as LogAttributes);
581
756
  }
582
757
  }
583
758
 
@@ -585,8 +760,12 @@ Stay informed about service availability! 🚀`;
585
760
  public async sendYouHaveSubscribedEmail(data: {
586
761
  subscriberId: ObjectID;
587
762
  }): Promise<void> {
588
- logger.debug("sendYouHaveSubscribedEmail called with data:");
589
- logger.debug(data);
763
+ logger.debug("sendYouHaveSubscribedEmail called with data:", {
764
+ statusPageSubscriberId: data.subscriberId?.toString(),
765
+ } as LogAttributes);
766
+ logger.debug(data, {
767
+ statusPageSubscriberId: data.subscriberId?.toString(),
768
+ } as LogAttributes);
590
769
 
591
770
  // get subscriber
592
771
  const subscriber: Model | null = await this.findOneBy({
@@ -605,11 +784,15 @@ Stay informed about service availability! 🚀`;
605
784
  ignoreHooks: true,
606
785
  },
607
786
  });
608
- logger.debug(`Found Subscriber: ${JSON.stringify(subscriber)}`);
787
+ logger.debug(`Found Subscriber: ${JSON.stringify(subscriber)}`, {
788
+ statusPageSubscriberId: data.subscriberId?.toString(),
789
+ } as LogAttributes);
609
790
 
610
791
  // get status page
611
792
  if (!subscriber || !subscriber.statusPageId) {
612
- logger.debug("Subscriber or Status Page ID is missing.");
793
+ logger.debug("Subscriber or Status Page ID is missing.", {
794
+ statusPageSubscriberId: data.subscriberId?.toString(),
795
+ } as LogAttributes);
613
796
  return;
614
797
  }
615
798
 
@@ -638,27 +821,39 @@ Stay informed about service availability! 🚀`;
638
821
  ignoreHooks: true,
639
822
  },
640
823
  });
641
- logger.debug(`Found Status Page: ${JSON.stringify(statusPage)}`);
824
+ logger.debug(`Found Status Page: ${JSON.stringify(statusPage)}`, {
825
+ statusPageSubscriberId: data.subscriberId?.toString(),
826
+ } as LogAttributes);
642
827
 
643
828
  if (!statusPage || !statusPage.id) {
644
- logger.debug("Status Page not found or ID is missing.");
829
+ logger.debug("Status Page not found or ID is missing.", {
830
+ statusPageSubscriberId: data.subscriberId?.toString(),
831
+ } as LogAttributes);
645
832
  return;
646
833
  }
647
834
 
648
835
  const statusPageURL: string = await StatusPageService.getStatusPageURL(
649
836
  statusPage.id,
650
837
  );
651
- logger.debug(`Status Page URL: ${statusPageURL}`);
838
+ logger.debug(`Status Page URL: ${statusPageURL}`, {
839
+ statusPageSubscriberId: data.subscriberId?.toString(),
840
+ } as LogAttributes);
652
841
 
653
842
  const statusPageName: string =
654
843
  statusPage.pageTitle || statusPage.name || "Status Page";
655
- logger.debug(`Status Page Name: ${statusPageName}`);
844
+ logger.debug(`Status Page Name: ${statusPageName}`, {
845
+ statusPageSubscriberId: data.subscriberId?.toString(),
846
+ } as LogAttributes);
656
847
 
657
848
  const host: Hostname = await DatabaseConfig.getHost();
658
- logger.debug(`Host: ${host}`);
849
+ logger.debug(`Host: ${host}`, {
850
+ statusPageSubscriberId: data.subscriberId?.toString(),
851
+ } as LogAttributes);
659
852
 
660
853
  const httpProtocol: Protocol = await DatabaseConfig.getHttpProtocol();
661
- logger.debug(`HTTP Protocol: ${httpProtocol}`);
854
+ logger.debug(`HTTP Protocol: ${httpProtocol}`, {
855
+ statusPageSubscriberId: data.subscriberId?.toString(),
856
+ } as LogAttributes);
662
857
  const statusPageIdString: string | null =
663
858
  statusPage.id?.toString() || statusPage._id?.toString() || null;
664
859
 
@@ -666,14 +861,18 @@ Stay informed about service availability! 🚀`;
666
861
  URL.fromString(statusPageURL),
667
862
  subscriber.id!,
668
863
  ).toString();
669
- logger.debug(`Unsubscribe Link: ${unsubscribeLink}`);
864
+ logger.debug(`Unsubscribe Link: ${unsubscribeLink}`, {
865
+ statusPageSubscriberId: data.subscriberId?.toString(),
866
+ } as LogAttributes);
670
867
 
671
868
  if (
672
869
  subscriber.statusPageId &&
673
870
  subscriber.subscriberEmail &&
674
871
  subscriber._id
675
872
  ) {
676
- logger.debug("Subscriber has an email and ID.");
873
+ logger.debug("Subscriber has an email and ID.", {
874
+ statusPageSubscriberId: data.subscriberId?.toString(),
875
+ } as LogAttributes);
677
876
  MailService.sendMail(
678
877
  {
679
878
  toEmail: subscriber.subscriberEmail,
@@ -703,12 +902,20 @@ Stay informed about service availability! 🚀`;
703
902
  statusPageId: statusPage.id!,
704
903
  },
705
904
  ).catch((err: Error) => {
706
- logger.error("Error sending subscription email:");
707
- logger.error(err);
905
+ logger.error("Error sending subscription email:", {
906
+ projectId: subscriber.projectId?.toString(),
907
+ } as LogAttributes);
908
+ logger.error(err, {
909
+ projectId: subscriber.projectId?.toString(),
910
+ } as LogAttributes);
708
911
  });
709
- logger.debug("Subscription email sent successfully.");
912
+ logger.debug("Subscription email sent successfully.", {
913
+ statusPageSubscriberId: data.subscriberId?.toString(),
914
+ } as LogAttributes);
710
915
  } else {
711
- logger.debug("Subscriber email or ID is missing.");
916
+ logger.debug("Subscriber email or ID is missing.", {
917
+ statusPageSubscriberId: data.subscriberId?.toString(),
918
+ } as LogAttributes);
712
919
  }
713
920
  }
714
921
 
@@ -717,8 +924,12 @@ Stay informed about service availability! 🚀`;
717
924
  confirmationToken: string;
718
925
  statusPageSubscriberId: ObjectID;
719
926
  }): URL {
720
- logger.debug("getConfirmSubscriptionLink called with data:");
721
- logger.debug(data);
927
+ logger.debug("getConfirmSubscriptionLink called with data:", {
928
+ statusPageSubscriberId: data.statusPageSubscriberId?.toString(),
929
+ } as LogAttributes);
930
+ logger.debug(data, {
931
+ statusPageSubscriberId: data.statusPageSubscriberId?.toString(),
932
+ } as LogAttributes);
722
933
 
723
934
  const confirmSubscriptionLink: URL = URL.fromString(
724
935
  data.statusPageUrl,
@@ -728,6 +939,9 @@ Stay informed about service availability! 🚀`;
728
939
 
729
940
  logger.debug(
730
941
  `Generated Confirm Subscription Link: ${confirmSubscriptionLink.toString()}`,
942
+ {
943
+ statusPageSubscriberId: data.statusPageSubscriberId?.toString(),
944
+ } as LogAttributes,
731
945
  );
732
946
  return confirmSubscriptionLink;
733
947
  }
@@ -737,10 +951,18 @@ Stay informed about service availability! 🚀`;
737
951
  statusPageId: ObjectID,
738
952
  props: DatabaseCommonInteractionProps,
739
953
  ): Promise<Array<Model>> {
740
- logger.debug("getSubscribersByStatusPage called with statusPageId:");
741
- logger.debug(statusPageId);
742
- logger.debug("DatabaseCommonInteractionProps:");
743
- logger.debug(props);
954
+ logger.debug("getSubscribersByStatusPage called with statusPageId:", {
955
+ statusPageId: statusPageId?.toString(),
956
+ } as LogAttributes);
957
+ logger.debug(statusPageId, {
958
+ statusPageId: statusPageId?.toString(),
959
+ } as LogAttributes);
960
+ logger.debug("DatabaseCommonInteractionProps:", {
961
+ statusPageId: statusPageId?.toString(),
962
+ } as LogAttributes);
963
+ logger.debug(props, {
964
+ statusPageId: statusPageId?.toString(),
965
+ } as LogAttributes);
744
966
 
745
967
  const subscribers: Array<Model> = await this.findBy({
746
968
  query: {
@@ -765,8 +987,12 @@ Stay informed about service availability! 🚀`;
765
987
  props: props,
766
988
  });
767
989
 
768
- logger.debug("Found subscribers:");
769
- logger.debug(subscribers);
990
+ logger.debug("Found subscribers:", {
991
+ statusPageId: statusPageId?.toString(),
992
+ } as LogAttributes);
993
+ logger.debug(subscribers, {
994
+ statusPageId: statusPageId?.toString(),
995
+ } as LogAttributes);
770
996
 
771
997
  return subscribers;
772
998
  }
@@ -775,17 +1001,29 @@ Stay informed about service availability! 🚀`;
775
1001
  statusPageUrl: URL,
776
1002
  statusPageSubscriberId: ObjectID,
777
1003
  ): URL {
778
- logger.debug("getUnsubscribeLink called with statusPageUrl:");
779
- logger.debug(statusPageUrl);
780
- logger.debug("statusPageSubscriberId:");
781
- logger.debug(statusPageSubscriberId);
1004
+ logger.debug("getUnsubscribeLink called with statusPageUrl:", {
1005
+ statusPageSubscriberId: statusPageSubscriberId?.toString(),
1006
+ } as LogAttributes);
1007
+ logger.debug(statusPageUrl, {
1008
+ statusPageSubscriberId: statusPageSubscriberId?.toString(),
1009
+ } as LogAttributes);
1010
+ logger.debug("statusPageSubscriberId:", {
1011
+ statusPageSubscriberId: statusPageSubscriberId?.toString(),
1012
+ } as LogAttributes);
1013
+ logger.debug(statusPageSubscriberId, {
1014
+ statusPageSubscriberId: statusPageSubscriberId?.toString(),
1015
+ } as LogAttributes);
782
1016
 
783
1017
  const unsubscribeLink: URL = URL.fromString(
784
1018
  statusPageUrl.toString(),
785
1019
  ).addRoute("/update-subscription/" + statusPageSubscriberId.toString());
786
1020
 
787
- logger.debug("Generated Unsubscribe Link:");
788
- logger.debug(unsubscribeLink);
1021
+ logger.debug("Generated Unsubscribe Link:", {
1022
+ statusPageSubscriberId: statusPageSubscriberId?.toString(),
1023
+ } as LogAttributes);
1024
+ logger.debug(unsubscribeLink, {
1025
+ statusPageSubscriberId: statusPageSubscriberId?.toString(),
1026
+ } as LogAttributes);
789
1027
 
790
1028
  return unsubscribeLink;
791
1029
  }
@@ -796,13 +1034,19 @@ Stay informed about service availability! 🚀`;
796
1034
  statusPage: StatusPage;
797
1035
  eventType: StatusPageEventType;
798
1036
  }): boolean {
799
- logger.debug("shouldSendNotification called with data:");
800
- logger.debug(data);
1037
+ logger.debug("shouldSendNotification called with data:", {
1038
+ statusPageId: data.statusPage?.id?.toString(),
1039
+ } as LogAttributes);
1040
+ logger.debug(data, {
1041
+ statusPageId: data.statusPage?.id?.toString(),
1042
+ } as LogAttributes);
801
1043
 
802
1044
  let shouldSendNotification: boolean = true; // default to true.
803
1045
 
804
1046
  if (data.subscriber.isUnsubscribed) {
805
- logger.debug("Subscriber is unsubscribed.");
1047
+ logger.debug("Subscriber is unsubscribed.", {
1048
+ statusPageId: data.statusPage?.id?.toString(),
1049
+ } as LogAttributes);
806
1050
  shouldSendNotification = false;
807
1051
  return shouldSendNotification;
808
1052
  }
@@ -817,6 +1061,7 @@ Stay informed about service availability! 🚀`;
817
1061
  ) {
818
1062
  logger.debug(
819
1063
  "Subscriber can choose resources and is not subscribed to all resources.",
1064
+ { statusPageId: data.statusPage?.id?.toString() } as LogAttributes,
820
1065
  );
821
1066
  const subscriberResourceIds: Array<string> =
822
1067
  data.subscriber.statusPageResources?.map(
@@ -825,27 +1070,37 @@ Stay informed about service availability! 🚀`;
825
1070
  },
826
1071
  ) || [];
827
1072
 
828
- logger.debug(`Subscriber Resource IDs: ${subscriberResourceIds}`);
1073
+ logger.debug(`Subscriber Resource IDs: ${subscriberResourceIds}`, {
1074
+ statusPageId: data.statusPage?.id?.toString(),
1075
+ } as LogAttributes);
829
1076
 
830
1077
  let shouldSendNotificationForResource: boolean = false;
831
1078
 
832
1079
  if (subscriberResourceIds.length === 0) {
833
- logger.debug("Subscriber has no resource IDs.");
1080
+ logger.debug("Subscriber has no resource IDs.", {
1081
+ statusPageId: data.statusPage?.id?.toString(),
1082
+ } as LogAttributes);
834
1083
  shouldSendNotificationForResource = false;
835
1084
  } else {
836
1085
  for (const resource of data.statusPageResources) {
837
- logger.debug(`Checking resource: ${resource.id}`);
1086
+ logger.debug(`Checking resource: ${resource.id}`, {
1087
+ statusPageId: data.statusPage?.id?.toString(),
1088
+ } as LogAttributes);
838
1089
  if (
839
1090
  subscriberResourceIds.includes(resource.id?.toString() as string)
840
1091
  ) {
841
- logger.debug("Resource ID matches subscriber's resource ID.");
1092
+ logger.debug("Resource ID matches subscriber's resource ID.", {
1093
+ statusPageId: data.statusPage?.id?.toString(),
1094
+ } as LogAttributes);
842
1095
  shouldSendNotificationForResource = true;
843
1096
  }
844
1097
  }
845
1098
  }
846
1099
 
847
1100
  if (!shouldSendNotificationForResource) {
848
- logger.debug("Should not send notification for resource.");
1101
+ logger.debug("Should not send notification for resource.", {
1102
+ statusPageId: data.statusPage?.id?.toString(),
1103
+ } as LogAttributes);
849
1104
  shouldSendNotification = false;
850
1105
  }
851
1106
  }
@@ -858,27 +1113,36 @@ Stay informed about service availability! 🚀`;
858
1113
  ) {
859
1114
  logger.debug(
860
1115
  "Subscriber can choose event types and is not subscribed to all event types.",
1116
+ { statusPageId: data.statusPage?.id?.toString() } as LogAttributes,
861
1117
  );
862
1118
  const subscriberEventTypes: Array<StatusPageEventType> =
863
1119
  data.subscriber.statusPageEventTypes || [];
864
1120
 
865
- logger.debug(`Subscriber Event Types: ${subscriberEventTypes}`);
1121
+ logger.debug(`Subscriber Event Types: ${subscriberEventTypes}`, {
1122
+ statusPageId: data.statusPage?.id?.toString(),
1123
+ } as LogAttributes);
866
1124
 
867
1125
  let shouldSendNotificationForEventType: boolean = false;
868
1126
 
869
1127
  if (subscriberEventTypes.includes(data.eventType)) {
870
- logger.debug("Event type matches subscriber's event type.");
1128
+ logger.debug("Event type matches subscriber's event type.", {
1129
+ statusPageId: data.statusPage?.id?.toString(),
1130
+ } as LogAttributes);
871
1131
  shouldSendNotificationForEventType = true;
872
1132
  }
873
1133
 
874
1134
  if (!shouldSendNotificationForEventType) {
875
- logger.debug("Should not send notification for event type.");
1135
+ logger.debug(
1136
+ "Should not send notification for event type.",
1137
+ {} as LogAttributes,
1138
+ );
876
1139
  shouldSendNotification = false;
877
1140
  }
878
1141
  }
879
1142
 
880
1143
  logger.debug(
881
1144
  `Final decision on shouldSendNotification: ${shouldSendNotification}`,
1145
+ {} as LogAttributes,
882
1146
  );
883
1147
  return shouldSendNotification;
884
1148
  }
@@ -887,8 +1151,11 @@ Stay informed about service availability! 🚀`;
887
1151
  public async getStatusPagesToSendNotification(
888
1152
  statusPageIds: Array<ObjectID>,
889
1153
  ): Promise<Array<StatusPage>> {
890
- logger.debug("getStatusPagesToSendNotification called with statusPageIds:");
891
- logger.debug(statusPageIds);
1154
+ logger.debug(
1155
+ "getStatusPagesToSendNotification called with statusPageIds:",
1156
+ {} as LogAttributes,
1157
+ );
1158
+ logger.debug(statusPageIds, {} as LogAttributes);
892
1159
 
893
1160
  const statusPages: Array<StatusPage> = await StatusPageService.findBy({
894
1161
  query: {
@@ -937,8 +1204,8 @@ Stay informed about service availability! 🚀`;
937
1204
  },
938
1205
  });
939
1206
 
940
- logger.debug("Found status pages:");
941
- logger.debug(statusPages);
1207
+ logger.debug("Found status pages:", {} as LogAttributes);
1208
+ logger.debug(statusPages, {} as LogAttributes);
942
1209
 
943
1210
  return statusPages;
944
1211
  }
@@ -1000,8 +1267,12 @@ You will receive real-time notifications for:
1000
1267
  text: SlackUtil.convertMarkdownToSlackRichText(markdownMessage),
1001
1268
  });
1002
1269
  } catch (error) {
1003
- logger.error("Error sending test Slack notification:");
1004
- logger.error(error);
1270
+ logger.error("Error sending test Slack notification:", {
1271
+ projectId: statusPage?.projectId?.toString(),
1272
+ } as LogAttributes);
1273
+ logger.error(error, {
1274
+ projectId: statusPage?.projectId?.toString(),
1275
+ } as LogAttributes);
1005
1276
  throw error;
1006
1277
  }
1007
1278
  }