@oneuptime/common 10.5.8 → 10.5.17

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 (118) 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/SmsLog.ts +111 -0
  8. package/Models/DatabaseModels/TelemetryException.ts +46 -34
  9. package/Models/DatabaseModels/TelemetryUsageBilling.ts +35 -2
  10. package/Server/API/AIAgentDataAPI.ts +25 -7
  11. package/Server/API/DashboardAPI.ts +616 -0
  12. package/Server/API/TelemetryExceptionAPI.ts +6 -2
  13. package/Server/Infrastructure/Postgres/SchemaMigrations/1780317745887-AddDeliveryTrackingToSmsLog.ts +39 -0
  14. package/Server/Infrastructure/Postgres/SchemaMigrations/1780381124553-MigrationName.ts +28 -0
  15. package/Server/Infrastructure/Postgres/SchemaMigrations/1780382837019-MigrationName.ts +24 -0
  16. package/Server/Infrastructure/Postgres/SchemaMigrations/1780387560604-MigrationName.ts +47 -0
  17. package/Server/Infrastructure/Postgres/SchemaMigrations/1780388219225-MigrationName.ts +34 -0
  18. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
  19. package/Server/Infrastructure/QueueWorker.ts +40 -1
  20. package/Server/Services/AnalyticsDatabaseService.ts +87 -0
  21. package/Server/Services/DatabaseService.ts +73 -0
  22. package/Server/Services/TelemetryExceptionService.ts +24 -49
  23. package/Server/Services/TelemetryUsageBillingService.ts +289 -166
  24. package/Server/Types/AnalyticsDatabase/ModelPermission.ts +102 -72
  25. package/Server/Types/Database/Permissions/OwnedScopePermission.ts +81 -60
  26. package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +67 -0
  27. package/Server/Utils/Logger.ts +12 -1
  28. package/Server/Utils/StartServer.ts +13 -5
  29. package/Server/Utils/Telemetry/ContextSpanProcessor.ts +48 -0
  30. package/Server/Utils/Telemetry/SpanUtil.ts +16 -35
  31. package/Server/Utils/Telemetry/TelemetryContext.ts +190 -0
  32. package/Server/Utils/Telemetry.ts +18 -2
  33. package/Types/Database/AccessControl/OwnedThrough.ts +31 -3
  34. package/Types/SmsStatus.ts +16 -0
  35. package/Types/Telemetry/ServiceType.ts +10 -0
  36. package/UI/Components/LogsViewer/LogsViewer.tsx +16 -0
  37. package/UI/Utils/Project.ts +6 -0
  38. package/UI/Utils/Telemetry/Telemetry.ts +65 -0
  39. package/UI/Utils/TelemetryService.ts +150 -0
  40. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js +1 -1
  41. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js.map +1 -1
  42. package/build/dist/Models/AnalyticsModels/Log.js +1 -1
  43. package/build/dist/Models/AnalyticsModels/Log.js.map +1 -1
  44. package/build/dist/Models/AnalyticsModels/Metric.js +1 -1
  45. package/build/dist/Models/AnalyticsModels/Metric.js.map +1 -1
  46. package/build/dist/Models/AnalyticsModels/Profile.js +1 -1
  47. package/build/dist/Models/AnalyticsModels/Profile.js.map +1 -1
  48. package/build/dist/Models/AnalyticsModels/ProfileSample.js +1 -1
  49. package/build/dist/Models/AnalyticsModels/ProfileSample.js.map +1 -1
  50. package/build/dist/Models/AnalyticsModels/Span.js +1 -1
  51. package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
  52. package/build/dist/Models/DatabaseModels/SmsLog.js +112 -0
  53. package/build/dist/Models/DatabaseModels/SmsLog.js.map +1 -1
  54. package/build/dist/Models/DatabaseModels/TelemetryException.js +47 -33
  55. package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
  56. package/build/dist/Models/DatabaseModels/TelemetryUsageBilling.js +36 -2
  57. package/build/dist/Models/DatabaseModels/TelemetryUsageBilling.js.map +1 -1
  58. package/build/dist/Server/API/AIAgentDataAPI.js +24 -8
  59. package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
  60. package/build/dist/Server/API/DashboardAPI.js +459 -2
  61. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  62. package/build/dist/Server/API/TelemetryExceptionAPI.js +6 -2
  63. package/build/dist/Server/API/TelemetryExceptionAPI.js.map +1 -1
  64. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780317745887-AddDeliveryTrackingToSmsLog.js +20 -0
  65. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780317745887-AddDeliveryTrackingToSmsLog.js.map +1 -0
  66. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780381124553-MigrationName.js +23 -0
  67. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780381124553-MigrationName.js.map +1 -0
  68. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780382837019-MigrationName.js +19 -0
  69. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780382837019-MigrationName.js.map +1 -0
  70. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780387560604-MigrationName.js +22 -0
  71. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780387560604-MigrationName.js.map +1 -0
  72. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780388219225-MigrationName.js +25 -0
  73. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1780388219225-MigrationName.js.map +1 -0
  74. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
  75. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  76. package/build/dist/Server/Infrastructure/QueueWorker.js +31 -1
  77. package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
  78. package/build/dist/Server/Services/AnalyticsDatabaseService.js +59 -0
  79. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  80. package/build/dist/Server/Services/DatabaseService.js +62 -0
  81. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  82. package/build/dist/Server/Services/TelemetryExceptionService.js +16 -41
  83. package/build/dist/Server/Services/TelemetryExceptionService.js.map +1 -1
  84. package/build/dist/Server/Services/TelemetryUsageBillingService.js +211 -147
  85. package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
  86. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js +84 -63
  87. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js.map +1 -1
  88. package/build/dist/Server/Types/Database/Permissions/OwnedScopePermission.js +67 -49
  89. package/build/dist/Server/Types/Database/Permissions/OwnedScopePermission.js.map +1 -1
  90. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +51 -0
  91. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
  92. package/build/dist/Server/Utils/Logger.js +8 -1
  93. package/build/dist/Server/Utils/Logger.js.map +1 -1
  94. package/build/dist/Server/Utils/StartServer.js +12 -4
  95. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  96. package/build/dist/Server/Utils/Telemetry/ContextSpanProcessor.js +37 -0
  97. package/build/dist/Server/Utils/Telemetry/ContextSpanProcessor.js.map +1 -0
  98. package/build/dist/Server/Utils/Telemetry/SpanUtil.js +15 -24
  99. package/build/dist/Server/Utils/Telemetry/SpanUtil.js.map +1 -1
  100. package/build/dist/Server/Utils/Telemetry/TelemetryContext.js +124 -0
  101. package/build/dist/Server/Utils/Telemetry/TelemetryContext.js.map +1 -0
  102. package/build/dist/Server/Utils/Telemetry.js +12 -1
  103. package/build/dist/Server/Utils/Telemetry.js.map +1 -1
  104. package/build/dist/Types/Database/AccessControl/OwnedThrough.js +7 -2
  105. package/build/dist/Types/Database/AccessControl/OwnedThrough.js.map +1 -1
  106. package/build/dist/Types/SmsStatus.js +15 -0
  107. package/build/dist/Types/SmsStatus.js.map +1 -1
  108. package/build/dist/Types/Telemetry/ServiceType.js +10 -0
  109. package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
  110. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +15 -0
  111. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  112. package/build/dist/UI/Utils/Project.js +5 -0
  113. package/build/dist/UI/Utils/Project.js.map +1 -1
  114. package/build/dist/UI/Utils/Telemetry/Telemetry.js +44 -0
  115. package/build/dist/UI/Utils/Telemetry/Telemetry.js.map +1 -1
  116. package/build/dist/UI/Utils/TelemetryService.js +113 -0
  117. package/build/dist/UI/Utils/TelemetryService.js.map +1 -0
  118. package/package.json +2 -2
@@ -10,22 +10,27 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  import { MeteredPlanUtil } from "../Types/Billing/MeteredPlan/AllMeteredPlans";
11
11
  import DatabaseService from "./DatabaseService";
12
12
  import SortOrder from "../../Types/BaseDatabase/SortOrder";
13
- import LIMIT_MAX, { LIMIT_INFINITY } from "../../Types/Database/LimitMax";
13
+ import LIMIT_MAX from "../../Types/Database/LimitMax";
14
14
  import OneUptimeDate from "../../Types/Date";
15
15
  import Decimal from "../../Types/Decimal";
16
16
  import BadDataException from "../../Types/Exception/BadDataException";
17
17
  import ProductType from "../../Types/MeteredPlan/ProductType";
