@oneuptime/common 10.5.9 → 10.5.18

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 (164) hide show
  1. package/Models/AnalyticsModels/ExceptionInstance.ts +1 -1
  2. package/Models/AnalyticsModels/Log.ts +1 -1
  3. package/Models/AnalyticsModels/Metric.ts +1 -1
  4. package/Models/AnalyticsModels/Profile.ts +1 -1
  5. package/Models/AnalyticsModels/ProfileSample.ts +1 -1
  6. package/Models/AnalyticsModels/Span.ts +1 -1
  7. package/Models/DatabaseModels/TelemetryException.ts +46 -34
  8. package/Models/DatabaseModels/TelemetryUsageBilling.ts +35 -2
  9. package/Server/API/AIAgentDataAPI.ts +25 -7
  10. package/Server/API/TelemetryAPI.ts +6 -0
  11. package/Server/API/TelemetryExceptionAPI.ts +6 -2
  12. package/Server/EnvironmentConfig.ts +27 -0
  13. package/Server/Infrastructure/ClickhouseDatabase.ts +21 -1
  14. package/Server/Infrastructure/Postgres/DataSourceOptions.ts +19 -0
  15. package/Server/Infrastructure/Postgres/SchemaMigrations/1780381124553-MigrationName.ts +28 -0
  16. package/Server/Infrastructure/Postgres/SchemaMigrations/1780382837019-MigrationName.ts +24 -0
  17. package/Server/Infrastructure/Postgres/SchemaMigrations/1780387560604-MigrationName.ts +47 -0
  18. package/Server/Infrastructure/Postgres/SchemaMigrations/1780388219225-MigrationName.ts +34 -0
  19. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
  20. package/Server/Infrastructure/PostgresDatabase.ts +27 -1
  21. package/Server/Infrastructure/QueueWorker.ts +54 -4
  22. package/Server/Infrastructure/Redis.ts +11 -0
  23. package/Server/Services/AnalyticsDatabaseService.ts +87 -0
  24. package/Server/Services/DatabaseService.ts +73 -0
  25. package/Server/Services/TelemetryAttributeService.ts +38 -2
  26. package/Server/Services/TelemetryExceptionService.ts +24 -49
  27. package/Server/Services/TelemetryUsageBillingService.ts +289 -166
  28. package/Server/Types/AnalyticsDatabase/ModelPermission.ts +102 -72
  29. package/Server/Types/Database/Permissions/OwnedScopePermission.ts +81 -60
  30. package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +67 -0
  31. package/Server/Utils/Express.ts +32 -0
  32. package/Server/Utils/GracefulShutdown.ts +194 -0
  33. package/Server/Utils/Logger.ts +12 -1
  34. package/Server/Utils/Monitor/MonitorLogUtil.ts +22 -17
  35. package/Server/Utils/Profiling.ts +14 -6
  36. package/Server/Utils/StartServer.ts +13 -5
  37. package/Server/Utils/Telemetry/ContextSpanProcessor.ts +48 -0
  38. package/Server/Utils/Telemetry/LogExceptionExtractor.ts +289 -0
  39. package/Server/Utils/Telemetry/SpanUtil.ts +16 -35
  40. package/Server/Utils/Telemetry/StackTraceParser.ts +423 -0
  41. package/Server/Utils/Telemetry/TelemetryContext.ts +190 -0
  42. package/Server/Utils/Telemetry.ts +33 -7
  43. package/Tests/Server/Services/TelemetryAttributeService.test.ts +83 -0
  44. package/Tests/Server/Utils/Telemetry/LogExceptionExtractor.test.ts +0 -0
  45. package/Types/Database/AccessControl/OwnedThrough.ts +31 -3
  46. package/Types/Telemetry/ServiceType.ts +10 -0
  47. package/UI/Components/AutocompleteTextInput/AutocompleteTextInput.tsx +7 -1
  48. package/UI/Components/Dictionary/Dictionary.tsx +19 -0
  49. package/UI/Components/Filters/FiltersForm.tsx +1 -0
  50. package/UI/Components/Filters/JSONFilter.tsx +2 -0
  51. package/UI/Components/Filters/Types/Filter.ts +1 -0
  52. package/UI/Components/LogsViewer/LogsViewer.tsx +16 -0
  53. package/UI/Utils/Project.ts +6 -0
  54. package/UI/Utils/Telemetry/Telemetry.ts +65 -0
  55. package/UI/Utils/TelemetryService.ts +150 -0
  56. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js +1 -1
  57. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js.map +1 -1
  58. package/build/dist/Models/AnalyticsModels/Log.js +1 -1
  59. package/build/dist/Models/AnalyticsModels/Log.js.map +1 -1
  60. package/build/dist/Models/AnalyticsModels/Metric.js +1 -1
  61. package/build/dist/Models/AnalyticsModels/Metric.js.map +1 -1
  62. package/build/dist/Models/AnalyticsModels/Profile.js +1 -1
  63. package/build/dist/Models/AnalyticsModels/Profile.js.map +1 -1
  64. package/build/dist/Models/AnalyticsModels/ProfileSample.js +1 -1
  65. package/build/dist/Models/AnalyticsModels/ProfileSample.js.map +1 -1
  66. package/build/dist/Models/AnalyticsModels/Span.js +1 -1
  67. package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
  68. package/build/dist/Models/DatabaseModels/TelemetryException.js +47 -33
  69. package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
  70. package/build/dist/Models/DatabaseModels/TelemetryUsageBilling.js +36 -2
  71. package/build/dist/Models/DatabaseModels/TelemetryUsageBilling.js.map +1 -1
  72. package/build/dist/Server/API/AIAgentDataAPI.js +24 -8
  73. package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
  74. package/build/dist/Server/API/TelemetryAPI.js +4 -0
  75. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  76. package/build/dist/Server/API/TelemetryExceptionAPI.js +6 -2
  77. package/build/dist/Server/API/TelemetryExceptionAPI.js.map +1 -1
  78. package/build/dist/Server/EnvironmentConfig.js +19 -0
  79. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  80. package/build/dist/Server/Infrastructure/ClickhouseDatabase.js +16 -2
  81. package/build/dist/Server/Infrastructure/ClickhouseDatabase.js.map +1 -1
  82. package/build/dist/Server/Infrastructure/Postgres/DataSourceOptions.js +10 -9
  83. package/build/dist/Server/Infrastructure/Postgres/DataSourceOptions.js.map +1 -1
  84. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780381124553-MigrationName.js +23 -0
  85. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780381124553-MigrationName.js.map +1 -0
  86. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780382837019-MigrationName.js +19 -0
  87. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780382837019-MigrationName.js.map +1 -0
  88. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780387560604-MigrationName.js +22 -0
  89. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780387560604-MigrationName.js.map +1 -0
  90. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780388219225-MigrationName.js +25 -0
  91. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780388219225-MigrationName.js.map +1 -0
  92. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
  93. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  94. package/build/dist/Server/Infrastructure/PostgresDatabase.js +20 -1
  95. package/build/dist/Server/Infrastructure/PostgresDatabase.js.map +1 -1
  96. package/build/dist/Server/Infrastructure/QueueWorker.js +40 -3
  97. package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
  98. package/build/dist/Server/Infrastructure/Redis.js +5 -0
  99. package/build/dist/Server/Infrastructure/Redis.js.map +1 -1
  100. package/build/dist/Server/Services/AnalyticsDatabaseService.js +59 -0
  101. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  102. package/build/dist/Server/Services/DatabaseService.js +62 -0
  103. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  104. package/build/dist/Server/Services/TelemetryAttributeService.js +23 -1
  105. package/build/dist/Server/Services/TelemetryAttributeService.js.map +1 -1
  106. package/build/dist/Server/Services/TelemetryExceptionService.js +16 -41
  107. package/build/dist/Server/Services/TelemetryExceptionService.js.map +1 -1
  108. package/build/dist/Server/Services/TelemetryUsageBillingService.js +211 -147
  109. package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
  110. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js +84 -63
  111. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js.map +1 -1
  112. package/build/dist/Server/Types/Database/Permissions/OwnedScopePermission.js +67 -49
  113. package/build/dist/Server/Types/Database/Permissions/OwnedScopePermission.js.map +1 -1
  114. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +51 -0
  115. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
  116. package/build/dist/Server/Utils/Express.js +23 -0
  117. package/build/dist/Server/Utils/Express.js.map +1 -1
  118. package/build/dist/Server/Utils/GracefulShutdown.js +145 -0
  119. package/build/dist/Server/Utils/GracefulShutdown.js.map +1 -0
  120. package/build/dist/Server/Utils/Logger.js +8 -1
  121. package/build/dist/Server/Utils/Logger.js.map +1 -1
  122. package/build/dist/Server/Utils/Monitor/MonitorLogUtil.js +12 -10
  123. package/build/dist/Server/Utils/Monitor/MonitorLogUtil.js.map +1 -1
  124. package/build/dist/Server/Utils/Profiling.js +8 -3
  125. package/build/dist/Server/Utils/Profiling.js.map +1 -1
  126. package/build/dist/Server/Utils/StartServer.js +12 -4
  127. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  128. package/build/dist/Server/Utils/Telemetry/ContextSpanProcessor.js +37 -0
  129. package/build/dist/Server/Utils/Telemetry/ContextSpanProcessor.js.map +1 -0
  130. package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js +214 -0
  131. package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js.map +1 -0
  132. package/build/dist/Server/Utils/Telemetry/SpanUtil.js +15 -24
  133. package/build/dist/Server/Utils/Telemetry/SpanUtil.js.map +1 -1
  134. package/build/dist/Server/Utils/Telemetry/StackTraceParser.js +365 -0
  135. package/build/dist/Server/Utils/Telemetry/StackTraceParser.js.map +1 -0
  136. package/build/dist/Server/Utils/Telemetry/TelemetryContext.js +124 -0
  137. package/build/dist/Server/Utils/Telemetry/TelemetryContext.js.map +1 -0
  138. package/build/dist/Server/Utils/Telemetry.js +22 -5
  139. package/build/dist/Server/Utils/Telemetry.js.map +1 -1
  140. package/build/dist/Tests/Server/Services/TelemetryAttributeService.test.js +50 -0
  141. package/build/dist/Tests/Server/Services/TelemetryAttributeService.test.js.map +1 -0
  142. package/build/dist/Tests/Server/Utils/Telemetry/LogExceptionExtractor.test.js +0 -0
  143. package/build/dist/Tests/Server/Utils/Telemetry/LogExceptionExtractor.test.js.map +1 -0
  144. package/build/dist/Types/Database/AccessControl/OwnedThrough.js +7 -2
  145. package/build/dist/Types/Database/AccessControl/OwnedThrough.js.map +1 -1
  146. package/build/dist/Types/Telemetry/ServiceType.js +10 -0
  147. package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
  148. package/build/dist/UI/Components/AutocompleteTextInput/AutocompleteTextInput.js +7 -1
  149. package/build/dist/UI/Components/AutocompleteTextInput/AutocompleteTextInput.js.map +1 -1
  150. package/build/dist/UI/Components/Dictionary/Dictionary.js +10 -0
  151. package/build/dist/UI/Components/Dictionary/Dictionary.js.map +1 -1
  152. package/build/dist/UI/Components/Filters/FiltersForm.js +1 -1
  153. package/build/dist/UI/Components/Filters/FiltersForm.js.map +1 -1
  154. package/build/dist/UI/Components/Filters/JSONFilter.js +1 -1
  155. package/build/dist/UI/Components/Filters/JSONFilter.js.map +1 -1
  156. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +15 -0
  157. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  158. package/build/dist/UI/Utils/Project.js +5 -0
  159. package/build/dist/UI/Utils/Project.js.map +1 -1
  160. package/build/dist/UI/Utils/Telemetry/Telemetry.js +44 -0
  161. package/build/dist/UI/Utils/Telemetry/Telemetry.js.map +1 -1
  162. package/build/dist/UI/Utils/TelemetryService.js +113 -0
  163. package/build/dist/UI/Utils/TelemetryService.js.map +1 -0
  164. package/package.json +1 -1
