@oneuptime/common 11.5.11 → 11.5.13
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/NetworkFlow.ts +12 -1
- package/Models/DatabaseModels/AIInsight.ts +30 -0
- package/Models/DatabaseModels/Project.ts +30 -0
- package/Models/DatabaseModels/TelemetryException.ts +128 -0
- package/Server/API/AIAgentDataAPI.ts +129 -5
- package/Server/API/AIInvestigationAPI.ts +87 -0
- package/Server/API/StatusPageAPI.ts +14 -1
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784640000000-AddExceptionTriageAndPrivacyColumns.ts +56 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -2
- package/Server/Services/AIRunService.ts +8 -0
- package/Server/Services/IncidentService.ts +62 -67
- package/Server/Services/MonitorGroupService.ts +15 -2
- package/Server/Services/MonitorService.ts +91 -3
- package/Server/Services/MonitorStatusTimelineService.ts +285 -100
- package/Server/Services/StatusPageService.ts +59 -34
- package/Server/Services/TelemetryExceptionService.ts +320 -24
- package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +15 -4
- package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +15 -4
- package/Server/Utils/AI/SRE/Insights/InsightScanner.ts +222 -24
- package/Server/Utils/AI/SRE/Insights/InsightTriageRunner.ts +225 -9
- package/Server/Utils/AI/SRE/SubjectCodeFixRun.ts +39 -0
- package/Server/Utils/AI/SRE/TelemetryImprovementTaskTrigger.ts +114 -0
- package/Server/Utils/Monitor/MonitorResource.ts +43 -14
- package/Server/Utils/Monitor/MonitorStatusTimeline.ts +32 -7
- package/Server/Utils/Monitor/MonitorStatusTimelineReconciler.ts +362 -0
- package/Server/Utils/Telemetry/ExceptionSanitizer.ts +222 -0
- package/Tests/Server/Services/MonitorStatusTimelineService.test.ts +235 -0
- package/Tests/Server/Services/TelemetryExceptionCodeFixRun.test.ts +205 -1
- package/Tests/Server/Utils/AI/Insights/InsightScanner.test.ts +150 -141
- package/Tests/Server/Utils/AI/Insights/InsightTriageRunner.test.ts +277 -1
- package/Tests/Server/Utils/ExceptionSanitizer.test.ts +70 -0
- package/Tests/Server/Utils/InsightTriageClassification.test.ts +57 -0
- package/Tests/Server/Utils/Monitor/MonitorStatusTimelineReconciler.test.ts +555 -0
- package/Tests/Server/Utils/TelemetryImprovementTaskTrigger.test.ts +141 -0
- package/Tests/Types/Database/CompareOperatorWireSerialization.test.ts +216 -0
- package/Tests/Types/Database/GreaterThan.test.ts +5 -1
- package/Tests/Types/Database/GreaterThanOrEqual.test.ts +5 -1
- package/Tests/Types/Database/GreaterThanOrNull.test.ts +24 -1
- package/Tests/Types/Database/LessThan.test.ts +5 -1
- package/Tests/Types/Database/LessThanOrEqual.test.ts +24 -1
- package/Tests/Types/Database/LessThanOrNull.test.ts +5 -1
- package/Tests/UI/Components/ModelTableSelectFromColumns.test.ts +259 -0
- package/Tests/Utils/Uptime/UptimeUtil.test.ts +726 -0
- package/Types/AI/CodeFixTaskContext.ts +6 -0
- package/Types/AI/CodeFixTaskType.ts +38 -1
- package/Types/AI/ExceptionAIClassification.ts +27 -0
- package/Types/BaseDatabase/GreaterThan.ts +8 -1
- package/Types/BaseDatabase/GreaterThanOrEqual.ts +8 -1
- package/Types/BaseDatabase/GreaterThanOrNull.ts +9 -1
- package/Types/BaseDatabase/LessThan.ts +8 -1
- package/Types/BaseDatabase/LessThanOrEqual.ts +9 -1
- package/Types/BaseDatabase/LessThanOrNull.ts +8 -1
- package/Types/Log/LogScrubPatternType.ts +7 -0
- package/Types/Trace/TraceScrubPatternType.ts +7 -0
- package/UI/Components/ModelTable/BaseModelTable.tsx +15 -46
- package/UI/Components/ModelTable/SelectFromColumns.ts +129 -0
- package/Utils/StatusPage/ResourceUptime.ts +11 -1
- package/Utils/Uptime/UptimeUtil.ts +142 -36
- package/build/dist/Models/AnalyticsModels/NetworkFlow.js +12 -1
- package/build/dist/Models/AnalyticsModels/NetworkFlow.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AIInsight.js +31 -0
- package/build/dist/Models/DatabaseModels/AIInsight.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +31 -0
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TelemetryException.js +134 -0
- package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
- package/build/dist/Server/API/AIAgentDataAPI.js +97 -8
- package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
- package/build/dist/Server/API/AIInvestigationAPI.js +55 -0
- package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +12 -2
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784640000000-AddExceptionTriageAndPrivacyColumns.js +33 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784640000000-AddExceptionTriageAndPrivacyColumns.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -2
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Services/AIRunService.js +9 -2
- package/build/dist/Server/Services/AIRunService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +47 -56
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/MonitorGroupService.js +15 -2
- package/build/dist/Server/Services/MonitorGroupService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +66 -3
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorStatusTimelineService.js +244 -102
- package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageService.js +57 -33
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryExceptionService.js +263 -22
- package/build/dist/Server/Services/TelemetryExceptionService.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +12 -4
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +12 -4
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightScanner.js +193 -22
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightScanner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js +178 -9
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js +37 -0
- package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/TelemetryImprovementTaskTrigger.js +98 -0
- package/build/dist/Server/Utils/AI/SRE/TelemetryImprovementTaskTrigger.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorResource.js +34 -12
- package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorStatusTimeline.js +25 -8
- package/build/dist/Server/Utils/Monitor/MonitorStatusTimeline.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorStatusTimelineReconciler.js +268 -0
- package/build/dist/Server/Utils/Monitor/MonitorStatusTimelineReconciler.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js +149 -0
- package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js.map +1 -0
- package/build/dist/Types/AI/CodeFixTaskType.js +38 -1
- package/build/dist/Types/AI/CodeFixTaskType.js.map +1 -1
- package/build/dist/Types/AI/ExceptionAIClassification.js +28 -0
- package/build/dist/Types/AI/ExceptionAIClassification.js.map +1 -0
- package/build/dist/Types/BaseDatabase/GreaterThan.js +8 -1
- package/build/dist/Types/BaseDatabase/GreaterThan.js.map +1 -1
- package/build/dist/Types/BaseDatabase/GreaterThanOrEqual.js +8 -1
- package/build/dist/Types/BaseDatabase/GreaterThanOrEqual.js.map +1 -1
- package/build/dist/Types/BaseDatabase/GreaterThanOrNull.js +9 -1
- package/build/dist/Types/BaseDatabase/GreaterThanOrNull.js.map +1 -1
- package/build/dist/Types/BaseDatabase/LessThan.js +8 -1
- package/build/dist/Types/BaseDatabase/LessThan.js.map +1 -1
- package/build/dist/Types/BaseDatabase/LessThanOrEqual.js +9 -1
- package/build/dist/Types/BaseDatabase/LessThanOrEqual.js.map +1 -1
- package/build/dist/Types/BaseDatabase/LessThanOrNull.js +8 -1
- package/build/dist/Types/BaseDatabase/LessThanOrNull.js.map +1 -1
- package/build/dist/Types/Log/LogScrubPatternType.js +7 -0
- package/build/dist/Types/Log/LogScrubPatternType.js.map +1 -1
- package/build/dist/Types/Trace/TraceScrubPatternType.js +7 -0
- package/build/dist/Types/Trace/TraceScrubPatternType.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +12 -37
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/SelectFromColumns.js +82 -0
- package/build/dist/UI/Components/ModelTable/SelectFromColumns.js.map +1 -0
- package/build/dist/Utils/StatusPage/ResourceUptime.js +4 -1
- package/build/dist/Utils/StatusPage/ResourceUptime.js.map +1 -1
- package/build/dist/Utils/Uptime/UptimeUtil.js +86 -33
- package/build/dist/Utils/Uptime/UptimeUtil.js.map +1 -1
- package/package.json +1 -1
- package/Server/Infrastructure/Postgres/SchemaMigrations/1784401962564-MigrationName.ts +0 -101
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784401962564-MigrationName.js +0 -40
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784401962564-MigrationName.js.map +0 -1
|
@@ -22,15 +22,51 @@ import MonitorStatusTimeline from "../../Models/DatabaseModels/MonitorStatusTime
|
|
|
22
22
|
import MonitorFeedService from "./MonitorFeedService";
|
|
23
23
|
import { MonitorFeedEventType } from "../../Models/DatabaseModels/MonitorFeed";
|
|
24
24
|
import MonitorStatusService from "./MonitorStatusService";
|
|
25
|
+
import ServerException from "../../Types/Exception/ServerException";
|
|
26
|
+
/*
|
|
27
|
+
* Thrown by onBeforeCreate when the incoming status is the same as the status of
|
|
28
|
+
* the row immediately before it. Probe ingest call sites (Utils/Monitor/MonitorStatusTimeline
|
|
29
|
+
* and Utils/Monitor/MonitorResource) match on this exact message to treat the
|
|
30
|
+
* duplicate as an idempotent no-op, so the text must not change.
|
|
31
|
+
*/
|
|
32
|
+
export const MONITOR_STATUS_SAME_AS_PREVIOUS_ERROR_MESSAGE = "Monitor Status cannot be same as previous status.";
|
|
33
|
+
/*
|
|
34
|
+
* Thrown by create() when the per-monitor mutex cannot be acquired. The timeline
|
|
35
|
+
* write is refused rather than performed unlocked - see the comment on the lock
|
|
36
|
+
* acquisition below. Probe ingest call sites match on this to log and skip
|
|
37
|
+
* instead of failing the whole ingest run.
|
|
38
|
+
*/
|
|
39
|
+
export const MONITOR_STATUS_TIMELINE_LOCK_ERROR_MESSAGE = "Could not acquire the monitor status timeline lock for this monitor.";
|
|
25
40
|
export class Service extends DatabaseService {
|
|
26
41
|
constructor() {
|
|
27
42
|
super(MonitorStatusTimeline);
|
|
28
43
|
}
|
|
29
|
-
async
|
|
30
|
-
var _a, _b
|
|
31
|
-
|
|
32
|
-
|
|
44
|
+
async create(createBy) {
|
|
45
|
+
var _a, _b;
|
|
46
|
+
/*
|
|
47
|
+
* The per-monitor mutex is owned here, around the whole create, rather than
|
|
48
|
+
* inside onBeforeCreate. DatabaseService.create() invokes onBeforeCreate and
|
|
49
|
+
* then runs validation, permission checks and the INSERT before it ever
|
|
50
|
+
* reaches onCreateSuccess, all OUTSIDE any try/catch this service can hook
|
|
51
|
+
* (onCreateError never fires for a throw raised before the INSERT). So a
|
|
52
|
+
* mutex acquired in onBeforeCreate and released in onCreateSuccess leaks on
|
|
53
|
+
* any throw in between, and a leaked redis-semaphore mutex never expires - it
|
|
54
|
+
* keeps refreshing its own Redis key for the life of the process, which would
|
|
55
|
+
* block every later create for that monitor until acquireTimeout. Holding it
|
|
56
|
+
* in a try/finally here releases it on every path.
|
|
57
|
+
*
|
|
58
|
+
* The critical section that must be serialized per monitor spans reading the
|
|
59
|
+
* predecessor row (onBeforeCreate) through closing it (onCreateSuccess), so
|
|
60
|
+
* the lock is held across the entire super.create(), not just one hook.
|
|
61
|
+
*/
|
|
62
|
+
if (createBy.props.ignoreHooks || !createBy.data.monitorId) {
|
|
63
|
+
// No predecessor bookkeeping runs on these paths, so no serialization is needed.
|
|
64
|
+
return await super.create(createBy);
|
|
33
65
|
}
|
|
66
|
+
const logAttributes = {
|
|
67
|
+
projectId: (_a = createBy.data.projectId) === null || _a === void 0 ? void 0 : _a.toString(),
|
|
68
|
+
monitorId: (_b = createBy.data.monitorId) === null || _b === void 0 ? void 0 : _b.toString(),
|
|
69
|
+
};
|
|
34
70
|
let mutex = null;
|
|
35
71
|
try {
|
|
36
72
|
mutex = await Semaphore.lock({
|
|
@@ -39,11 +75,63 @@ export class Service extends DatabaseService {
|
|
|
39
75
|
});
|
|
40
76
|
}
|
|
41
77
|
catch (e) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
78
|
+
/*
|
|
79
|
+
* Fail closed. This used to fall through and INSERT UNLOCKED, which let two
|
|
80
|
+
* concurrent writers resolve the same predecessor row, both pass the
|
|
81
|
+
* same-as-previous check, and both INSERT a status row milliseconds apart.
|
|
82
|
+
* Only the later row is ever closed (the next writer resolves its
|
|
83
|
+
* predecessor with ORDER BY startsAt DESC LIMIT 1), so the earlier row is
|
|
84
|
+
* orphaned with endsAt = NULL permanently and is read back as unbounded
|
|
85
|
+
* downtime. Refusing the write is strictly safer: the monitor keeps its
|
|
86
|
+
* current status and the next probe result for the same monitor
|
|
87
|
+
* re-evaluates the same criteria and recreates the status change.
|
|
88
|
+
*/
|
|
89
|
+
logger.error(e, logAttributes);
|
|
90
|
+
throw new ServerException(MONITOR_STATUS_TIMELINE_LOCK_ERROR_MESSAGE);
|
|
91
|
+
}
|
|
92
|
+
let createdItem;
|
|
93
|
+
try {
|
|
94
|
+
createdItem = await super.create(createBy);
|
|
95
|
+
}
|
|
96
|
+
finally {
|
|
97
|
+
await this.releaseMutex(mutex, logAttributes);
|
|
46
98
|
}
|
|
99
|
+
/*
|
|
100
|
+
* The feed item and its workspace notification run AFTER the mutex is
|
|
101
|
+
* released: they can involve third-party HTTP (Slack/Teams) with unbounded
|
|
102
|
+
* latency, and holding the per-monitor lock across them would block every
|
|
103
|
+
* concurrent status write for this monitor until acquireTimeout - turning
|
|
104
|
+
* one slow webhook into refused status transitions. Only the predecessor
|
|
105
|
+
* read -> INSERT -> predecessor close needs the lock, and all of that has
|
|
106
|
+
* completed by this point. (The pre-fail-closed code released the lock at
|
|
107
|
+
* this same boundary, before the feed block.)
|
|
108
|
+
*/
|
|
109
|
+
await this.createStatusChangeFeedItem(createdItem, createBy);
|
|
110
|
+
return createdItem;
|
|
111
|
+
}
|
|
112
|
+
async onBeforeCreate(createBy) {
|
|
113
|
+
var _a, _b;
|
|
114
|
+
if (!createBy.data.monitorId) {
|
|
115
|
+
throw new BadDataException("monitorId is null");
|
|
116
|
+
}
|
|
117
|
+
const logAttributes = {
|
|
118
|
+
projectId: (_a = createBy.data.projectId) === null || _a === void 0 ? void 0 : _a.toString(),
|
|
119
|
+
monitorId: (_b = createBy.data.monitorId) === null || _b === void 0 ? void 0 : _b.toString(),
|
|
120
|
+
};
|
|
121
|
+
/*
|
|
122
|
+
* The per-monitor mutex that serializes this read-modify-write is acquired
|
|
123
|
+
* and released in create() (see the comment there); it is held for the whole
|
|
124
|
+
* duration of this hook.
|
|
125
|
+
*/
|
|
126
|
+
return await this.buildOnCreate(createBy, createBy.data.monitorId, logAttributes);
|
|
127
|
+
}
|
|
128
|
+
/*
|
|
129
|
+
* Body of onBeforeCreate, split out to keep the null-narrowing of monitorId in
|
|
130
|
+
* one place: it is passed in already narrowed so it can never reach a query as
|
|
131
|
+
* undefined, which would widen the query to every monitor.
|
|
132
|
+
*/
|
|
133
|
+
async buildOnCreate(createBy, monitorId, logAttributes) {
|
|
134
|
+
var _a, _b;
|
|
47
135
|
if (!createBy.data.startsAt) {
|
|
48
136
|
createBy.data.startsAt = OneUptimeDate.getCurrentDate();
|
|
49
137
|
}
|
|
@@ -65,13 +153,13 @@ export class Service extends DatabaseService {
|
|
|
65
153
|
})}`;
|
|
66
154
|
}
|
|
67
155
|
}
|
|
68
|
-
const monitorStatusId = createBy.data.monitorStatusId || ((
|
|
156
|
+
const monitorStatusId = createBy.data.monitorStatusId || ((_a = createBy.data.monitorStatus) === null || _a === void 0 ? void 0 : _a.id);
|
|
69
157
|
if (!monitorStatusId) {
|
|
70
158
|
throw new BadDataException("monitorStatusId is null");
|
|
71
159
|
}
|
|
72
160
|
const stateBeforeThis = await this.findOneBy({
|
|
73
161
|
query: {
|
|
74
|
-
monitorId:
|
|
162
|
+
monitorId: monitorId,
|
|
75
163
|
startsAt: QueryHelper.lessThanEqualTo(createBy.data.startsAt),
|
|
76
164
|
},
|
|
77
165
|
sort: {
|
|
@@ -86,14 +174,8 @@ export class Service extends DatabaseService {
|
|
|
86
174
|
endsAt: true,
|
|
87
175
|
},
|
|
88
176
|
});
|
|
89
|
-
logger.debug("State Before this",
|
|
90
|
-
|
|
91
|
-
monitorId: (_e = createBy.data.monitorId) === null || _e === void 0 ? void 0 : _e.toString(),
|
|
92
|
-
});
|
|
93
|
-
logger.debug(stateBeforeThis, {
|
|
94
|
-
projectId: (_f = createBy.data.projectId) === null || _f === void 0 ? void 0 : _f.toString(),
|
|
95
|
-
monitorId: (_g = createBy.data.monitorId) === null || _g === void 0 ? void 0 : _g.toString(),
|
|
96
|
-
});
|
|
177
|
+
logger.debug("State Before this", logAttributes);
|
|
178
|
+
logger.debug(stateBeforeThis, logAttributes);
|
|
97
179
|
// If this is the first state, then do not notify the owner.
|
|
98
180
|
if (!stateBeforeThis) {
|
|
99
181
|
// since this is the first status, do not notify the owner.
|
|
@@ -106,12 +188,19 @@ export class Service extends DatabaseService {
|
|
|
106
188
|
if (stateBeforeThis && stateBeforeThis.monitorStatusId && monitorStatusId) {
|
|
107
189
|
if (stateBeforeThis.monitorStatusId.toString() ===
|
|
108
190
|
monitorStatusId.toString()) {
|
|
109
|
-
|
|
191
|
+
/*
|
|
192
|
+
* Logged above debug on purpose. This is the exact point at which an
|
|
193
|
+
* orphaned (endsAt = NULL) row would have been created had the mutex
|
|
194
|
+
* fallen through unlocked, so it is the signal to alert on: a sustained
|
|
195
|
+
* rate here means two writers are racing for the same monitor.
|
|
196
|
+
*/
|
|
197
|
+
logger.warn(`MonitorStatusTimeline: rejecting duplicate status ${monitorStatusId.toString()} for monitor ${monitorId.toString()}. The preceding status starting at ${(_b = stateBeforeThis.startsAt) === null || _b === void 0 ? void 0 : _b.toString()} is already this status.`, logAttributes);
|
|
198
|
+
throw new BadDataException(MONITOR_STATUS_SAME_AS_PREVIOUS_ERROR_MESSAGE);
|
|
110
199
|
}
|
|
111
200
|
}
|
|
112
201
|
const stateAfterThis = await this.findOneBy({
|
|
113
202
|
query: {
|
|
114
|
-
monitorId:
|
|
203
|
+
monitorId: monitorId,
|
|
115
204
|
startsAt: QueryHelper.greaterThan(createBy.data.startsAt),
|
|
116
205
|
},
|
|
117
206
|
sort: {
|
|
@@ -139,120 +228,161 @@ export class Service extends DatabaseService {
|
|
|
139
228
|
throw new BadDataException("Monitor Status cannot be same as next status.");
|
|
140
229
|
}
|
|
141
230
|
}
|
|
142
|
-
logger.debug("State After this",
|
|
143
|
-
|
|
144
|
-
monitorId: (_j = createBy.data.monitorId) === null || _j === void 0 ? void 0 : _j.toString(),
|
|
145
|
-
});
|
|
146
|
-
logger.debug(stateAfterThis, {
|
|
147
|
-
projectId: (_k = createBy.data.projectId) === null || _k === void 0 ? void 0 : _k.toString(),
|
|
148
|
-
monitorId: (_l = createBy.data.monitorId) === null || _l === void 0 ? void 0 : _l.toString(),
|
|
149
|
-
});
|
|
231
|
+
logger.debug("State After this", logAttributes);
|
|
232
|
+
logger.debug(stateAfterThis, logAttributes);
|
|
150
233
|
return {
|
|
151
234
|
createBy,
|
|
152
235
|
carryForward: {
|
|
153
236
|
statusTimelineBeforeThisStatus: stateBeforeThis || null,
|
|
154
237
|
statusTimelineAfterThisStatus: stateAfterThis || null,
|
|
155
|
-
mutex: mutex,
|
|
156
238
|
},
|
|
157
239
|
};
|
|
158
240
|
}
|
|
241
|
+
/*
|
|
242
|
+
* Releases the per-monitor mutex. Never throws: a failed release must not mask
|
|
243
|
+
* the error we are already unwinding, and must not fail an otherwise successful
|
|
244
|
+
* create. Semaphore.release stops the refresh interval before it talks to
|
|
245
|
+
* Redis, so even if the Redis call fails the key expires on its own lockTimeout.
|
|
246
|
+
*/
|
|
247
|
+
async releaseMutex(mutex, logAttributes) {
|
|
248
|
+
if (!mutex) {
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
try {
|
|
252
|
+
await Semaphore.release(mutex);
|
|
253
|
+
}
|
|
254
|
+
catch (err) {
|
|
255
|
+
logger.error(err, logAttributes);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/*
|
|
259
|
+
* Closes the status timeline row that precedes the row we just created.
|
|
260
|
+
*
|
|
261
|
+
* The update is conditional instead of a blind updateOneById: it only touches
|
|
262
|
+
* the row if it starts at or before the new row (startsAt <= endsAt) and is
|
|
263
|
+
* either still open or currently closed at or after the new row's startsAt
|
|
264
|
+
* (endsAt >= :endsAt OR endsAt IS NULL). That keeps a concurrent or
|
|
265
|
+
* out-of-order writer from extending a row forward over a gap it does not own,
|
|
266
|
+
* and keeps a backfilled row from being closed at a time earlier than the row
|
|
267
|
+
* that actually follows it.
|
|
268
|
+
*
|
|
269
|
+
* startsAt uses <= and not <: on an exact startsAt tie (a backfill inserted at
|
|
270
|
+
* the same timestamp as the open predecessor) the predecessor must still be
|
|
271
|
+
* closed - at zero duration, which is harmless. With a strict < the tie would
|
|
272
|
+
* leave BOTH rows open forever: the reconciler deliberately never closes
|
|
273
|
+
* startsAt ties (its successor predicate is strictly later), so nothing would
|
|
274
|
+
* ever repair it, and the pair would read back as unbounded downtime.
|
|
275
|
+
*
|
|
276
|
+
* Note this closes only the single immediately-preceding row. If a monitor has
|
|
277
|
+
* more than one open row (the orphans this bug produced), the older ones are
|
|
278
|
+
* deliberately left alone: closing them here at the new row's startsAt would
|
|
279
|
+
* turn a near-zero-duration orphan into months of recorded downtime, which is
|
|
280
|
+
* worse than the current state and not repairable from the read path. Those
|
|
281
|
+
* rows must be closed at the startsAt of the row that actually follows each of
|
|
282
|
+
* them, which is the reconciler job's responsibility, not this write path's.
|
|
283
|
+
*/
|
|
284
|
+
async closePrecedingStatusTimeline(data) {
|
|
285
|
+
const updatedCount = await this.updateOneBy({
|
|
286
|
+
query: {
|
|
287
|
+
_id: data.precedingStatusTimelineId.toString(),
|
|
288
|
+
startsAt: QueryHelper.lessThanEqualTo(data.endsAt),
|
|
289
|
+
endsAt: QueryHelper.greaterThanEqualToOrNull(data.endsAt),
|
|
290
|
+
},
|
|
291
|
+
data: {
|
|
292
|
+
endsAt: data.endsAt,
|
|
293
|
+
},
|
|
294
|
+
props: {
|
|
295
|
+
isRoot: true,
|
|
296
|
+
},
|
|
297
|
+
});
|
|
298
|
+
if (updatedCount === 0) {
|
|
299
|
+
/*
|
|
300
|
+
* The preceding row moved under us between onBeforeCreate reading it and
|
|
301
|
+
* this update - it was already closed at an earlier time, or it no longer
|
|
302
|
+
* starts before the new row. Leaving it as-is is correct; surface it so the
|
|
303
|
+
* reconciler has a signal to look at this monitor.
|
|
304
|
+
*/
|
|
305
|
+
logger.warn(`MonitorStatusTimeline: did not close preceding status timeline ${data.precedingStatusTimelineId.toString()} at ${data.endsAt.toString()}; it is no longer open and older than the new status.`, data.logAttributes);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
159
308
|
async onCreateSuccess(onCreate, createdItem) {
|
|
160
|
-
var _a, _b, _c
|
|
309
|
+
var _a, _b, _c;
|
|
310
|
+
const logAttributes = {
|
|
311
|
+
projectId: (_a = createdItem.projectId) === null || _a === void 0 ? void 0 : _a.toString(),
|
|
312
|
+
monitorId: (_b = createdItem.monitorId) === null || _b === void 0 ? void 0 : _b.toString(),
|
|
313
|
+
};
|
|
161
314
|
if (!createdItem.monitorId) {
|
|
162
315
|
throw new BadDataException("monitorId is null");
|
|
163
316
|
}
|
|
164
317
|
if (!createdItem.monitorStatusId) {
|
|
165
318
|
throw new BadDataException("monitorStatusId is null");
|
|
166
319
|
}
|
|
320
|
+
/*
|
|
321
|
+
* Everything below runs while the per-monitor mutex acquired in create() is
|
|
322
|
+
* still held, so the read of the predecessor in onBeforeCreate and the close
|
|
323
|
+
* of it here cannot interleave with another writer for the same monitor.
|
|
324
|
+
*/
|
|
167
325
|
// update the last status as ended.
|
|
168
|
-
logger.debug("Status Timeline Before this",
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
logger.debug(
|
|
173
|
-
|
|
174
|
-
monitorId: (_d = createdItem.monitorId) === null || _d === void 0 ? void 0 : _d.toString(),
|
|
175
|
-
});
|
|
176
|
-
logger.debug("Status Timeline After this", {
|
|
177
|
-
projectId: (_e = createdItem.projectId) === null || _e === void 0 ? void 0 : _e.toString(),
|
|
178
|
-
monitorId: (_f = createdItem.monitorId) === null || _f === void 0 ? void 0 : _f.toString(),
|
|
179
|
-
});
|
|
180
|
-
logger.debug(onCreate.carryForward.statusTimelineAfterThisStatus, {
|
|
181
|
-
projectId: (_g = createdItem.projectId) === null || _g === void 0 ? void 0 : _g.toString(),
|
|
182
|
-
monitorId: (_h = createdItem.monitorId) === null || _h === void 0 ? void 0 : _h.toString(),
|
|
183
|
-
});
|
|
184
|
-
logger.debug("Created Item", {
|
|
185
|
-
projectId: (_j = createdItem.projectId) === null || _j === void 0 ? void 0 : _j.toString(),
|
|
186
|
-
monitorId: (_k = createdItem.monitorId) === null || _k === void 0 ? void 0 : _k.toString(),
|
|
187
|
-
});
|
|
188
|
-
logger.debug(createdItem, {
|
|
189
|
-
projectId: (_l = createdItem.projectId) === null || _l === void 0 ? void 0 : _l.toString(),
|
|
190
|
-
monitorId: (_m = createdItem.monitorId) === null || _m === void 0 ? void 0 : _m.toString(),
|
|
191
|
-
});
|
|
326
|
+
logger.debug("Status Timeline Before this", logAttributes);
|
|
327
|
+
logger.debug(onCreate.carryForward.statusTimelineBeforeThisStatus, logAttributes);
|
|
328
|
+
logger.debug("Status Timeline After this", logAttributes);
|
|
329
|
+
logger.debug(onCreate.carryForward.statusTimelineAfterThisStatus, logAttributes);
|
|
330
|
+
logger.debug("Created Item", logAttributes);
|
|
331
|
+
logger.debug(createdItem, logAttributes);
|
|
192
332
|
/*
|
|
193
333
|
* now there are three cases.
|
|
194
334
|
* 1. This is the first status OR there's no status after this.
|
|
195
335
|
*/
|
|
196
336
|
if (!onCreate.carryForward.statusTimelineBeforeThisStatus) {
|
|
197
337
|
// This is the first status, no need to update previous status.
|
|
198
|
-
logger.debug("This is the first status.",
|
|
199
|
-
projectId: (_o = createdItem.projectId) === null || _o === void 0 ? void 0 : _o.toString(),
|
|
200
|
-
monitorId: (_p = createdItem.monitorId) === null || _p === void 0 ? void 0 : _p.toString(),
|
|
201
|
-
});
|
|
338
|
+
logger.debug("This is the first status.", logAttributes);
|
|
202
339
|
}
|
|
203
340
|
else if (!onCreate.carryForward.statusTimelineAfterThisStatus) {
|
|
204
341
|
/*
|
|
205
342
|
* 2. This is the last status.
|
|
206
343
|
* Update the previous status to end at the start of this status.
|
|
207
344
|
*/
|
|
208
|
-
await this.
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
},
|
|
213
|
-
props: {
|
|
214
|
-
isRoot: true,
|
|
215
|
-
},
|
|
216
|
-
});
|
|
217
|
-
logger.debug("This is the last status.", {
|
|
218
|
-
projectId: (_q = createdItem.projectId) === null || _q === void 0 ? void 0 : _q.toString(),
|
|
219
|
-
monitorId: (_r = createdItem.monitorId) === null || _r === void 0 ? void 0 : _r.toString(),
|
|
345
|
+
await this.closePrecedingStatusTimeline({
|
|
346
|
+
precedingStatusTimelineId: onCreate.carryForward.statusTimelineBeforeThisStatus.id,
|
|
347
|
+
endsAt: createdItem.startsAt,
|
|
348
|
+
logAttributes: logAttributes,
|
|
220
349
|
});
|
|
350
|
+
logger.debug("This is the last status.", logAttributes);
|
|
221
351
|
}
|
|
222
352
|
else {
|
|
223
353
|
/*
|
|
224
354
|
* 3. This is in the middle.
|
|
225
355
|
* Update the previous status to end at the start of this status.
|
|
226
356
|
*/
|
|
227
|
-
await this.
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
},
|
|
232
|
-
props: {
|
|
233
|
-
isRoot: true,
|
|
234
|
-
},
|
|
235
|
-
});
|
|
236
|
-
// Update the next status to start at the end of this status.
|
|
237
|
-
await this.updateOneById({
|
|
238
|
-
id: onCreate.carryForward.statusTimelineAfterThisStatus.id,
|
|
239
|
-
data: {
|
|
240
|
-
startsAt: createdItem.endsAt,
|
|
241
|
-
},
|
|
242
|
-
props: {
|
|
243
|
-
isRoot: true,
|
|
244
|
-
},
|
|
245
|
-
});
|
|
246
|
-
logger.debug("This status is in the middle.", {
|
|
247
|
-
projectId: (_s = createdItem.projectId) === null || _s === void 0 ? void 0 : _s.toString(),
|
|
248
|
-
monitorId: (_t = createdItem.monitorId) === null || _t === void 0 ? void 0 : _t.toString(),
|
|
357
|
+
await this.closePrecedingStatusTimeline({
|
|
358
|
+
precedingStatusTimelineId: onCreate.carryForward.statusTimelineBeforeThisStatus.id,
|
|
359
|
+
endsAt: createdItem.startsAt,
|
|
360
|
+
logAttributes: logAttributes,
|
|
249
361
|
});
|
|
362
|
+
/*
|
|
363
|
+
* Update the next status to start at the end of this status. endsAt was
|
|
364
|
+
* set to the next row's startsAt in onBeforeCreate, so this is normally a
|
|
365
|
+
* no-op; it is guarded because writing an empty startsAt onto the next row
|
|
366
|
+
* would corrupt it.
|
|
367
|
+
*/
|
|
368
|
+
if (createdItem.endsAt) {
|
|
369
|
+
await this.updateOneById({
|
|
370
|
+
id: onCreate.carryForward.statusTimelineAfterThisStatus.id,
|
|
371
|
+
data: {
|
|
372
|
+
startsAt: createdItem.endsAt,
|
|
373
|
+
},
|
|
374
|
+
props: {
|
|
375
|
+
isRoot: true,
|
|
376
|
+
},
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
logger.debug("This status is in the middle.", logAttributes);
|
|
250
380
|
}
|
|
251
381
|
if (!createdItem.endsAt) {
|
|
252
382
|
// if this is the last status, then update the monitor status.
|
|
253
383
|
await MonitorService.updateOneBy({
|
|
254
384
|
query: {
|
|
255
|
-
_id: (
|
|
385
|
+
_id: (_c = createdItem.monitorId) === null || _c === void 0 ? void 0 : _c.toString(),
|
|
256
386
|
},
|
|
257
387
|
data: {
|
|
258
388
|
currentMonitorStatusId: createdItem.monitorStatusId,
|
|
@@ -260,9 +390,18 @@ export class Service extends DatabaseService {
|
|
|
260
390
|
props: onCreate.createBy.props,
|
|
261
391
|
});
|
|
262
392
|
}
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
393
|
+
return createdItem;
|
|
394
|
+
}
|
|
395
|
+
/*
|
|
396
|
+
* Writes the monitor feed item (and its workspace notification, which can be
|
|
397
|
+
* third-party HTTP to Slack/Teams) for a status change. Called from create()
|
|
398
|
+
* AFTER the per-monitor mutex has been released - see the comment there. Kept
|
|
399
|
+
* out of onCreateSuccess on purpose: everything in onCreateSuccess runs while
|
|
400
|
+
* the mutex is held.
|
|
401
|
+
*/
|
|
402
|
+
async createStatusChangeFeedItem(createdItem, createBy) {
|
|
403
|
+
if (!createdItem.monitorId || !createdItem.monitorStatusId) {
|
|
404
|
+
return;
|
|
266
405
|
}
|
|
267
406
|
const monitorStatus = await MonitorStatusService.findOneBy({
|
|
268
407
|
query: {
|
|
@@ -302,17 +441,14 @@ export class Service extends DatabaseService {
|
|
|
302
441
|
` Changed Monitor **[${monitorName}](${(await MonitorService.getMonitorLinkInDashboard(projectId, monitorId)).toString()}) State** to **` +
|
|
303
442
|
stateName +
|
|
304
443
|
"**",
|
|
305
|
-
moreInformationInMarkdown: `**Cause:**
|
|
444
|
+
moreInformationInMarkdown: `**Cause:**
|
|
306
445
|
${createdItem.rootCause}`,
|
|
307
|
-
userId: createdItem.createdByUserId ||
|
|
446
|
+
userId: createdItem.createdByUserId || createBy.props.userId,
|
|
308
447
|
workspaceNotification: {
|
|
309
448
|
sendWorkspaceNotification: true,
|
|
310
|
-
notifyUserId: createdItem.createdByUserId ||
|
|
311
|
-
onCreate.createBy.props.userId ||
|
|
312
|
-
undefined,
|
|
449
|
+
notifyUserId: createdItem.createdByUserId || createBy.props.userId || undefined,
|
|
313
450
|
},
|
|
314
451
|
});
|
|
315
|
-
return createdItem;
|
|
316
452
|
}
|
|
317
453
|
async onBeforeDelete(deleteBy) {
|
|
318
454
|
if (deleteBy.query._id) {
|
|
@@ -478,6 +614,12 @@ export class Service extends DatabaseService {
|
|
|
478
614
|
return onDelete;
|
|
479
615
|
}
|
|
480
616
|
}
|
|
617
|
+
__decorate([
|
|
618
|
+
CaptureSpan(),
|
|
619
|
+
__metadata("design:type", Function),
|
|
620
|
+
__metadata("design:paramtypes", [Object]),
|
|
621
|
+
__metadata("design:returntype", Promise)
|
|
622
|
+
], Service.prototype, "create", null);
|
|
481
623
|
__decorate([
|
|
482
624
|
CaptureSpan(),
|
|
483
625
|
__metadata("design:type", Function),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonitorStatusTimelineService.js","sourceRoot":"","sources":["../../../../Server/Services/MonitorStatusTimelineService.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MonitorStatusTimelineService.js","sourceRoot":"","sources":["../../../../Server/Services/MonitorStatusTimelineService.ts"],"names":[],"mappings":"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"}
|