18
+ import ObjectID from "../../Types/ObjectID";
18
19
  import Model, { DEFAULT_RETENTION_IN_DAYS, } from "../../Models/DatabaseModels/TelemetryUsageBilling";
19
20
  import ServiceService from "./ServiceService";
21
+ import ProjectService from "./ProjectService";
20
22
  import SpanService from "./SpanService";
21
23
  import LogService from "./LogService";
22
24
  import MetricService from "./MetricService";
23
25
  import ExceptionInstanceService from "./ExceptionInstanceService";
24
26
  import ProfileService from "./ProfileService";
25
27
  import ProfileSampleService from "./ProfileSampleService";
26
- import AnalyticsQueryHelper from "../Types/AnalyticsDatabase/QueryHelper";
27
28
  import DiskSize from "../../Types/DiskSize";
28
29
  import logger from "../Utils/Logger";
30
+ import HostService from "./HostService";
31
+ import DockerHostService from "./DockerHostService";
32
+ import KubernetesClusterService from "./KubernetesClusterService";
33
+ import ServiceType from "../../Types/Telemetry/ServiceType";
29
34
  import { AverageSpanRowSizeInBytes, AverageLogRowSizeInBytes, AverageMetricRowSizeInBytes, AverageExceptionRowSizeInBytes, AverageProfileRowSizeInBytes, AverageProfileSampleRowSizeInBytes, IsBillingEnabled, } from "../EnvironmentConfig";
30
35
  import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
31
36
  export class Service extends DatabaseService {
@@ -54,7 +59,7 @@ export class Service extends DatabaseService {
54
59
  });
55
60
  }