@@ -0,0 +1,365 @@
1
+ /**
2
+ * Stack trace parser that transforms raw stack trace strings into structured frames.
3
+ * Supports JavaScript/Node.js, Python, Java, Go, Ruby, C#/.NET, and PHP stack traces.
4
+ */
5
+ // Known library/framework path patterns that indicate non-app code
6
+ const LIBRARY_PATTERNS = [
7
+ // Node.js internals
8
+ /^node:/,
9
+ /^internal\//,
10
+ /node_modules\//,
11
+ /^events\.js$/,
12
+ /^timers\.js$/,
13
+ /^util\.js$/,
14
+ /^net\.js$/,
15
+ /^stream\.js$/,
16
+ /^buffer\.js$/,
17
+ // Python
18
+ /\/site-packages\//,
19
+ /\/dist-packages\//,
20
+ /\/lib\/python\d+\.\d+\//,
21
+ /\/usr\/lib\//,
22
+ /\/usr\/local\/lib\//,
23
+ /\/venv\//,
24
+ /\/\.venv\//,
25
+ /\/virtualenv\//,
26
+ // Java
27
+ /^java\./,
28
+ /^javax\./,
29
+ /^sun\./,
30
+ /^com\.sun\./,
31
+ /^org\.springframework\./,
32
+ /^org\.apache\./,
33
+ /^org\.hibernate\./,
34
+ /^org\.eclipse\./,
35
+ /^io\.netty\./,
36
+ /^com\.google\./,
37
+ /^org\.junit\./,
38
+ // Go
39
+ /^runtime\//,
40
+ /^net\/http\//,
41
+ /^testing\//,
42
+ /\/vendor\//,
43
+ /\/pkg\/mod\//,
44
+ // Ruby
45
+ /\/gems\//,
46
+ /\/rubygems\//,
47
+ /\/ruby\/\d+\.\d+\.\d+\//,
48
+ // C#/.NET
49
+ /^System\./,
50
+ /^Microsoft\./,
51
+ /^Newtonsoft\./,
52
+ // PHP
53
+ /\/vendor\//,
54
+ /^phar:\/\//,
55
+ ];
56
+ export default class StackTraceParser {
57
+ /**
58
+ * Parse a raw stack trace string into structured frames.
59
+ * Auto-detects the language and applies the appropriate parser.
60
+ */
61
+ static parse(rawStackTrace) {
62
+ if (!rawStackTrace || rawStackTrace.trim().length === 0) {
63
+ return { frames: [], raw: rawStackTrace || "" };
64
+ }
65
+ const lines = rawStackTrace.split("\n").map((l) => {
66
+ return l.trim();
67
+ });
68
+ // Try each parser and use the one that produces the most frames
69
+ const parsers = [
70
+ StackTraceParser.parseJavaScript,
71
+ StackTraceParser.parsePython,
72
+ StackTraceParser.parseJava,
73
+ StackTraceParser.parseGo,
74
+ StackTraceParser.parseRuby,
75
+ StackTraceParser.parseCSharp,
76
+ StackTraceParser.parsePHP,
77
+ ];
78
+ let bestFrames = [];
79
+ for (const parser of parsers) {
80
+ try {
81
+ const frames = parser(lines);
82
+ if (frames.length > bestFrames.length) {
83
+ bestFrames = frames;
84
+ }
85
+ }
86
+ catch (_a) {
87
+ // Skip failing parsers
88
+ }
89
+ }
90
+ return {
91
+ frames: bestFrames,
92
+ raw: rawStackTrace,
93
+ };
94
+ }
95
+ /**
96
+ * Determine if a file path is application code (not library/framework).
97
+ */
98
+ static isAppCode(filePath) {
99
+ if (!filePath) {
100
+ return true;
101
+ }
102
+ for (const pattern of LIBRARY_PATTERNS) {
103
+ if (pattern.test(filePath)) {
104
+ return false;
105
+ }
106
+ }
107
+ return true;
108
+ }
109
+ /**
110
+ * Parse JavaScript/Node.js stack traces.
111
+ * Format: `at functionName (filePath:line:col)` or `at filePath:line:col`
112
+ */
113
+ static parseJavaScript(lines) {
114
+ const frames = [];
115
+ // Pattern 1: at functionName (filePath:line:col)
116
+ const patternWithParens = /^at\s+(.+?)\s+\((.+?):(\d+):(\d+)\)$/;
117
+ // Pattern 2: at filePath:line:col
118
+ const patternWithoutParens = /^at\s+(.+?):(\d+):(\d+)$/;
119
+ // Pattern 3: at functionName (filePath:line)
120
+ const patternWithParensNoCol = /^at\s+(.+?)\s+\((.+?):(\d+)\)$/;
121
+ // Pattern 4: at eval (eval at functionName (filePath:line:col))
122
+ const patternEval = /^at\s+eval\s+\(eval\s+at\s+(.+?)\s+\((.+?):(\d+):(\d+)\)/;
123
+ for (const line of lines) {
124
+ let match = null;
125
+ match = line.match(patternEval);
126
+ if (match) {
127
+ frames.push({
128
+ functionName: `eval at ${match[1]}`,
129
+ fileName: match[2],
130
+ lineNumber: parseInt(match[3], 10),
131
+ columnNumber: parseInt(match[4], 10),
132
+ inApp: StackTraceParser.isAppCode(match[2]),
133
+ });
134
+ continue;
135
+ }
136
+ match = line.match(patternWithParens);
137
+ if (match) {
138
+ frames.push({
139
+ functionName: match[1],
140
+ fileName: match[2],
141
+ lineNumber: parseInt(match[3], 10),
142
+ columnNumber: parseInt(match[4], 10),
143
+ inApp: StackTraceParser.isAppCode(match[2]),
144
+ });
145
+ continue;
146
+ }
147
+ match = line.match(patternWithParensNoCol);
148
+ if (match) {
149
+ frames.push({
150
+ functionName: match[1],
151
+ fileName: match[2],
152
+ lineNumber: parseInt(match[3], 10),
153
+ inApp: StackTraceParser.isAppCode(match[2]),
154
+ });
155
+ continue;
156
+ }
157
+ match = line.match(patternWithoutParens);
158
+ if (match) {
159
+ frames.push({
160
+ functionName: "<anonymous>",
161
+ fileName: match[1],
162
+ lineNumber: parseInt(match[2], 10),
163
+ columnNumber: parseInt(match[3], 10),
164
+ inApp: StackTraceParser.isAppCode(match[1]),
165
+ });
166
+ continue;
167
+ }
168
+ }
169
+ return frames;
170
+ }
171
+ /**
172
+ * Parse Python stack traces.
173
+ * Format: `File "path", line N, in function`
174
+ */
175
+ static parsePython(lines) {
176
+ const frames = [];
177
+ const pattern = /^File\s+"(.+?)",\s+line\s+(\d+)(?:,\s+in\s+(.+))?$/;
178
+ for (const line of lines) {
179
+ const match = line.match(pattern);
180
+ if (match) {
181
+ frames.push({
182
+ functionName: match[3] || "<module>",
183
+ fileName: match[1],
184
+ lineNumber: parseInt(match[2], 10),
185
+ inApp: StackTraceParser.isAppCode(match[1]),
186
+ });
187
+ }
188
+ }
189
+ return frames;
190
+ }
191
+ /**
192
+ * Parse Java stack traces.
193
+ * Format: `at package.Class.method(File.java:line)`
194
+ */
195
+ static parseJava(lines) {
196
+ const frames = [];
197
+ // Pattern: at com.package.Class.method(File.java:123)
198
+ const pattern = /^at\s+([\w.$]+)\(([\w.]+):(\d+)\)$/;
199
+ // Pattern for native methods: at com.package.Class.method(Native Method)
200
+ const patternNative = /^at\s+([\w.$]+)\(Native Method\)$/;
201
+ // Pattern for unknown source: at com.package.Class.method(Unknown Source)
202
+ const patternUnknown = /^at\s+([\w.$]+)\(Unknown Source\)$/;
203
+ for (const line of lines) {
204
+ let match = null;
205
+ match = line.match(pattern);
206
+ if (match) {
207
+ const fullMethod = match[1];
208
+ frames.push({
209
+ functionName: fullMethod,
210
+ fileName: match[2],
211
+ lineNumber: parseInt(match[3], 10),
212
+ inApp: StackTraceParser.isAppCode(fullMethod),
213
+ });
214
+ continue;
215
+ }
216
+ match = line.match(patternNative);
217
+ if (match) {
218
+ frames.push({
219
+ functionName: match[1],
220
+ fileName: "Native Method",
221
+ lineNumber: 0,
222
+ inApp: false,
223
+ });
224
+ continue;
225
+ }
226
+ match = line.match(patternUnknown);
227
+ if (match) {
228
+ frames.push({
229
+ functionName: match[1],
230
+ fileName: "Unknown Source",
231
+ lineNumber: 0,
232
+ inApp: StackTraceParser.isAppCode(match[1]),
233
+ });
234
+ continue;
235
+ }
236
+ }
237
+ return frames;
238
+ }
239
+ /**
240
+ * Parse Go stack traces.
241
+ * Format: `package/file.go:line +0xNN` or `goroutine N [reason]:`
242
+ * Go stack traces have pairs of lines:
243
+ * functionName(args)
244
+ * /path/to/file.go:line +0xNN
245
+ */
246
+ static parseGo(lines) {
247
+ const frames = [];
248
+ const filePattern = /^(.+\.go):(\d+)\s*(?:\+0x[0-9a-f]+)?$/;
249
+ for (let i = 0; i < lines.length; i++) {
250
+ const line = lines[i];
251
+ // Skip goroutine headers
252
+ if (line.startsWith("goroutine ")) {
253
+ continue;
254
+ }
255
+ // Look for file:line pattern
256
+ const match = line.match(filePattern);
257
+ if (match) {
258
+ // The previous line should be the function name
259
+ let functionName = "<unknown>";
260
+ if (i > 0 && lines[i - 1]) {
261
+ // Remove arguments from function name
262
+ const funcLine = lines[i - 1];
263
+ const parenIndex = funcLine.indexOf("(");
264
+ functionName =
265
+ parenIndex > 0 ? funcLine.substring(0, parenIndex) : funcLine;
266
+ }
267
+ frames.push({
268
+ functionName: functionName,
269
+ fileName: match[1],
270
+ lineNumber: parseInt(match[2], 10),
271
+ inApp: StackTraceParser.isAppCode(match[1]),
272
+ });
273
+ }
274
+ }
275
+ return frames;
276
+ }
277
+ /**
278
+ * Parse Ruby stack traces.
279
+ * Format: `file:line:in 'method'` or `file:line:in \`method'`
280
+ */
281
+ static parseRuby(lines) {
282
+ const frames = [];
283
+ const pattern = /^(.+?):(\d+):in\s+[`'](.+?)'$/;
284
+ for (const line of lines) {
285
+ const match = line.match(pattern);
286
+ if (match) {
287
+ frames.push({
288
+ functionName: match[3],
289
+ fileName: match[1],
290
+ lineNumber: parseInt(match[2], 10),
291
+ inApp: StackTraceParser.isAppCode(match[1]),
292
+ });
293
+ }
294
+ }
295
+ return frames;
296
+ }
297
+ /**
298
+ * Parse C#/.NET stack traces.
299
+ * Format: `at Namespace.Class.Method(params) in file:line N`
300
+ */
301
+ static parseCSharp(lines) {
302
+ const frames = [];
303
+ // Pattern: at Namespace.Class.Method(params) in /path/to/file.cs:line 42
304
+ const patternWithFile = /^at\s+(.+?)\s+in\s+(.+?):line\s+(\d+)$/;
305
+ // Pattern: at Namespace.Class.Method(params)
306
+ const patternWithoutFile = /^at\s+([\w.<>+]+\(.*?\))$/;
307
+ for (const line of lines) {
308
+ let match = null;
309
+ match = line.match(patternWithFile);
310
+ if (match) {
311
+ frames.push({
312
+ functionName: match[1],
313
+ fileName: match[2],
314
+ lineNumber: parseInt(match[3], 10),
315
+ inApp: StackTraceParser.isAppCode(match[1]),
316
+ });
317
+ continue;
318
+ }
319
+ match = line.match(patternWithoutFile);
320
+ if (match) {
321
+ frames.push({
322
+ functionName: match[1],
323
+ fileName: "",
324
+ lineNumber: 0,
325
+ inApp: StackTraceParser.isAppCode(match[1]),
326
+ });
327
+ continue;
328
+ }
329
+ }
330
+ return frames;
331
+ }
332
+ /**
333
+ * Parse PHP stack traces.
334
+ * Format: `#N /path/to/file.php(line): Class->method()`
335
+ */
336
+ static parsePHP(lines) {
337
+ const frames = [];
338
+ // Pattern: #0 /path/to/file.php(42): ClassName->method()
339
+ const pattern = /^#\d+\s+(.+?)\((\d+)\):\s+(.+)$/;
340
+ // Pattern: #0 {main}
341
+ const patternMain = /^#\d+\s+\{main\}$/;
342
+ for (const line of lines) {
343
+ if (patternMain.test(line)) {
344
+ frames.push({
345
+ functionName: "{main}",
346
+ fileName: "",
347
+ lineNumber: 0,
348
+ inApp: true,
349
+ });
350
+ continue;
351
+ }
352
+ const match = line.match(pattern);
353
+ if (match) {
354
+ frames.push({
355
+ functionName: match[3].replace(/\(\)$/, ""),
356
+ fileName: match[1],
357
+ lineNumber: parseInt(match[2], 10),
358
+ inApp: StackTraceParser.isAppCode(match[1]),
359
+ });
360
+ }
361
+ }
362
+ return frames;
363
+ }
364
+ }
365
+ //# sourceMappingURL=StackTraceParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StackTraceParser.js","sourceRoot":"","sources":["../../../../../Server/Utils/Telemetry/StackTraceParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ import { DisableTelemetry } from "../../EnvironmentConfig";
2
+ import { AsyncLocalStorage } from "async_hooks";
3
+ /**
4
+ * Ambient, mutable telemetry context backed by AsyncLocalStorage.
5
+ *
6
+ * Why this exists: OpenTelemetry span attributes do NOT propagate from a
7
+ * parent span to its children, and OneUptime sets tenant context (projectId,
8
+ * userId, ...) deep in middleware while the spans that matter are created much
9
+ * further down the call stack. Rather than thread attributes through every
10
+ * function or tag ~1958 `@CaptureSpan` call sites by hand, we keep a small
11
+ * mutable attribute bag scoped to the current unit of work. `ContextSpanProcessor`
12
+ * stamps it onto every span at creation, and `Logger` merges it into every log
13
+ * record — so context flows everywhere automatically.
14
+ *
15
+ * Seed a scope at each entry point with `runWithContext`, then enrich it as
16
+ * more identifiers become known with `setAttributes`.
17
+ */
18
+ class TelemetryContext {
19
+ /**
20
+ * Run `fn` within a fresh telemetry-context scope seeded with `attributes`.
21
+ * Any attributes from an enclosing scope are inherited so nested units of
22
+ * work (e.g. a job spawned while handling a request) keep their context.
23
+ */
24
+ static runWithContext(attributes, fn) {
25
+ if (DisableTelemetry) {
26
+ return fn();
27
+ }
28
+ const inherited = this.getAttributes();
29
+ const store = {
30
+ attributes: Object.assign({}, inherited),
31
+ };
32
+ this.mergeInto(store.attributes, attributes);
33
+ return this.storage.run(store, fn);
34
+ }
35
+ /**
36
+ * Merge `attributes` into the current scope. No-op when there is no active
37
+ * scope (e.g. code running outside any seeded entry point) or telemetry is
38
+ * disabled, so it is always safe to call.
39
+ */
40
+ static setAttributes(attributes) {
41
+ if (DisableTelemetry) {
42
+ return;
43
+ }
44
+ const store = this.storage.getStore();
45
+ if (!store) {
46
+ return;
47
+ }
48
+ this.mergeInto(store.attributes, attributes);
49
+ }
50
+ /**
51
+ * Read the attributes for the current scope. Returns an empty object when
52
+ * there is no active scope. The returned object is the live store — treat it
53
+ * as read-only (consumers copy it before mutating).
54
+ */
55
+ static getAttributes() {
56
+ const store = this.storage.getStore();
57
+ if (!store) {
58
+ return {};
59
+ }
60
+ return store.attributes;
61
+ }
62
+ /**
63
+ * Best-effort extraction of known tenant/business identifiers from an
64
+ * arbitrary object (e.g. a queue job's `data` payload), so worker jobs can
65
+ * seed context without every job knowing about telemetry. Values are coerced
66
+ * to strings; unknown/empty values are skipped.
67
+ */
68
+ static pickKnownAttributes(data) {
69
+ const attributes = {};
70
+ if (!data || typeof data !== "object") {
71
+ return attributes;
72
+ }
73
+ const record = data;
74
+ for (const key of this.KNOWN_ID_KEYS) {
75
+ const value = record[key];
76
+ if (value === undefined || value === null) {
77
+ continue;
78
+ }
79
+ if (typeof value === "string" ||
80
+ typeof value === "number" ||
81
+ typeof value === "boolean") {
82
+ attributes[key] = value;
83
+ continue;
84
+ }
85
+ // ObjectID-like values expose a meaningful toString().
86
+ const asString = String(value);
87
+ if (asString && asString !== "[object Object]") {
88
+ attributes[key] = asString;
89
+ }
90
+ }
91
+ return attributes;
92
+ }
93
+ static mergeInto(target, attributes) {
94
+ for (const key in attributes) {
95
+ const value = attributes[key];
96
+ if (value !== undefined && value !== null) {
97
+ target[key] = value;
98
+ }
99
+ }
100
+ }
101
+ }
102
+ TelemetryContext.storage = new AsyncLocalStorage();
103
+ /**
104
+ * Identifier keys we look for when seeding context from an arbitrary payload
105
+ * (see {@link pickKnownAttributes}).
106
+ */
107
+ TelemetryContext.KNOWN_ID_KEYS = [
108
+ "projectId",
109
+ "userId",
110
+ "monitorId",
111
+ "incidentId",
112
+ "alertId",
113
+ "statusPageId",
114
+ "scheduledMaintenanceId",
115
+ "onCallDutyPolicyId",
116
+ "onCallDutyPolicyScheduleId",
117
+ "incidentEpisodeId",
118
+ "alertEpisodeId",
119
+ "workspaceType",
120
+ "channelId",
121
+ "requestId",
122
+ ];
123
+ export default TelemetryContext;
124
+ //# sourceMappingURL=TelemetryContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TelemetryContext.js","sourceRoot":"","sources":["../../../../../Server/Utils/Telemetry/TelemetryContext.ts"],"names":[],"mappings":"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"}
@@ -9,10 +9,13 @@ import { Resource } from "@opentelemetry/resources";
9
9
  import { BatchLogRecordProcessor, LoggerProvider, } from "@opentelemetry/sdk-logs";
10
10
  import { Aggregation, MeterProvider, PeriodicExportingMetricReader, } from "@opentelemetry/sdk-metrics";
11
11
  import * as opentelemetry from "@opentelemetry/sdk-node";
12
+ import { BatchSpanProcessor, } from "@opentelemetry/sdk-trace-base";
12
13
  import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION, } from "@opentelemetry/semantic-conventions";
13
14
  import URL from "../../Types/API/URL";
14
15
  import { AppVersion, Env, DisableTelemetry } from "../EnvironmentConfig";
15
16
  import logger from "./Logger";
17
+ import GracefulShutdown, { ShutdownPriority } from "./GracefulShutdown";
18
+ import ContextSpanProcessor from "./Telemetry/ContextSpanProcessor";
16
19
  import RuntimeMetrics from "./Telemetry/RuntimeMetrics";
17
20
  export var SpanStatusCode;
18
21
  (function (SpanStatusCode) {
@@ -134,9 +137,18 @@ class Telemetry {
134
137
  resource: loggerProviderResource,
135
138
  autoDetectResources: true,
136
139
  };
140
+ /*
141
+ * Always run the ContextSpanProcessor so the ambient TelemetryContext
142
+ * attributes (projectId, userId, monitorId, incidentId, requestId, ...)
143
+ * are stamped onto every span at creation. The BatchSpanProcessor that
144
+ * actually exports spans is added after it, and only when an exporter is
145
+ * configured. (traceExporter is deprecated in favour of spanProcessors.)
146
+ */
147
+ const spanProcessors = [new ContextSpanProcessor()];
137
148
  if (traceExporter) {
138
- nodeSdkConfiguration.traceExporter = traceExporter;
149
+ spanProcessors.push(new BatchSpanProcessor(traceExporter));
139
150
  }
151
+ nodeSdkConfiguration.spanProcessors = spanProcessors;
140
152
  /*
141
153
  * We will skip this becasue we're attachng this metric reader to the meter provider later.
142
154
  * if (this.metricReader) {
@@ -149,10 +161,15 @@ class Telemetry {
149
161
  const sdk = new opentelemetry.NodeSDK(nodeSdkConfiguration);
150
162
  this.getMeterProvider();
151
163
  this.getMeter();
152
- process.on("SIGTERM", () => {
153
- sdk.shutdown().finally(() => {
154
- return process.exit(0);
155
- });
164
+ /*
165
+ * Flush traces / metrics / logs last (Telemetry tier) so spans and logs
166
+ * emitted by the rest of the shutdown still get exported. GracefulShutdown
167
+ * owns process.exit now — this handler must NOT call it itself, or it
168
+ * would race the other tiers and abandon the datastore pools (the exact
169
+ * bug this replaced).
170
+ */
171
+ GracefulShutdown.registerHandler("Telemetry", ShutdownPriority.Telemetry, () => {
172
+ return sdk.shutdown();
156
173
  });
157
174
  sdk.start();
158
175
  this.sdk = sdk;
@@ -1 +1 @@
1
- {"version":3,"file":"Telemetry.js","sourceRoot":"","sources":["../../../../Server/Utils/Telemetry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Telemetry.js","sourceRoot":"","sources":["../../../../Server/Utils/Telemetry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { TelemetryAttributeService } from "../../../Server/Services/TelemetryAttributeService";
2
+ import ObjectID from "../../../Types/ObjectID";
3
+ import { describe, expect, test } from "@jest/globals";
4
+ describe("TelemetryAttributeService.buildAttributeValuesStatement", () => {
5
+ /*
6
+ * Only the column/table names are read while building the statement, so a
7
+ * lightweight source literal is enough — no real AnalyticsDatabaseService.
8
+ */
9
+ const source = {
10
+ tableName: "MetricItemV2",
11
+ attributesColumn: "attributes",
12
+ attributeKeysColumn: "attributeKeys",
13
+ timeColumn: "time",
14
+ };
15
+ const buildValuesStatement = (overrides = {}) => {
16
+ return TelemetryAttributeService.buildAttributeValuesStatement(Object.assign({ projectId: ObjectID.generate(), source, attributeKey: "host.name" }, overrides));
17
+ };
18
+ test("omits the ILIKE filter when no search text is provided", () => {
19
+ const statement = buildValuesStatement();
20
+ expect(statement.query).not.toContain("ILIKE");
21
+ expect(statement.query).toContain("ORDER BY attributeValue ASC");
22
+ });
23
+ test("omits the ILIKE filter when search text is only whitespace", () => {
24
+ const statement = buildValuesStatement({ searchText: " " });
25
+ expect(statement.query).not.toContain("ILIKE");
26
+ });
27
+ test("adds a case-insensitive substring filter when search text is provided", () => {
28
+ const statement = buildValuesStatement({ searchText: "web" });
29
+ expect(statement.query).toContain("ILIKE");
30
+ // The value is parameterized and wrapped with % wildcards.
31
+ expect(Object.values(statement.query_params)).toContain("%web%");
32
+ // The attribute key is always parameterized — never inlined into SQL.
33
+ expect(Object.values(statement.query_params)).toContain("host.name");
34
+ });
35
+ test("trims surrounding whitespace from the search text", () => {
36
+ const statement = buildValuesStatement({
37
+ searchText: " web-server ",
38
+ });
39
+ expect(Object.values(statement.query_params)).toContain("%web-server%");
40
+ });
41
+ test("scopes to a metric when metricName is provided", () => {
42
+ const statement = buildValuesStatement({
43
+ metricName: "http.server.duration",
44
+ searchText: "web",
45
+ });
46
+ expect(statement.query).toContain("AND name =");
47
+ expect(Object.values(statement.query_params)).toContain("http.server.duration");
48
+ });
49
+ });
50
+ //# sourceMappingURL=TelemetryAttributeService.test.js.map