56
61
  async stageTelemetryUsageForProject(data) {
57
- var _a;
62
+ var _a, _b;
58
63
  if (!IsBillingEnabled) {
59
64
  return;
60
65
  }
@@ -82,13 +87,102 @@ export class Service extends DatabaseService {
82
87
  const usageDayString = OneUptimeDate.getDateString(usageDate);
83
88
  const startOfDay = OneUptimeDate.getStartOfDay(usageDate);
84
89
  const endOfDay = OneUptimeDate.getEndOfDay(usageDate);
85
- const services = await ServiceService.findBy({
90
+ const usageByServiceId = new Map();
91
+ const addUsage = (rows, fallbackRowSizeInBytes) => {
92
+ for (const row of rows) {
93
+ const bytes = row.estimatedBytes > 0
94
+ ? row.estimatedBytes
95
+ : row.rowCount * fallbackRowSizeInBytes;
96
+ const existing = usageByServiceId.get(row.serviceId);
97
+ if (existing) {
98
+ existing.bytes += bytes;
99
+ if (!existing.serviceType && row.serviceType) {
100
+ existing.serviceType = row.serviceType;
101
+ }
102
+ }
103
+ else {
104
+ usageByServiceId.set(row.serviceId, {
105
+ serviceType: row.serviceType,
106
+ bytes,
107
+ });
108
+ }
109
+ }
110
+ };
111
+ try {
112
+ if (data.productType === ProductType.Traces) {
113
+ addUsage(await SpanService.groupTelemetryUsageByService({
114
+ projectId: data.projectId,
115
+ timestampColumnName: "startTime",
116
+ startDate: startOfDay,
117
+ endDate: endOfDay,
118
+ }), averageRowSizeInBytes);
119
+ addUsage(await ExceptionInstanceService.groupTelemetryUsageByService({
120
+ projectId: data.projectId,
121
+ timestampColumnName: "time",
122
+ startDate: startOfDay,
123
+ endDate: endOfDay,
124
+ }), averageExceptionRowSizeInBytes);
125
+ }
126
+ else if (data.productType === ProductType.Logs) {
127
+ addUsage(await LogService.groupTelemetryUsageByService({
128
+ projectId: data.projectId,
129
+ timestampColumnName: "time",
130
+ startDate: startOfDay,
131
+ endDate: endOfDay,
132
+ }), averageRowSizeInBytes);
133
+ }
134
+ else if (data.productType === ProductType.Metrics) {
135
+ addUsage(await MetricService.groupTelemetryUsageByService({
136
+ projectId: data.projectId,
137
+ timestampColumnName: "time",
138
+ startDate: startOfDay,
139
+ endDate: endOfDay,
140
+ }), averageRowSizeInBytes);
141
+ }
142
+ else if (data.productType === ProductType.Profiles) {
143
+ addUsage(await ProfileService.groupTelemetryUsageByService({
144
+ projectId: data.projectId,
145
+ timestampColumnName: "startTime",
146
+ startDate: startOfDay,
147
+ endDate: endOfDay,
148
+ }), averageRowSizeInBytes);
149
+ addUsage(await ProfileSampleService.groupTelemetryUsageByService({
150
+ projectId: data.projectId,
151
+ timestampColumnName: "time",
152
+ startDate: startOfDay,
153
+ endDate: endOfDay,
154
+ }), averageProfileSampleRowSizeInBytes);
155
+ }
156
+ }
157
+ catch (error) {
158
+ logger.error(`Failed to aggregate telemetry usage for project ${data.projectId.toString()} (${data.productType}):`);
159
+ logger.error(error);
160
+ return;
161
+ }
162
+ if (usageByServiceId.size === 0) {
163
+ return;
164
+ }
165
+ /*
166
+ * Resolve retention per resource (Service / Host / DockerHost /
167
+ * KubernetesCluster overrides), defaulting to the project default for
168
+ * everything else — including the unattributed bucket. Retention
169
+ * scales the billed cost, so we honor per-resource overrides.
170
+ */
171
+ const retentionByServiceId = await this.buildTelemetryRetentionMap(data.projectId);
172
+ const projectDefaultRetentionInDays = await this.getProjectDefaultRetentionInDays(data.projectId);
173
+ /*
174
+ * Skip serviceIds already staged for this day so re-runs of the cron
175
+ * don't double-count (updateUsageBilling accumulates into the day's
176
+ * row). One query instead of a findOneBy per serviceId.
177
+ */
178
+ const alreadyStaged = await this.findBy({
86
179
  query: {
87
180
  projectId: data.projectId,
181
+ productType: data.productType,
182
+ day: usageDayString,
88
183
  },
89
184
  select: {
90
- _id: true,
91
- retainTelemetryDataForDays: true,
185
+ serviceId: true,
92
186
  },
93
187
  skip: 0,
94
188
  limit: LIMIT_MAX,
@@ -96,162 +190,117 @@ export class Service extends DatabaseService {
96
190
  isRoot: true,
97
191
  },
98
192
  });
99
- if (!services || services.length === 0) {
100
- return;
101
- }
102
- for (const service of services) {
103
- if (!(service === null || service === void 0 ? void 0 : service.id)) {
193
+ const stagedServiceIds = new Set(alreadyStaged
194
+ .map((row) => {
195
+ var _a;
196
+ return (_a = row.serviceId) === null || _a === void 0 ? void 0 : _a.toString();
197
+ })
198
+ .filter((id) => {
199
+ return Boolean(id);
200
+ }));
201
+ for (const [serviceIdStr, usage] of usageByServiceId) {
202
+ /*
203
+ * Monitor telemetry is billed via the Active Monitoring plan, and
204
+ * Alert/Incident telemetry is OneUptime's own operational data —
205
+ * neither is charged as ingested telemetry volume.
206
+ */
207
+ if (usage.serviceType === ServiceType.Monitor ||
208
+ usage.serviceType === ServiceType.Alert ||
209
+ usage.serviceType === ServiceType.Incident) {
104
210
  continue;
105
211
  }
106
- const existingEntry = await this.findOneBy({
107
- query: {
108
- projectId: data.projectId,
109
- productType: data.productType,
110
- serviceId: service.id,
111
- day: usageDayString,
112
- },
113
- select: {
114
- _id: true,
115
- },
116
- props: {
117
- isRoot: true,
118
- },
119
- });
120
- if (existingEntry) {
212
+ if (stagedServiceIds.has(serviceIdStr)) {
121
213
  continue;
122
214
  }
123
- let estimatedBytes = 0;
124
- try {
125
- if (data.productType === ProductType.Traces) {
126
- const spanCount = await SpanService.countBy({
127
- query: {
128
- projectId: data.projectId,
129
- serviceId: service.id,
130
- startTime: AnalyticsQueryHelper.inBetween(startOfDay, endOfDay),
131
- },
132
- skip: 0,
133
- limit: LIMIT_INFINITY,
134
- props: {
135
- isRoot: true,
136
- },
137
- });
138
- const exceptionCount = await ExceptionInstanceService.countBy({
139
- query: {
140
- projectId: data.projectId,
141
- serviceId: service.id,
142
- time: AnalyticsQueryHelper.inBetween(startOfDay, endOfDay),
143
- },
144
- skip: 0,
145
- limit: LIMIT_INFINITY,
146
- props: {
147
- isRoot: true,
148
- },
149
- });
150
- const totalSpanCount = spanCount.toNumber();
151
- const totalExceptionCount = exceptionCount.toNumber();
152
- if (totalSpanCount <= 0 && totalExceptionCount <= 0) {
153
- continue;
154
- }
155
- estimatedBytes =
156
- totalSpanCount * averageRowSizeInBytes +
157
- totalExceptionCount * averageExceptionRowSizeInBytes;
158
- }
159
- else if (data.productType === ProductType.Logs) {
160
- const count = await LogService.countBy({
161
- query: {
162
- projectId: data.projectId,
163
- serviceId: service.id,
164
- time: AnalyticsQueryHelper.inBetween(startOfDay, endOfDay),
165
- },
166
- skip: 0,
167
- limit: LIMIT_INFINITY,
168
- props: {
169
- isRoot: true,
170
- },
171
- });
172
- const totalRowCount = count.toNumber();
173
- if (totalRowCount <= 0) {
174
- continue;
175
- }
176
- estimatedBytes = totalRowCount * averageRowSizeInBytes;
177
- }
178
- else if (data.productType === ProductType.Metrics) {
179
- const count = await MetricService.countBy({
180
- query: {
181
- projectId: data.projectId,
182
- serviceId: service.id,
183
- time: AnalyticsQueryHelper.inBetween(startOfDay, endOfDay),
184
- },
185
- skip: 0,
186
- limit: LIMIT_INFINITY,
187
- props: {
188
- isRoot: true,
189
- },
190
- });
191
- const totalRowCount = count.toNumber();
192
- if (totalRowCount <= 0) {
193
- continue;
194
- }
195
- estimatedBytes = totalRowCount * averageRowSizeInBytes;
196
- }
197
- else if (data.productType === ProductType.Profiles) {
198
- const profileCount = await ProfileService.countBy({
199
- query: {
200
- projectId: data.projectId,
201
- serviceId: service.id,
202
- startTime: AnalyticsQueryHelper.inBetween(startOfDay, endOfDay),
203
- },
204
- skip: 0,
205
- limit: LIMIT_INFINITY,
206
- props: {
207
- isRoot: true,
208
- },
209
- });
210
- const profileSampleCount = await ProfileSampleService.countBy({
211
- query: {
212
- projectId: data.projectId,
213
- serviceId: service.id,
214
- time: AnalyticsQueryHelper.inBetween(startOfDay, endOfDay),
215
- },
216
- skip: 0,
217
- limit: LIMIT_INFINITY,
218
- props: {
219
- isRoot: true,
220
- },
221
- });
222
- const totalProfileCount = profileCount.toNumber();
223
- const totalProfileSampleCount = profileSampleCount.toNumber();
224
- if (totalProfileCount <= 0 && totalProfileSampleCount <= 0) {
225
- continue;
226
- }
227
- estimatedBytes =
228
- totalProfileCount * averageRowSizeInBytes +
229
- totalProfileSampleCount * averageProfileSampleRowSizeInBytes;
230
- }
231
- }
232
- catch (error) {
233
- logger.error(`Failed to compute telemetry usage for service ${(_a = service.id) === null || _a === void 0 ? void 0 : _a.toString()}:`);
234
- logger.error(error);
235
- continue;
236
- }
237
- if (estimatedBytes <= 0) {
238
- continue;
239
- }
240
- const estimatedGigabytes = DiskSize.byteSizeToGB(estimatedBytes);
215
+ const estimatedGigabytes = DiskSize.byteSizeToGB(usage.bytes);
241
216
  if (!Number.isFinite(estimatedGigabytes) || estimatedGigabytes <= 0) {
242
217
  continue;
243
218
  }
244
- const dataRetentionInDays = service.retainTelemetryDataForDays || DEFAULT_RETENTION_IN_DAYS;
219
+ const retentionInDays = (_a = retentionByServiceId.get(serviceIdStr)) !== null && _a !== void 0 ? _a : projectDefaultRetentionInDays;
220
+ /*
221
+ * Legacy rows (pre-discriminator) and any null serviceType are
222
+ * treated as OpenTelemetry — historically every billed serviceId was
223
+ * a real Service.
224
+ */
225
+ const serviceType = (_b = usage.serviceType) !== null && _b !== void 0 ? _b : ServiceType.OpenTelemetry;
245
226
  await this.updateUsageBilling({
246
227
  projectId: data.projectId,
247
228
  productType: data.productType,
248
- serviceId: service.id,
229
+ serviceId: new ObjectID(serviceIdStr),
230
+ serviceType: serviceType,
249
231
  dataIngestedInGB: estimatedGigabytes,
250
- retentionInDays: dataRetentionInDays,
232
+ retentionInDays: retentionInDays,
251
233
  usageDate: usageDate,
252
234
  });
253
235
  }
254
236
  }
237
+ /*
238
+ * Map of resourceId -> retainTelemetryDataForDays for every resource in
239
+ * the project that can own telemetry (Service, Host, DockerHost,
240
+ * KubernetesCluster). Used to scale billed cost by the actual retention
241
+ * applied to each resource's telemetry. Resources without an override
242
+ * (and the unattributed bucket) fall back to the project default.
243
+ */
244
+ async buildTelemetryRetentionMap(projectId) {
245
+ const retentionByServiceId = new Map();
246
+ const services = await ServiceService.findBy({
247
+ query: { projectId: projectId },
248
+ select: { _id: true, retainTelemetryDataForDays: true },
249
+ skip: 0,
250
+ limit: LIMIT_MAX,
251
+ props: { isRoot: true },
252
+ });
253
+ for (const service of services) {
254
+ if (service.id && service.retainTelemetryDataForDays) {
255
+ retentionByServiceId.set(service.id.toString(), service.retainTelemetryDataForDays);
256
+ }
257
+ }
258
+ const hosts = await HostService.findBy({
259
+ query: { projectId: projectId },
260
+ select: { _id: true, retainTelemetryDataForDays: true },
261
+ skip: 0,
262
+ limit: LIMIT_MAX,
263
+ props: { isRoot: true },
264
+ });
265
+ for (const host of hosts) {
266
+ if (host.id && host.retainTelemetryDataForDays) {
267
+ retentionByServiceId.set(host.id.toString(), host.retainTelemetryDataForDays);
268
+ }
269
+ }
270
+ const dockerHosts = await DockerHostService.findBy({
271
+ query: { projectId: projectId },
272
+ select: { _id: true, retainTelemetryDataForDays: true },
273
+ skip: 0,
274
+ limit: LIMIT_MAX,
275
+ props: { isRoot: true },
276
+ });
277
+ for (const dockerHost of dockerHosts) {
278
+ if (dockerHost.id && dockerHost.retainTelemetryDataForDays) {
279
+ retentionByServiceId.set(dockerHost.id.toString(), dockerHost.retainTelemetryDataForDays);
280
+ }
281
+ }
282
+ const clusters = await KubernetesClusterService.findBy({
283
+ query: { projectId: projectId },
284
+ select: { _id: true, retainTelemetryDataForDays: true },
285
+ skip: 0,
286
+ limit: LIMIT_MAX,
287
+ props: { isRoot: true },
288
+ });
289
+ for (const cluster of clusters) {
290
+ if (cluster.id && cluster.retainTelemetryDataForDays) {
291
+ retentionByServiceId.set(cluster.id.toString(), cluster.retainTelemetryDataForDays);
292
+ }
293
+ }
294
+ return retentionByServiceId;
295
+ }
296
+ async getProjectDefaultRetentionInDays(projectId) {
297
+ const project = await ProjectService.findOneById({
298
+ id: projectId,
299
+ select: { defaultTelemetryRetentionInDays: true },
300
+ props: { isRoot: true },
301
+ });
302
+ return ((project === null || project === void 0 ? void 0 : project.defaultTelemetryRetentionInDays) || DEFAULT_RETENTION_IN_DAYS);
303
+ }
255
304
  async updateUsageBilling(data) {
256
305
  var _a, _b;
257
306
  if (data.productType !== ProductType.Traces &&
@@ -315,6 +364,9 @@ export class Service extends DatabaseService {
315
364
  usageBilling.productType = data.productType;
316
365
  usageBilling.dataIngestedInGB = new Decimal(data.dataIngestedInGB);
317
366
  usageBilling.serviceId = data.serviceId;
367
+ if (data.serviceType) {
368
+ usageBilling.serviceType = data.serviceType;
369
+ }
318
370
  usageBilling.retainTelemetryDataForDays = data.retentionInDays;
319
371
  usageBilling.isReportedToBillingProvider = false;
320
372
  usageBilling.createdAt = usageDate;
@@ -382,6 +434,18 @@ __decorate([
382
434
  __metadata("design:paramtypes", [Object]),
383
435
  __metadata("design:returntype", Promise)
384
436
  ], Service.prototype, "stageTelemetryUsageForProject", null);
437
+ __decorate([
438
+ CaptureSpan(),
439
+ __metadata("design:type", Function),
440
+ __metadata("design:paramtypes", [ObjectID]),
441
+ __metadata("design:returntype", Promise)
442
+ ], Service.prototype, "buildTelemetryRetentionMap", null);
443
+ __decorate([
444
+ CaptureSpan(),
445
+ __metadata("design:type", Function),
446
+ __metadata("design:paramtypes", [ObjectID]),
447
+ __metadata("design:returntype", Promise)
448
+ ], Service.prototype, "getProjectDefaultRetentionInDays", null);
385
449
  __decorate([
386
450
  CaptureSpan(),
387
451
  __metadata("design:type", Function),
@@ -1 +1 @@
1
- {"version":3,"file":"TelemetryUsageBillingService.js","sourceRoot":"","sources":["../../../../Server/Services/TelemetryUsageBillingService.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAE/E,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,SAAS,MAAM,oCAAoC,CAAC;AAC3D,OAAO,SAAS,EAAE,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAC7C,OAAO,OAAO,MAAM,qBAAqB,CAAC;AAC1C,OAAO,gBAAgB,MAAM,wCAAwC,CAAC;AACtE,OAAO,WAAW,MAAM,qCAAqC,CAAC;AAE9D,OAAO,KAAK,EAAE,EACZ,yBAAyB,GAC1B,MAAM,mDAAmD,CAAC;AAC3D,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAClE,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAC1D,OAAO,oBAAoB,MAAM,wCAAwC,CAAC;AAC1E,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAGrC,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,2BAA2B,EAC3B,8BAA8B,EAC9B,4BAA4B,EAC5B,kCAAkC,EAClC,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,WAAW,MAAM,gCAAgC,CAAC;AAEzD,MAAM,OAAO,OAAQ,SAAQ,eAAsB;IACjD;QACE,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,gBAAgB,EAAE,CAAC;YACrB,IAAI,CAAC,8BAA8B,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAGY,AAAN,KAAK,CAAC,yBAAyB,CAAC,IAGtC;QACC,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC;YACvB,KAAK,EAAE;gBACL,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,2BAA2B,EAAE,KAAK;aACnC;YACD,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,SAAS,EAAE,uDAAuD;YACzE,MAAM,EAAE;gBACN,GAAG,EAAE,IAAI;gBACT,cAAc,EAAE,IAAI;aACrB;YACD,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI;aACb;SACF,CAAC,CAAC;IACL,CAAC;IAGY,AAAN,KAAK,CAAC,6BAA6B,CAAC,IAI1C;;QACC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAS,IAAI,CAAC,SAAS;YACpC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;YAC1C,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,aAAa,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAEpE,MAAM,qBAAqB,GAAW,IAAI,CAAC,2BAA2B,CACpE,IAAI,CAAC,WAAW,CACjB,CAAC;QACF,MAAM,8BAA8B,GAClC,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAEpC,MAAM,kCAAkC,GACtC,IAAI,CAAC,8BAA8B,EAAE,CAAC;QAExC,IACE,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,MAAM;YACvC,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,QAAQ;YACzC,qBAAqB,IAAI,CAAC,EAC1B,CAAC;YACD,OAAO;QACT,CAAC;QAED,IACE,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,MAAM;YACvC,qBAAqB,IAAI,CAAC;YAC1B,8BAA8B,IAAI,CAAC,EACnC,CAAC;YACD,OAAO;QACT,CAAC;QAED,IACE,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,QAAQ;YACzC,qBAAqB,IAAI,CAAC;YAC1B,kCAAkC,IAAI,CAAC,EACvC,CAAC;YACD,OAAO;QACT,CAAC;QAED,MAAM,cAAc,GAAW,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACtE,MAAM,UAAU,GAAS,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAS,aAAa,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAE5D,MAAM,QAAQ,GAAwB,MAAM,cAAc,CAAC,MAAM,CAAC;YAChE,KAAK,EAAE;gBACL,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B;YACD,MAAM,EAAE;gBACN,GAAG,EAAE,IAAI;gBACT,0BAA0B,EAAE,IAAI;aACjC;YACD,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI;aACb;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvC,OAAO;QACT,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,EAAE,CAAA,EAAE,CAAC;gBACjB,SAAS;YACX,CAAC;YAED,MAAM,aAAa,GAAiB,MAAM,IAAI,CAAC,SAAS,CAAC;gBACvD,KAAK,EAAE;oBACL,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,SAAS,EAAE,OAAO,CAAC,EAAE;oBACrB,GAAG,EAAE,cAAc;iBACpB;gBACD,MAAM,EAAE;oBACN,GAAG,EAAE,IAAI;iBACV;gBACD,KAAK,EAAE;oBACL,MAAM,EAAE,IAAI;iBACb;aACF,CAAC,CAAC;YAEH,IAAI,aAAa,EAAE,CAAC;gBAClB,SAAS;YACX,CAAC;YAED,IAAI,cAAc,GAAW,CAAC,CAAC;YAE/B,IAAI,CAAC;gBACH,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC;oBAC5C,MAAM,SAAS,GAAmB,MAAM,WAAW,CAAC,OAAO,CAAC;wBAC1D,KAAK,EAAE;4BACL,SAAS,EAAE,IAAI,CAAC,SAAS;4BACzB,SAAS,EAAE,OAAO,CAAC,EAAE;4BACrB,SAAS,EAAE,oBAAoB,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC;yBAChE;wBACD,IAAI,EAAE,CAAC;wBACP,KAAK,EAAE,cAAc;wBACrB,KAAK,EAAE;4BACL,MAAM,EAAE,IAAI;yBACb;qBACF,CAAC,CAAC;oBAEH,MAAM,cAAc,GAClB,MAAM,wBAAwB,CAAC,OAAO,CAAC;wBACrC,KAAK,EAAE;4BACL,SAAS,EAAE,IAAI,CAAC,SAAS;4BACzB,SAAS,EAAE,OAAO,CAAC,EAAE;4BACrB,IAAI,EAAE,oBAAoB,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC;yBAC3D;wBACD,IAAI,EAAE,CAAC;wBACP,KAAK,EAAE,cAAc;wBACrB,KAAK,EAAE;4BACL,MAAM,EAAE,IAAI;yBACb;qBACF,CAAC,CAAC;oBAEL,MAAM,cAAc,GAAW,SAAS,CAAC,QAAQ,EAAE,CAAC;oBACpD,MAAM,mBAAmB,GAAW,cAAc,CAAC,QAAQ,EAAE,CAAC;oBAE9D,IAAI,cAAc,IAAI,CAAC,IAAI,mBAAmB,IAAI,CAAC,EAAE,CAAC;wBACpD,SAAS;oBACX,CAAC;oBAED,cAAc;wBACZ,cAAc,GAAG,qBAAqB;4BACtC,mBAAmB,GAAG,8BAA8B,CAAC;gBACzD,CAAC;qBAAM,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,IAAI,EAAE,CAAC;oBACjD,MAAM,KAAK,GAAmB,MAAM,UAAU,CAAC,OAAO,CAAC;wBACrD,KAAK,EAAE;4BACL,SAAS,EAAE,IAAI,CAAC,SAAS;4BACzB,SAAS,EAAE,OAAO,CAAC,EAAE;4BACrB,IAAI,EAAE,oBAAoB,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC;yBAC3D;wBACD,IAAI,EAAE,CAAC;wBACP,KAAK,EAAE,cAAc;wBACrB,KAAK,EAAE;4BACL,MAAM,EAAE,IAAI;yBACb;qBACF,CAAC,CAAC;oBAEH,MAAM,aAAa,GAAW,KAAK,CAAC,QAAQ,EAAE,CAAC;oBAE/C,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;wBACvB,SAAS;oBACX,CAAC;oBAED,cAAc,GAAG,aAAa,GAAG,qBAAqB,CAAC;gBACzD,CAAC;qBAAM,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,OAAO,EAAE,CAAC;oBACpD,MAAM,KAAK,GAAmB,MAAM,aAAa,CAAC,OAAO,CAAC;wBACxD,KAAK,EAAE;4BACL,SAAS,EAAE,IAAI,CAAC,SAAS;4BACzB,SAAS,EAAE,OAAO,CAAC,EAAE;4BACrB,IAAI,EAAE,oBAAoB,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC;yBAC3D;wBACD,IAAI,EAAE,CAAC;wBACP,KAAK,EAAE,cAAc;wBACrB,KAAK,EAAE;4BACL,MAAM,EAAE,IAAI;yBACb;qBACF,CAAC,CAAC;oBAEH,MAAM,aAAa,GAAW,KAAK,CAAC,QAAQ,EAAE,CAAC;oBAE/C,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;wBACvB,SAAS;oBACX,CAAC;oBAED,cAAc,GAAG,aAAa,GAAG,qBAAqB,CAAC;gBACzD,CAAC;qBAAM,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,QAAQ,EAAE,CAAC;oBACrD,MAAM,YAAY,GAAmB,MAAM,cAAc,CAAC,OAAO,CAAC;wBAChE,KAAK,EAAE;4BACL,SAAS,EAAE,IAAI,CAAC,SAAS;4BACzB,SAAS,EAAE,OAAO,CAAC,EAAE;4BACrB,SAAS,EAAE,oBAAoB,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC;yBAChE;wBACD,IAAI,EAAE,CAAC;wBACP,KAAK,EAAE,cAAc;wBACrB,KAAK,EAAE;4BACL,MAAM,EAAE,IAAI;yBACb;qBACF,CAAC,CAAC;oBAEH,MAAM,kBAAkB,GACtB,MAAM,oBAAoB,CAAC,OAAO,CAAC;wBACjC,KAAK,EAAE;4BACL,SAAS,EAAE,IAAI,CAAC,SAAS;4BACzB,SAAS,EAAE,OAAO,CAAC,EAAE;4BACrB,IAAI,EAAE,oBAAoB,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC;yBAC3D;wBACD,IAAI,EAAE,CAAC;wBACP,KAAK,EAAE,cAAc;wBACrB,KAAK,EAAE;4BACL,MAAM,EAAE,IAAI;yBACb;qBACF,CAAC,CAAC;oBAEL,MAAM,iBAAiB,GAAW,YAAY,CAAC,QAAQ,EAAE,CAAC;oBAC1D,MAAM,uBAAuB,GAAW,kBAAkB,CAAC,QAAQ,EAAE,CAAC;oBAEtE,IAAI,iBAAiB,IAAI,CAAC,IAAI,uBAAuB,IAAI,CAAC,EAAE,CAAC;wBAC3D,SAAS;oBACX,CAAC;oBAED,cAAc;wBACZ,iBAAiB,GAAG,qBAAqB;4BACzC,uBAAuB,GAAG,kCAAkC,CAAC;gBACjE,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CACV,iDAAiD,MAAA,OAAO,CAAC,EAAE,0CAAE,QAAQ,EAAE,GAAG,CAC3E,CAAC;gBACF,MAAM,CAAC,KAAK,CAAC,KAAc,CAAC,CAAC;gBAC7B,SAAS;YACX,CAAC;YAED,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;gBACxB,SAAS;YACX,CAAC;YAED,MAAM,kBAAkB,GAAW,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;YAEzE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,kBAAkB,IAAI,CAAC,EAAE,CAAC;gBACpE,SAAS;YACX,CAAC;YAED,MAAM,mBAAmB,GACvB,OAAO,CAAC,0BAA0B,IAAI,yBAAyB,CAAC;YAElE,MAAM,IAAI,CAAC,kBAAkB,CAAC;gBAC5B,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,gBAAgB,EAAE,kBAAkB;gBACpC,eAAe,EAAE,mBAAmB;gBACpC,SAAS,EAAE,SAAS;aACrB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAGY,AAAN,KAAK,CAAC,kBAAkB,CAAC,IAO/B;;QACC,IACE,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,MAAM;YACvC,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,OAAO;YACxC,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,IAAI;YACrC,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,QAAQ,EACzC,CAAC;YACD,MAAM,IAAI,gBAAgB,CACxB,oDAAoD,CACrD,CAAC;QACJ,CAAC;QAED,MAAM,iBAAiB,GACrB,eAAe,CAAC,2BAA2B,CACzC,IAAI,CAAC,WAAW,CACO,CAAC;QAE5B,MAAM,SAAS,GAAS,IAAI,CAAC,SAAS;YACpC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;YAC1C,CAAC,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;QAEnC,MAAM,cAAc,GAAW,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAEtE,MAAM,6BAA6B,GACjC,iBAAiB,CAAC,iBAAiB,CAAC;YAClC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,eAAe,EAAE,IAAI,CAAC,eAAe;SACtC,CAAC,CAAC;QAEL,MAAM,YAAY,GAAiB,MAAM,IAAI,CAAC,SAAS,CAAC;YACtD,KAAK,EAAE;gBACL,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,2BAA2B,EAAE,KAAK;gBAClC,GAAG,EAAE,cAAc;aACpB;YACD,MAAM,EAAE;gBACN,GAAG,EAAE,IAAI;gBACT,gBAAgB,EAAE,IAAI;gBACtB,cAAc,EAAE,IAAI;aACrB;YACD,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI;aACb;YACD,IAAI,EAAE;gBACJ,SAAS,EAAE,SAAS,CAAC,UAAU;aAChC;SACF,CAAC,CAAC;QAEH,IAAI,YAAY,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC;YACpC,IAAI,cAAc,GAAW,CAAA,MAAA,YAAY,CAAC,cAAc,0CAAE,KAAK,KAAI,CAAC,CAAC;YAErE,IACE,KAAK,CAAC,cAAc,CAAC;gBACrB,cAAc,KAAK,SAAS;gBAC5B,cAAc,KAAK,IAAI;gBACvB,CAAC,OAAO,cAAc,KAAK,QAAQ,IAAI,cAAc,KAAK,KAAK,CAAC,EAChE,CAAC;gBACD,cAAc,GAAG,CAAC,CAAC;YACrB,CAAC;YAED,MAAM,IAAI,CAAC,aAAa,CAAC;gBACvB,EAAE,EAAE,YAAY,CAAC,EAAE;gBACnB,IAAI,EAAE;oBACJ,gBAAgB,EAAE,IAAI,OAAO,CAC3B,CAAC,CAAA,MAAA,YAAY,CAAC,gBAAgB,0CAAE,KAAK,KAAI,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CACpE;oBACD,cAAc,EAAE,IAAI,OAAO,CACzB,cAAc,GAAG,6BAA6B,CAC/C;oBACD,0BAA0B,EAAE,IAAI,CAAC,eAAe;iBACjD;gBACD,KAAK,EAAE;oBACL,MAAM,EAAE,IAAI;iBACb;aACF,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,YAAY,GAAU,IAAI,KAAK,EAAE,CAAC;YACxC,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACxC,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YAC5C,YAAY,CAAC,gBAAgB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACnE,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACxC,YAAY,CAAC,0BAA0B,GAAG,IAAI,CAAC,eAAe,CAAC;YAC/D,YAAY,CAAC,2BAA2B,GAAG,KAAK,CAAC;YACjD,YAAY,CAAC,SAAS,GAAG,SAAS,CAAC;YAEnC,YAAY,CAAC,GAAG,GAAG,cAAc,CAAC;YAElC,YAAY,CAAC,cAAc,GAAG,IAAI,OAAO,CAAC,6BAA6B,CAAC,CAAC;YAEzE,MAAM,IAAI,CAAC,MAAM,CAAC;gBAChB,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE;oBACL,MAAM,EAAE,IAAI;iBACb;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,2BAA2B,CAAC,WAAwB;;QAC1D,MAAM,YAAY,GAAW,IAAI,CAAC;QAElC,0EAA0E;QAC1E,IACE,WAAW,KAAK,WAAW,CAAC,MAAM;YAClC,WAAW,KAAK,WAAW,CAAC,IAAI;YAChC,WAAW,KAAK,WAAW,CAAC,OAAO;YACnC,WAAW,KAAK,WAAW,CAAC,QAAQ,EACpC,CAAC;YACD,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,MAAM,KAAK,GACT,MAAA;YACE,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,yBAAyB;YAC/C,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,wBAAwB;YAC5C,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,2BAA2B;YAClD,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,4BAA4B;SACrD,CAAC,WAAW,CAAC,mCAAI,YAAY,CAAC;QAEjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YAC1C,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,0BAA0B;QAChC,MAAM,YAAY,GAAW,IAAI,CAAC;QAElC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,8BAA8B,CAAC,EAAE,CAAC;YACrD,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,IAAI,8BAA8B,IAAI,CAAC,EAAE,CAAC;YACxC,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,OAAO,8BAA8B,CAAC;IACxC,CAAC;IAEO,8BAA8B;QACpC,MAAM,YAAY,GAAW,GAAG,CAAC;QAEjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,kCAAkC,CAAC,EAAE,CAAC;YACzD,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,IAAI,kCAAkC,IAAI,CAAC,EAAE,CAAC;YAC5C,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,OAAO,kCAAkC,CAAC;IAC5C,CAAC;CACF;AAjbc;IADZ,WAAW,EAAE;;;;wDAqBb;AAGY;IADZ,WAAW,EAAE;;;;4DAsPb;AAGY;IADZ,WAAW,EAAE;;;;iDA0Gb;AA2DH,eAAe,IAAI,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"TelemetryUsageBillingService.js","sourceRoot":"","sources":["../../../../Server/Services/TelemetryUsageBillingService.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAE/E,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,SAAS,MAAM,oCAAoC,CAAC;AAC3D,OAAO,SAAS,MAAM,+BAA+B,CAAC;AACtD,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAC7C,OAAO,OAAO,MAAM,qBAAqB,CAAC;AAC1C,OAAO,gBAAgB,MAAM,wCAAwC,CAAC;AACtE,OAAO,WAAW,MAAM,qCAAqC,CAAC;AAC9D,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,KAAK,EAAE,EACZ,yBAAyB,GAC1B,MAAM,mDAAmD,CAAC;AAC3D,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAE9C,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAClE,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAC1D,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAErC,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAIlE,OAAO,WAAW,MAAM,mCAAmC,CAAC;AAC5D,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,2BAA2B,EAC3B,8BAA8B,EAC9B,4BAA4B,EAC5B,kCAAkC,EAClC,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,WAAW,MAAM,gCAAgC,CAAC;AAEzD,MAAM,OAAO,OAAQ,SAAQ,eAAsB;IACjD;QACE,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,gBAAgB,EAAE,CAAC;YACrB,IAAI,CAAC,8BAA8B,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAGY,AAAN,KAAK,CAAC,yBAAyB,CAAC,IAGtC;QACC,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC;YACvB,KAAK,EAAE;gBACL,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,2BAA2B,EAAE,KAAK;aACnC;YACD,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,SAAS,EAAE,uDAAuD;YACzE,MAAM,EAAE;gBACN,GAAG,EAAE,IAAI;gBACT,cAAc,EAAE,IAAI;aACrB;YACD,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI;aACb;SACF,CAAC,CAAC;IACL,CAAC;IAGY,AAAN,KAAK,CAAC,6BAA6B,CAAC,IAI1C;;QACC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAS,IAAI,CAAC,SAAS;YACpC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;YAC1C,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,aAAa,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAEpE,MAAM,qBAAqB,GAAW,IAAI,CAAC,2BAA2B,CACpE,IAAI,CAAC,WAAW,CACjB,CAAC;QACF,MAAM,8BAA8B,GAClC,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAEpC,MAAM,kCAAkC,GACtC,IAAI,CAAC,8BAA8B,EAAE,CAAC;QAExC,IACE,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,MAAM;YACvC,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,QAAQ;YACzC,qBAAqB,IAAI,CAAC,EAC1B,CAAC;YACD,OAAO;QACT,CAAC;QAED,IACE,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,MAAM;YACvC,qBAAqB,IAAI,CAAC;YAC1B,8BAA8B,IAAI,CAAC,EACnC,CAAC;YACD,OAAO;QACT,CAAC;QAED,IACE,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,QAAQ;YACzC,qBAAqB,IAAI,CAAC;YAC1B,kCAAkC,IAAI,CAAC,EACvC,CAAC;YACD,OAAO;QACT,CAAC;QAED,MAAM,cAAc,GAAW,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACtE,MAAM,UAAU,GAAS,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAS,aAAa,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAgB5D,MAAM,gBAAgB,GAA8B,IAAI,GAAG,EAAE,CAAC;QAE9D,MAAM,QAAQ,GAQF,CACV,IAKE,EACF,sBAA8B,EACxB,EAAE;YACR,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,KAAK,GACT,GAAG,CAAC,cAAc,GAAG,CAAC;oBACpB,CAAC,CAAC,GAAG,CAAC,cAAc;oBACpB,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,sBAAsB,CAAC;gBAC5C,MAAM,QAAQ,GAA6B,gBAAgB,CAAC,GAAG,CAC7D,GAAG,CAAC,SAAS,CACd,CAAC;gBACF,IAAI,QAAQ,EAAE,CAAC;oBACb,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAC;oBACxB,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;wBAC7C,QAAQ,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;oBACzC,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE;wBAClC,WAAW,EAAE,GAAG,CAAC,WAAW;wBAC5B,KAAK;qBACN,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC;gBAC5C,QAAQ,CACN,MAAM,WAAW,CAAC,4BAA4B,CAAC;oBAC7C,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,mBAAmB,EAAE,WAAW;oBAChC,SAAS,EAAE,UAAU;oBACrB,OAAO,EAAE,QAAQ;iBAClB,CAAC,EACF,qBAAqB,CACtB,CAAC;gBACF,QAAQ,CACN,MAAM,wBAAwB,CAAC,4BAA4B,CAAC;oBAC1D,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,mBAAmB,EAAE,MAAM;oBAC3B,SAAS,EAAE,UAAU;oBACrB,OAAO,EAAE,QAAQ;iBAClB,CAAC,EACF,8BAA8B,CAC/B,CAAC;YACJ,CAAC;iBAAM,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,IAAI,EAAE,CAAC;gBACjD,QAAQ,CACN,MAAM,UAAU,CAAC,4BAA4B,CAAC;oBAC5C,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,mBAAmB,EAAE,MAAM;oBAC3B,SAAS,EAAE,UAAU;oBACrB,OAAO,EAAE,QAAQ;iBAClB,CAAC,EACF,qBAAqB,CACtB,CAAC;YACJ,CAAC;iBAAM,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,OAAO,EAAE,CAAC;gBACpD,QAAQ,CACN,MAAM,aAAa,CAAC,4BAA4B,CAAC;oBAC/C,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,mBAAmB,EAAE,MAAM;oBAC3B,SAAS,EAAE,UAAU;oBACrB,OAAO,EAAE,QAAQ;iBAClB,CAAC,EACF,qBAAqB,CACtB,CAAC;YACJ,CAAC;iBAAM,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,QAAQ,EAAE,CAAC;gBACrD,QAAQ,CACN,MAAM,cAAc,CAAC,4BAA4B,CAAC;oBAChD,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,mBAAmB,EAAE,WAAW;oBAChC,SAAS,EAAE,UAAU;oBACrB,OAAO,EAAE,QAAQ;iBAClB,CAAC,EACF,qBAAqB,CACtB,CAAC;gBACF,QAAQ,CACN,MAAM,oBAAoB,CAAC,4BAA4B,CAAC;oBACtD,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,mBAAmB,EAAE,MAAM;oBAC3B,SAAS,EAAE,UAAU;oBACrB,OAAO,EAAE,QAAQ;iBAClB,CAAC,EACF,kCAAkC,CACnC,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CACV,mDAAmD,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,WAAW,IAAI,CACtG,CAAC;YACF,MAAM,CAAC,KAAK,CAAC,KAAc,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,IAAI,gBAAgB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO;QACT,CAAC;QAED;;;;;WAKG;QACH,MAAM,oBAAoB,GACxB,MAAM,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxD,MAAM,6BAA6B,GACjC,MAAM,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE9D;;;;WAIG;QACH,MAAM,aAAa,GAAiB,MAAM,IAAI,CAAC,MAAM,CAAC;YACpD,KAAK,EAAE;gBACL,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,GAAG,EAAE,cAAc;aACpB;YACD,MAAM,EAAE;gBACN,SAAS,EAAE,IAAI;aAChB;YACD,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI;aACb;SACF,CAAC,CAAC;QACH,MAAM,gBAAgB,GAAgB,IAAI,GAAG,CAC3C,aAAa;aACV,GAAG,CAAC,CAAC,GAAU,EAAE,EAAE;;YAClB,OAAO,MAAA,GAAG,CAAC,SAAS,0CAAE,QAAQ,EAAE,CAAC;QACnC,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,EAAsB,EAAgB,EAAE;YAC/C,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC,CAAC,CACL,CAAC;QAEF,KAAK,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,gBAAgB,EAAE,CAAC;YACrD;;;;eAIG;YACH,IACE,KAAK,CAAC,WAAW,KAAK,WAAW,CAAC,OAAO;gBACzC,KAAK,CAAC,WAAW,KAAK,WAAW,CAAC,KAAK;gBACvC,KAAK,CAAC,WAAW,KAAK,WAAW,CAAC,QAAQ,EAC1C,CAAC;gBACD,SAAS;YACX,CAAC;YAED,IAAI,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;gBACvC,SAAS;YACX,CAAC;YAED,MAAM,kBAAkB,GAAW,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACtE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,kBAAkB,IAAI,CAAC,EAAE,CAAC;gBACpE,SAAS;YACX,CAAC;YAED,MAAM,eAAe,GACnB,MAAA,oBAAoB,CAAC,GAAG,CAAC,YAAY,CAAC,mCAAI,6BAA6B,CAAC;YAE1E;;;;eAIG;YACH,MAAM,WAAW,GACf,MAAC,KAAK,CAAC,WAAkC,mCAAI,WAAW,CAAC,aAAa,CAAC;YAEzE,MAAM,IAAI,CAAC,kBAAkB,CAAC;gBAC5B,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,SAAS,EAAE,IAAI,QAAQ,CAAC,YAAY,CAAC;gBACrC,WAAW,EAAE,WAAW;gBACxB,gBAAgB,EAAE,kBAAkB;gBACpC,eAAe,EAAE,eAAe;gBAChC,SAAS,EAAE,SAAS;aACrB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IAEW,AAAN,KAAK,CAAC,0BAA0B,CACtC,SAAmB;QAEnB,MAAM,oBAAoB,GAAwB,IAAI,GAAG,EAAE,CAAC;QAE5D,MAAM,QAAQ,GAAwB,MAAM,cAAc,CAAC,MAAM,CAAC;YAChE,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE;YAC/B,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE;YACvD,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;SACxB,CAAC,CAAC;QACH,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,0BAA0B,EAAE,CAAC;gBACrD,oBAAoB,CAAC,GAAG,CACtB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,EACrB,OAAO,CAAC,0BAA0B,CACnC,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAgB,MAAM,WAAW,CAAC,MAAM,CAAC;YAClD,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE;YAC/B,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE;YACvD,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;SACxB,CAAC,CAAC;QACH,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,0BAA0B,EAAE,CAAC;gBAC/C,oBAAoB,CAAC,GAAG,CACtB,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,EAClB,IAAI,CAAC,0BAA0B,CAChC,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAAsB,MAAM,iBAAiB,CAAC,MAAM,CAAC;YACpE,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE;YAC/B,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE;YACvD,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;SACxB,CAAC,CAAC;QACH,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,IAAI,UAAU,CAAC,EAAE,IAAI,UAAU,CAAC,0BAA0B,EAAE,CAAC;gBAC3D,oBAAoB,CAAC,GAAG,CACtB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,EACxB,UAAU,CAAC,0BAA0B,CACtC,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GACZ,MAAM,wBAAwB,CAAC,MAAM,CAAC;YACpC,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE;YAC/B,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE;YACvD,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;SACxB,CAAC,CAAC;QACL,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,0BAA0B,EAAE,CAAC;gBACrD,oBAAoB,CAAC,GAAG,CACtB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,EACrB,OAAO,CAAC,0BAA0B,CACnC,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAGa,AAAN,KAAK,CAAC,gCAAgC,CAC5C,SAAmB;QAEnB,MAAM,OAAO,GAAmB,MAAM,cAAc,CAAC,WAAW,CAAC;YAC/D,EAAE,EAAE,SAAS;YACb,MAAM,EAAE,EAAE,+BAA+B,EAAE,IAAI,EAAE;YACjD,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;SACxB,CAAC,CAAC;QACH,OAAO,CACL,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,+BAA+B,KAAI,yBAAyB,CACtE,CAAC;IACJ,CAAC;IAGY,AAAN,KAAK,CAAC,kBAAkB,CAAC,IAQ/B;;QACC,IACE,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,MAAM;YACvC,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,OAAO;YACxC,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,IAAI;YACrC,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,QAAQ,EACzC,CAAC;YACD,MAAM,IAAI,gBAAgB,CACxB,oDAAoD,CACrD,CAAC;QACJ,CAAC;QAED,MAAM,iBAAiB,GACrB,eAAe,CAAC,2BAA2B,CACzC,IAAI,CAAC,WAAW,CACO,CAAC;QAE5B,MAAM,SAAS,GAAS,IAAI,CAAC,SAAS;YACpC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;YAC1C,CAAC,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;QAEnC,MAAM,cAAc,GAAW,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAEtE,MAAM,6BAA6B,GACjC,iBAAiB,CAAC,iBAAiB,CAAC;YAClC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,eAAe,EAAE,IAAI,CAAC,eAAe;SACtC,CAAC,CAAC;QAEL,MAAM,YAAY,GAAiB,MAAM,IAAI,CAAC,SAAS,CAAC;YACtD,KAAK,EAAE;gBACL,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,2BAA2B,EAAE,KAAK;gBAClC,GAAG,EAAE,cAAc;aACpB;YACD,MAAM,EAAE;gBACN,GAAG,EAAE,IAAI;gBACT,gBAAgB,EAAE,IAAI;gBACtB,cAAc,EAAE,IAAI;aACrB;YACD,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI;aACb;YACD,IAAI,EAAE;gBACJ,SAAS,EAAE,SAAS,CAAC,UAAU;aAChC;SACF,CAAC,CAAC;QAEH,IAAI,YAAY,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC;YACpC,IAAI,cAAc,GAAW,CAAA,MAAA,YAAY,CAAC,cAAc,0CAAE,KAAK,KAAI,CAAC,CAAC;YAErE,IACE,KAAK,CAAC,cAAc,CAAC;gBACrB,cAAc,KAAK,SAAS;gBAC5B,cAAc,KAAK,IAAI;gBACvB,CAAC,OAAO,cAAc,KAAK,QAAQ,IAAI,cAAc,KAAK,KAAK,CAAC,EAChE,CAAC;gBACD,cAAc,GAAG,CAAC,CAAC;YACrB,CAAC;YAED,MAAM,IAAI,CAAC,aAAa,CAAC;gBACvB,EAAE,EAAE,YAAY,CAAC,EAAE;gBACnB,IAAI,EAAE;oBACJ,gBAAgB,EAAE,IAAI,OAAO,CAC3B,CAAC,CAAA,MAAA,YAAY,CAAC,gBAAgB,0CAAE,KAAK,KAAI,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CACpE;oBACD,cAAc,EAAE,IAAI,OAAO,CACzB,cAAc,GAAG,6BAA6B,CAC/C;oBACD,0BAA0B,EAAE,IAAI,CAAC,eAAe;iBACjD;gBACD,KAAK,EAAE;oBACL,MAAM,EAAE,IAAI;iBACb;aACF,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,YAAY,GAAU,IAAI,KAAK,EAAE,CAAC;YACxC,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACxC,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YAC5C,YAAY,CAAC,gBAAgB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACnE,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACxC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YAC9C,CAAC;YACD,YAAY,CAAC,0BAA0B,GAAG,IAAI,CAAC,eAAe,CAAC;YAC/D,YAAY,CAAC,2BAA2B,GAAG,KAAK,CAAC;YACjD,YAAY,CAAC,SAAS,GAAG,SAAS,CAAC;YAEnC,YAAY,CAAC,GAAG,GAAG,cAAc,CAAC;YAElC,YAAY,CAAC,cAAc,GAAG,IAAI,OAAO,CAAC,6BAA6B,CAAC,CAAC;YAEzE,MAAM,IAAI,CAAC,MAAM,CAAC;gBAChB,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE;oBACL,MAAM,EAAE,IAAI;iBACb;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,2BAA2B,CAAC,WAAwB;;QAC1D,MAAM,YAAY,GAAW,IAAI,CAAC;QAElC,0EAA0E;QAC1E,IACE,WAAW,KAAK,WAAW,CAAC,MAAM;YAClC,WAAW,KAAK,WAAW,CAAC,IAAI;YAChC,WAAW,KAAK,WAAW,CAAC,OAAO;YACnC,WAAW,KAAK,WAAW,CAAC,QAAQ,EACpC,CAAC;YACD,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,MAAM,KAAK,GACT,MAAA;YACE,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,yBAAyB;YAC/C,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,wBAAwB;YAC5C,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,2BAA2B;YAClD,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,4BAA4B;SACrD,CAAC,WAAW,CAAC,mCAAI,YAAY,CAAC;QAEjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YAC1C,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,0BAA0B;QAChC,MAAM,YAAY,GAAW,IAAI,CAAC;QAElC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,8BAA8B,CAAC,EAAE,CAAC;YACrD,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,IAAI,8BAA8B,IAAI,CAAC,EAAE,CAAC;YACxC,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,OAAO,8BAA8B,CAAC;IACxC,CAAC;IAEO,8BAA8B;QACpC,MAAM,YAAY,GAAW,GAAG,CAAC;QAEjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,kCAAkC,CAAC,EAAE,CAAC;YACzD,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,IAAI,kCAAkC,IAAI,CAAC,EAAE,CAAC;YAC5C,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,OAAO,kCAAkC,CAAC;IAC5C,CAAC;CACF;AAriBc;IADZ,WAAW,EAAE;;;;wDAqBb;AAGY;IADZ,WAAW,EAAE;;;;4DAuQb;AAUa;IADb,WAAW,EAAE;;qCAED,QAAQ;;yDAsEpB;AAGa;IADb,WAAW,EAAE;;qCAED,QAAQ;;+DAUpB;AAGY;IADZ,WAAW,EAAE;;;;iDA8Gb;AA2DH,eAAe,IAAI,OAAO,EAAE,CAAC"}
@@ -439,6 +439,20 @@ export default class ModelPermission {
439
439
  allowedResourceIds.add(id);
440
440
  }
441
441
  }
442
+ /*
443
+ * Telemetry with no owning resource (the unattributed "Unknown"
444
+ * bucket) is tagged with the projectId in place of a resource id. It
445
+ * belongs to the project, not any owner, so an Owned-scoped user
446
+ * (project-level catch-all access) sees it. Gated on hasOwnedGrant:
447
+ * a purely Labels-scoped user asked for label-matching telemetry, and
448
+ * the unattributed bucket carries no labels, so it stays excluded for
449
+ * them.
450
+ */
451
+ if (hasOwnedGrant &&
452
+ model.ownedThrough.includeProjectScope &&
453
+ props.tenantId) {
454
+ allowedResourceIds.add(props.tenantId.toString());
455
+ }
442
456
  const fkColumn = model.ownedThrough.fkColumn;
443
457
  const idList = allowedResourceIds.size > 0
444
458
  ? Array.from(allowedResourceIds)
@@ -466,40 +480,51 @@ export default class ModelPermission {
466
480
  const ownerTableRegistry =
467
481
  // eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires
468
482
  require("../Database/Permissions/OwnerTableRegistry").default;
469
- const serviceEntry = ownerTableRegistry.get("Service");
470
- if (!serviceEntry) {
471
- cache.ownedIds = result;
472
- return result;
473
- }
474
- if (props.userId) {
475
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
476
- const userOwnedRows = await serviceEntry.ownerUserService.findBy({
477
- query: Object.assign({ userId: props.userId }, (props.tenantId ? { projectId: props.tenantId } : {})),
478
- select: { serviceId: true },
479
- props: { isRoot: true },
480
- skip: 0,
481
- limit: LIMIT_MAX,
482
- });
483
- for (const row of userOwnedRows) {
484
- const id = row.serviceId;
485
- if (id) {
486
- result.add(id.toString());
483
+ /*
484
+ * Telemetry serviceId is polymorphic — it can reference any resource
485
+ * type flagged `canOwnTelemetry` in the registry (Service, Monitor,
486
+ * Host, DockerHost, KubernetesCluster). Resolve ownership across all of
487
+ * them so a user who owns any such resource sees its telemetry, not
488
+ * just owned Services. The polymorphic set lives only in the registry
489
+ * (single source of truth); the resolved union is the same for every
490
+ * telemetry analytics model, so the single per-request `ownedIds`
491
+ * cache slot still holds it.
492
+ */
493
+ for (const entry of ownerTableRegistry.values()) {
494
+ if (!entry.canOwnTelemetry) {
495
+ continue;
496
+ }
497
+ const fkColumn = entry.fkColumn;
498
+ if (props.userId) {
499
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
500
+ const userOwnedRows = await entry.ownerUserService.findBy({
501
+ query: Object.assign({ userId: props.userId }, (props.tenantId ? { projectId: props.tenantId } : {})),
502
+ select: { [fkColumn]: true },
503
+ props: { isRoot: true },
504
+ skip: 0,
505
+ limit: LIMIT_MAX,
506
+ });
507
+ for (const row of userOwnedRows) {
508
+ const id = row[fkColumn];
509
+ if (id) {
510
+ result.add(id.toString());
511
+ }
487
512
  }
488
513
  }
489
- }
490
- if (props.userTeamIds && props.userTeamIds.length > 0) {
491
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
492
- const teamOwnedRows = await serviceEntry.ownerTeamService.findBy({
493
- query: Object.assign({ teamId: QueryHelper.any(props.userTeamIds) }, (props.tenantId ? { projectId: props.tenantId } : {})),
494
- select: { serviceId: true },
495
- props: { isRoot: true },
496
- skip: 0,
497
- limit: LIMIT_MAX,
498
- });
499
- for (const row of teamOwnedRows) {
500
- const id = row.serviceId;
501
- if (id) {
502
- result.add(id.toString());
514
+ if (props.userTeamIds && props.userTeamIds.length > 0) {
515
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
516
+ const teamOwnedRows = await entry.ownerTeamService.findBy({
517
+ query: Object.assign({ teamId: QueryHelper.any(props.userTeamIds) }, (props.tenantId ? { projectId: props.tenantId } : {})),
518
+ select: { [fkColumn]: true },
519
+ props: { isRoot: true },
520
+ skip: 0,
521
+ limit: LIMIT_MAX,
522
+ });
523
+ for (const row of teamOwnedRows) {
524
+ const id = row[fkColumn];
525
+ if (id) {
526
+ result.add(id.toString());
527
+ }
503
528
  }
504
529
  }
505
530
  }
@@ -535,41 +560,37 @@ export default class ModelPermission {
535
560
  if (cached) {
536
561
  return cached;
537
562
  }
538
- const ServiceService =
539
- // eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires
540
- require("../../Services/ServiceService").default;
541
- const MonitorService =
542
- // eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires
543
- require("../../Services/MonitorService").default;
544
563
  const tenantFilter = props.tenantId
545
564
  ? { projectId: props.tenantId }
546
565
  : {};
547
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
548
- const serviceRows = await ServiceService.findBy({
549
- query: Object.assign({ labels: labelIds }, tenantFilter),
550
- select: { _id: true },
551
- props: { isRoot: true },
552
- skip: 0,
553
- limit: LIMIT_MAX,
554
- });
555
- for (const row of serviceRows) {
556
- const id = row._id;
557
- if (id) {
558
- result.add(id.toString());
566
+ const ownerTableRegistry =
567
+ // eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires
568
+ require("../Database/Permissions/OwnerTableRegistry").default;
569
+ /*
570
+ * Telemetry serviceId is polymorphic across every resource type
571
+ * flagged `canOwnTelemetry` in the registry (Service, Monitor, Host,
572
+ * DockerHost, KubernetesCluster), each of which carries labels. Find
573
+ * rows of each whose labels intersect the user's. Keeping this set in
574
+ * the registry (single source of truth) means a new telemetry-owning
575
+ * resource is picked up here automatically — no edits needed.
576
+ */
577
+ for (const entry of ownerTableRegistry.values()) {
578
+ if (!entry.canOwnTelemetry || !entry.modelService) {
579
+ continue;
559
580
  }
560
- }
561
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
562
- const monitorRows = await MonitorService.findBy({
563
- query: Object.assign({ labels: labelIds }, tenantFilter),
564
- select: { _id: true },
565
- props: { isRoot: true },
566
- skip: 0,
567
- limit: LIMIT_MAX,
568
- });
569
- for (const row of monitorRows) {
570
- const id = row._id;
571
- if (id) {
572
- result.add(id.toString());
581
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
582
+ const rows = await entry.modelService.findBy({
583
+ query: Object.assign({ labels: labelIds }, tenantFilter),
584
+ select: { _id: true },
585
+ props: { isRoot: true },
586
+ skip: 0,
587
+ limit: LIMIT_MAX,
588
+ });
589
+ for (const row of rows) {
590
+ const id = row._id;
591
+ if (id) {
592
+ result.add(id.toString());
593
+ }
573
594
  }
574
595
  }
575
596
  cache.labeledIds.set(cacheKey, result);