@oneuptime/common 10.0.93 → 10.0.96

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 (139) hide show
  1. package/Models/DatabaseModels/DockerResource.ts +497 -0
  2. package/Models/DatabaseModels/Index.ts +2 -0
  3. package/Models/DatabaseModels/Monitor.ts +83 -0
  4. package/Server/API/MonitorTemplateAPI.ts +182 -0
  5. package/Server/Infrastructure/Postgres/SchemaMigrations/1777933061000-MigrationName.ts +41 -0
  6. package/Server/Infrastructure/Postgres/SchemaMigrations/1777972687018-MigrationName.ts +69 -0
  7. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +4 -0
  8. package/Server/Services/BillingInvoiceService.ts +18 -29
  9. package/Server/Services/DockerResourceService.ts +310 -0
  10. package/Server/Services/MonitorTemplateService.ts +367 -0
  11. package/Server/Utils/VM/VMRunner.ts +62 -0
  12. package/Types/Dashboard/DashboardComponentType.ts +13 -0
  13. package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +16 -0
  14. package/Types/Dashboard/DashboardComponents/DashboardAlertListComponent.ts +4 -0
  15. package/Types/Dashboard/DashboardComponents/DashboardDockerContainerListComponent.ts +15 -0
  16. package/Types/Dashboard/DashboardComponents/DashboardDockerHostListComponent.ts +14 -0
  17. package/Types/Dashboard/DashboardComponents/DashboardDockerImageListComponent.ts +15 -0
  18. package/Types/Dashboard/DashboardComponents/DashboardDockerNetworkListComponent.ts +14 -0
  19. package/Types/Dashboard/DashboardComponents/DashboardDockerVolumeListComponent.ts +14 -0
  20. package/Types/Dashboard/DashboardComponents/DashboardIncidentListComponent.ts +4 -0
  21. package/Types/Dashboard/DashboardComponents/DashboardKubernetesCronJobListComponent.ts +15 -0
  22. package/Types/Dashboard/DashboardComponents/DashboardKubernetesDaemonSetListComponent.ts +15 -0
  23. package/Types/Dashboard/DashboardComponents/DashboardKubernetesDeploymentListComponent.ts +15 -0
  24. package/Types/Dashboard/DashboardComponents/DashboardKubernetesJobListComponent.ts +15 -0
  25. package/Types/Dashboard/DashboardComponents/DashboardKubernetesNamespaceListComponent.ts +14 -0
  26. package/Types/Dashboard/DashboardComponents/DashboardKubernetesNodeListComponent.ts +15 -0
  27. package/Types/Dashboard/DashboardComponents/DashboardKubernetesPodListComponent.ts +16 -0
  28. package/Types/Dashboard/DashboardComponents/DashboardKubernetesStatefulSetListComponent.ts +15 -0
  29. package/Types/Dashboard/DashboardComponents/DashboardMonitorListComponent.ts +3 -0
  30. package/Types/Docker/DockerInventoryExtractor.ts +343 -0
  31. package/Utils/Dashboard/Components/DashboardAlertListComponent.ts +47 -2
  32. package/Utils/Dashboard/Components/DashboardDockerContainerListComponent.ts +93 -0
  33. package/Utils/Dashboard/Components/DashboardDockerHostListComponent.ts +83 -0
  34. package/Utils/Dashboard/Components/DashboardDockerImageListComponent.ts +92 -0
  35. package/Utils/Dashboard/Components/DashboardDockerNetworkListComponent.ts +82 -0
  36. package/Utils/Dashboard/Components/DashboardDockerVolumeListComponent.ts +82 -0
  37. package/Utils/Dashboard/Components/DashboardIncidentListComponent.ts +47 -2
  38. package/Utils/Dashboard/Components/DashboardKubernetesCronJobListComponent.ts +36 -0
  39. package/Utils/Dashboard/Components/DashboardKubernetesDaemonSetListComponent.ts +36 -0
  40. package/Utils/Dashboard/Components/DashboardKubernetesDeploymentListComponent.ts +36 -0
  41. package/Utils/Dashboard/Components/DashboardKubernetesJobListComponent.ts +34 -0
  42. package/Utils/Dashboard/Components/DashboardKubernetesNamespaceListComponent.ts +36 -0
  43. package/Utils/Dashboard/Components/DashboardKubernetesNodeListComponent.ts +57 -0
  44. package/Utils/Dashboard/Components/DashboardKubernetesPodListComponent.ts +60 -0
  45. package/Utils/Dashboard/Components/DashboardKubernetesResourceListShared.ts +75 -0
  46. package/Utils/Dashboard/Components/DashboardKubernetesStatefulSetListComponent.ts +36 -0
  47. package/Utils/Dashboard/Components/DashboardMonitorListComponent.ts +59 -2
  48. package/Utils/Dashboard/Components/Index.ts +102 -0
  49. package/build/dist/Models/DatabaseModels/DockerResource.js +525 -0
  50. package/build/dist/Models/DatabaseModels/DockerResource.js.map +1 -0
  51. package/build/dist/Models/DatabaseModels/Index.js +2 -0
  52. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  53. package/build/dist/Models/DatabaseModels/Monitor.js +82 -0
  54. package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
  55. package/build/dist/Server/API/MonitorTemplateAPI.js +108 -0
  56. package/build/dist/Server/API/MonitorTemplateAPI.js.map +1 -0
  57. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1777933061000-MigrationName.js +20 -0
  58. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1777933061000-MigrationName.js.map +1 -0
  59. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1777972687018-MigrationName.js +30 -0
  60. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1777972687018-MigrationName.js.map +1 -0
  61. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +4 -0
  62. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  63. package/build/dist/Server/Services/BillingInvoiceService.js +22 -25
  64. package/build/dist/Server/Services/BillingInvoiceService.js.map +1 -1
  65. package/build/dist/Server/Services/DockerResourceService.js +196 -0
  66. package/build/dist/Server/Services/DockerResourceService.js.map +1 -0
  67. package/build/dist/Server/Services/MonitorTemplateService.js +297 -0
  68. package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
  69. package/build/dist/Server/Utils/VM/VMRunner.js +61 -0
  70. package/build/dist/Server/Utils/VM/VMRunner.js.map +1 -1
  71. package/build/dist/Types/Dashboard/DashboardComponentType.js +13 -0
  72. package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
  73. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +15 -0
  74. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
  75. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerContainerListComponent.js +2 -0
  76. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerContainerListComponent.js.map +1 -0
  77. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerHostListComponent.js +2 -0
  78. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerHostListComponent.js.map +1 -0
  79. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerImageListComponent.js +2 -0
  80. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerImageListComponent.js.map +1 -0
  81. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerNetworkListComponent.js +2 -0
  82. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerNetworkListComponent.js.map +1 -0
  83. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerVolumeListComponent.js +2 -0
  84. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerVolumeListComponent.js.map +1 -0
  85. package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesCronJobListComponent.js +2 -0
  86. package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesCronJobListComponent.js.map +1 -0
  87. package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesDaemonSetListComponent.js +2 -0
  88. package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesDaemonSetListComponent.js.map +1 -0
  89. package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesDeploymentListComponent.js +2 -0
  90. package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesDeploymentListComponent.js.map +1 -0
  91. package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesJobListComponent.js +2 -0
  92. package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesJobListComponent.js.map +1 -0
  93. package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesNamespaceListComponent.js +2 -0
  94. package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesNamespaceListComponent.js.map +1 -0
  95. package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesNodeListComponent.js +2 -0
  96. package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesNodeListComponent.js.map +1 -0
  97. package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesPodListComponent.js +2 -0
  98. package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesPodListComponent.js.map +1 -0
  99. package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesStatefulSetListComponent.js +2 -0
  100. package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesStatefulSetListComponent.js.map +1 -0
  101. package/build/dist/Types/Docker/DockerInventoryExtractor.js +293 -0
  102. package/build/dist/Types/Docker/DockerInventoryExtractor.js.map +1 -0
  103. package/build/dist/Utils/Dashboard/Components/DashboardAlertListComponent.js +43 -3
  104. package/build/dist/Utils/Dashboard/Components/DashboardAlertListComponent.js.map +1 -1
  105. package/build/dist/Utils/Dashboard/Components/DashboardDockerContainerListComponent.js +75 -0
  106. package/build/dist/Utils/Dashboard/Components/DashboardDockerContainerListComponent.js.map +1 -0
  107. package/build/dist/Utils/Dashboard/Components/DashboardDockerHostListComponent.js +69 -0
  108. package/build/dist/Utils/Dashboard/Components/DashboardDockerHostListComponent.js.map +1 -0
  109. package/build/dist/Utils/Dashboard/Components/DashboardDockerImageListComponent.js +75 -0
  110. package/build/dist/Utils/Dashboard/Components/DashboardDockerImageListComponent.js.map +1 -0
  111. package/build/dist/Utils/Dashboard/Components/DashboardDockerNetworkListComponent.js +66 -0
  112. package/build/dist/Utils/Dashboard/Components/DashboardDockerNetworkListComponent.js.map +1 -0
  113. package/build/dist/Utils/Dashboard/Components/DashboardDockerVolumeListComponent.js +66 -0
  114. package/build/dist/Utils/Dashboard/Components/DashboardDockerVolumeListComponent.js.map +1 -0
  115. package/build/dist/Utils/Dashboard/Components/DashboardIncidentListComponent.js +43 -3
  116. package/build/dist/Utils/Dashboard/Components/DashboardIncidentListComponent.js.map +1 -1
  117. package/build/dist/Utils/Dashboard/Components/DashboardKubernetesCronJobListComponent.js +29 -0
  118. package/build/dist/Utils/Dashboard/Components/DashboardKubernetesCronJobListComponent.js.map +1 -0
  119. package/build/dist/Utils/Dashboard/Components/DashboardKubernetesDaemonSetListComponent.js +29 -0
  120. package/build/dist/Utils/Dashboard/Components/DashboardKubernetesDaemonSetListComponent.js.map +1 -0
  121. package/build/dist/Utils/Dashboard/Components/DashboardKubernetesDeploymentListComponent.js +29 -0
  122. package/build/dist/Utils/Dashboard/Components/DashboardKubernetesDeploymentListComponent.js.map +1 -0
  123. package/build/dist/Utils/Dashboard/Components/DashboardKubernetesJobListComponent.js +29 -0
  124. package/build/dist/Utils/Dashboard/Components/DashboardKubernetesJobListComponent.js.map +1 -0
  125. package/build/dist/Utils/Dashboard/Components/DashboardKubernetesNamespaceListComponent.js +29 -0
  126. package/build/dist/Utils/Dashboard/Components/DashboardKubernetesNamespaceListComponent.js.map +1 -0
  127. package/build/dist/Utils/Dashboard/Components/DashboardKubernetesNodeListComponent.js +44 -0
  128. package/build/dist/Utils/Dashboard/Components/DashboardKubernetesNodeListComponent.js.map +1 -0
  129. package/build/dist/Utils/Dashboard/Components/DashboardKubernetesPodListComponent.js +47 -0
  130. package/build/dist/Utils/Dashboard/Components/DashboardKubernetesPodListComponent.js.map +1 -0
  131. package/build/dist/Utils/Dashboard/Components/DashboardKubernetesResourceListShared.js +55 -0
  132. package/build/dist/Utils/Dashboard/Components/DashboardKubernetesResourceListShared.js.map +1 -0
  133. package/build/dist/Utils/Dashboard/Components/DashboardKubernetesStatefulSetListComponent.js +29 -0
  134. package/build/dist/Utils/Dashboard/Components/DashboardKubernetesStatefulSetListComponent.js.map +1 -0
  135. package/build/dist/Utils/Dashboard/Components/DashboardMonitorListComponent.js +46 -3
  136. package/build/dist/Utils/Dashboard/Components/DashboardMonitorListComponent.js.map +1 -1
  137. package/build/dist/Utils/Dashboard/Components/Index.js +53 -0
  138. package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
  139. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"BillingInvoiceService.js","sourceRoot":"","sources":["../../../../Server/Services/BillingInvoiceService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BillingInvoiceService.js","sourceRoot":"","sources":["../../../../Server/Services/BillingInvoiceService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,196 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import DatabaseService from "./DatabaseService";
11
+ import Model from "../../Models/DatabaseModels/DockerResource";
12
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
13
+ import OneUptimeDate from "../../Types/Date";
14
+ import logger from "../Utils/Logger";
15
+ const UPSERT_BATCH_SIZE = 500;
16
+ const STALE_DELETE_WARN_THRESHOLD = 100;
17
+ export class Service extends DatabaseService {
18
+ constructor() {
19
+ super(Model);
20
+ }
21
+ /**
22
+ * Upsert a batch of Container rows for a single (project, host)
23
+ * pair. Uses ON CONFLICT on the UNIQUE (projectId, dockerHostId,
24
+ * kind, name) index with a dominance guard on lastSeenAt so
25
+ * out-of-order ingest never regresses a newer observation.
26
+ *
27
+ * Containers are upserted from metric snapshots (no separate
28
+ * inventory snapshot path), so this also writes
29
+ * latestCpuPercent / latestMemoryBytes / metricsUpdatedAt in the
30
+ * same statement — saves a round trip vs. the K8s pattern of
31
+ * upsert-then-update.
32
+ */
33
+ async bulkUpsertContainers(data) {
34
+ if (data.containers.length === 0) {
35
+ return;
36
+ }
37
+ for (let i = 0; i < data.containers.length; i += UPSERT_BATCH_SIZE) {
38
+ const chunk = data.containers.slice(i, i + UPSERT_BATCH_SIZE);
39
+ const valueFragments = [];
40
+ const params = [];
41
+ let p = 1;
42
+ for (const c of chunk) {
43
+ valueFragments.push(`($${p++}, $${p++}, $${p++}, $${p++}, $${p++}, $${p++}, $${p++}, $${p++}::numeric, $${p++}::bigint, $${p++}::timestamptz, $${p++}::timestamptz, $${p++})`);
44
+ params.push(data.projectId.toString(), data.dockerHostId.toString(), "Container", c.containerName, c.containerId, c.imageName, c.state, c.cpuPercent !== null && c.cpuPercent !== undefined
45
+ ? c.cpuPercent
46
+ : null, c.memoryBytes !== null && c.memoryBytes !== undefined
47
+ ? Math.trunc(c.memoryBytes).toString()
48
+ : null, c.observedAt, c.observedAt, 0);
49
+ }
50
+ const sql = `
51
+ INSERT INTO "DockerResource" (
52
+ "projectId", "dockerHostId", "kind", "name",
53
+ "containerId", "imageName", "state",
54
+ "latestCpuPercent", "latestMemoryBytes",
55
+ "metricsUpdatedAt", "lastSeenAt", "version"
56
+ )
57
+ VALUES ${valueFragments.join(", ")}
58
+ ON CONFLICT ("projectId", "dockerHostId", "kind", "name")
59
+ DO UPDATE SET
60
+ "containerId" = COALESCE(EXCLUDED."containerId", "DockerResource"."containerId"),
61
+ "imageName" = COALESCE(EXCLUDED."imageName", "DockerResource"."imageName"),
62
+ "state" = EXCLUDED."state",
63
+ "latestCpuPercent" = COALESCE(EXCLUDED."latestCpuPercent", "DockerResource"."latestCpuPercent"),
64
+ "latestMemoryBytes" = COALESCE(EXCLUDED."latestMemoryBytes", "DockerResource"."latestMemoryBytes"),
65
+ "metricsUpdatedAt" = EXCLUDED."metricsUpdatedAt",
66
+ "lastSeenAt" = EXCLUDED."lastSeenAt",
67
+ "updatedAt" = now()
68
+ WHERE EXCLUDED."lastSeenAt" >= "DockerResource"."lastSeenAt"
69
+ `;
70
+ await this.getRepository().manager.query(sql, params);
71
+ }
72
+ }
73
+ /**
74
+ * Upsert a batch of resources for any kind. Used by the snapshot
75
+ * ingest path (Container / Image / Network / Volume rows from the
76
+ * Docker agent's inventory poller). Container rows from this path
77
+ * carry full state (running / exited / paused / restarting / dead /
78
+ * created), unlike the metric-derived path which only sees running
79
+ * containers.
80
+ */
81
+ async bulkUpsert(data) {
82
+ if (data.resources.length === 0) {
83
+ return;
84
+ }
85
+ for (let i = 0; i < data.resources.length; i += UPSERT_BATCH_SIZE) {
86
+ const chunk = data.resources.slice(i, i + UPSERT_BATCH_SIZE);
87
+ const valueFragments = [];
88
+ const params = [];
89
+ let p = 1;
90
+ for (const r of chunk) {
91
+ valueFragments.push(`($${p++}, $${p++}, $${p++}, $${p++}, $${p++}, $${p++}, $${p++}, $${p++}, $${p++}::timestamptz, $${p++}::timestamptz, $${p++})`);
92
+ params.push(data.projectId.toString(), data.dockerHostId.toString(), r.kind, r.name, r.containerId, r.imageName, r.state, r.labels ? JSON.stringify(r.labels) : null, r.resourceCreationTimestamp, r.lastSeenAt, 0);
93
+ }
94
+ const sql = `
95
+ INSERT INTO "DockerResource" (
96
+ "projectId", "dockerHostId", "kind", "name",
97
+ "containerId", "imageName", "state", "labels",
98
+ "resourceCreationTimestamp", "lastSeenAt", "version"
99
+ )
100
+ VALUES ${valueFragments.join(", ")}
101
+ ON CONFLICT ("projectId", "dockerHostId", "kind", "name")
102
+ DO UPDATE SET
103
+ "containerId" = COALESCE(EXCLUDED."containerId", "DockerResource"."containerId"),
104
+ "imageName" = COALESCE(EXCLUDED."imageName", "DockerResource"."imageName"),
105
+ "state" = COALESCE(EXCLUDED."state", "DockerResource"."state"),
106
+ "labels" = COALESCE(EXCLUDED."labels", "DockerResource"."labels"),
107
+ "resourceCreationTimestamp" = COALESCE(EXCLUDED."resourceCreationTimestamp", "DockerResource"."resourceCreationTimestamp"),
108
+ "lastSeenAt" = EXCLUDED."lastSeenAt",
109
+ "updatedAt" = now()
110
+ WHERE EXCLUDED."lastSeenAt" >= "DockerResource"."lastSeenAt"
111
+ `;
112
+ await this.getRepository().manager.query(sql, params);
113
+ }
114
+ }
115
+ /**
116
+ * Hard-delete all resources on a host whose last observation is
117
+ * older than olderThan. Returns the number of deleted rows.
118
+ */
119
+ async deleteStaleForHost(data) {
120
+ const result = await this.getRepository().manager.query(`DELETE FROM "DockerResource" WHERE "dockerHostId" = $1 AND "lastSeenAt" < $2`, [data.dockerHostId.toString(), data.olderThan]);
121
+ let affected = 0;
122
+ if (Array.isArray(result) && result.length >= 2) {
123
+ const second = result[1];
124
+ if (typeof second === "number") {
125
+ affected = second;
126
+ }
127
+ }
128
+ if (affected > STALE_DELETE_WARN_THRESHOLD) {
129
+ logger.warn(`DockerResource cleanup deleted ${affected} stale rows for host ${data.dockerHostId.toString()} — larger than expected; investigate agent health.`);
130
+ }
131
+ return affected;
132
+ }
133
+ /**
134
+ * Compute container state breakdowns for a single host from the
135
+ * inventory table. Used by the cleanup worker to refresh the cached
136
+ * counts on DockerHost so the Hosts page / dashboard widget shows
137
+ * accurate numbers without needing a SQL aggregation per render.
138
+ */
139
+ async getContainerCountsForHost(data) {
140
+ const rows = await this.getRepository().manager.query(`SELECT
141
+ COUNT(*) FILTER (WHERE LOWER("state") = 'running')::text AS "running",
142
+ COUNT(*) FILTER (WHERE LOWER("state") IN ('exited', 'dead', 'created'))::text AS "stopped",
143
+ COUNT(*) FILTER (WHERE LOWER("state") = 'paused')::text AS "paused"
144
+ FROM "DockerResource"
145
+ WHERE "projectId" = $1
146
+ AND "dockerHostId" = $2
147
+ AND "kind" = 'Container'
148
+ AND "deletedAt" IS NULL`, [data.projectId.toString(), data.dockerHostId.toString()]);
149
+ const row = rows[0];
150
+ return {
151
+ containersRunning: row ? parseInt(row.running, 10) || 0 : 0,
152
+ containersStopped: row ? parseInt(row.stopped, 10) || 0 : 0,
153
+ containersPaused: row ? parseInt(row.paused, 10) || 0 : 0,
154
+ };
155
+ }
156
+ getStaleThresholdDate(nowOverride) {
157
+ const minutes = this.getStaleThresholdMinutes();
158
+ return OneUptimeDate.addRemoveMinutes(nowOverride || OneUptimeDate.getCurrentDate(), -minutes);
159
+ }
160
+ getStaleThresholdMinutes() {
161
+ const raw = process.env["DOCKER_INVENTORY_STALE_MINUTES"];
162
+ if (raw) {
163
+ const parsed = parseInt(raw, 10);
164
+ if (!isNaN(parsed) && parsed >= 5) {
165
+ return parsed;
166
+ }
167
+ }
168
+ return 15;
169
+ }
170
+ }
171
+ __decorate([
172
+ CaptureSpan(),
173
+ __metadata("design:type", Function),
174
+ __metadata("design:paramtypes", [Object]),
175
+ __metadata("design:returntype", Promise)
176
+ ], Service.prototype, "bulkUpsertContainers", null);
177
+ __decorate([
178
+ CaptureSpan(),
179
+ __metadata("design:type", Function),
180
+ __metadata("design:paramtypes", [Object]),
181
+ __metadata("design:returntype", Promise)
182
+ ], Service.prototype, "bulkUpsert", null);
183
+ __decorate([
184
+ CaptureSpan(),
185
+ __metadata("design:type", Function),
186
+ __metadata("design:paramtypes", [Object]),
187
+ __metadata("design:returntype", Promise)
188
+ ], Service.prototype, "deleteStaleForHost", null);
189
+ __decorate([
190
+ CaptureSpan(),
191
+ __metadata("design:type", Function),
192
+ __metadata("design:paramtypes", [Object]),
193
+ __metadata("design:returntype", Promise)
194
+ ], Service.prototype, "getContainerCountsForHost", null);
195
+ export default new Service();
196
+ //# sourceMappingURL=DockerResourceService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DockerResourceService.js","sourceRoot":"","sources":["../../../../Server/Services/DockerResourceService.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,306 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
1
10
  import DatabaseService from "./DatabaseService";
11
+ import MonitorService from "./MonitorService";
12
+ import BadDataException from "../../Types/Exception/BadDataException";
13
+ import LIMIT_MAX from "../../Types/Database/LimitMax";
2
14
  import Model from "../../Models/DatabaseModels/MonitorTemplate";
15
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
16
+ const ALL_SYNCABLE_FIELDS = [
17
+ "monitorSteps",
18
+ "monitoringInterval",
19
+ "minimumProbeAgreement",
20
+ "labels",
21
+ ];
3
22
  export class Service extends DatabaseService {
4
23
  constructor() {
5
24
  super(Model);
6
25
  }
26
+ /**
27
+ * Count monitors created from this template.
28
+ * Caller must already have read access on the template via the API layer.
29
+ */
30
+ async countLinkedMonitors(data) {
31
+ const count = await MonitorService.countBy({
32
+ query: {
33
+ monitorTemplateId: data.monitorTemplateId,
34
+ projectId: data.projectId,
35
+ },
36
+ props: {
37
+ isRoot: true,
38
+ },
39
+ });
40
+ return count.toNumber();
41
+ }
42
+ /**
43
+ * Validate and narrow a list of field names to the syncable subset.
44
+ * Anything not in the whitelist throws — we never silently drop a field the
45
+ * caller asked for, that would mask UI bugs.
46
+ */
47
+ validateSyncableFields(fields) {
48
+ if (!fields || fields.length === 0) {
49
+ return [...ALL_SYNCABLE_FIELDS];
50
+ }
51
+ const allowed = new Set(ALL_SYNCABLE_FIELDS);
52
+ for (const field of fields) {
53
+ if (!allowed.has(field)) {
54
+ throw new BadDataException(`Field "${field}" is not syncable from a monitor template`);
55
+ }
56
+ }
57
+ return fields;
58
+ }
59
+ buildUpdateData(template, fields) {
60
+ const updateData = {};
61
+ for (const field of fields) {
62
+ const value = template[field];
63
+ if (value === undefined) {
64
+ continue;
65
+ }
66
+ updateData[field] = value;
67
+ }
68
+ return updateData;
69
+ }
70
+ /**
71
+ * Push the template's current configuration onto every monitor that was
72
+ * created from it. Sync is intentionally explicit (button-triggered) so a
73
+ * config tweak doesn't silently re-deploy across the whole fleet.
74
+ *
75
+ * Pass `fields` to scope the sync — e.g. `["monitorSteps"]` to push only the
76
+ * criteria. If omitted, every syncable field is pushed.
77
+ */
78
+ async syncLinkedMonitors(data) {
79
+ const fields = this.validateSyncableFields(data.fields);
80
+ const template = await this.findOneById({
81
+ id: data.monitorTemplateId,
82
+ select: {
83
+ _id: true,
84
+ projectId: true,
85
+ monitorSteps: true,
86
+ monitoringInterval: true,
87
+ minimumProbeAgreement: true,
88
+ labels: {
89
+ _id: true,
90
+ },
91
+ },
92
+ props: data.props,
93
+ });
94
+ if (!template) {
95
+ throw new BadDataException("Monitor template not found");
96
+ }
97
+ if (!template.projectId) {
98
+ throw new BadDataException("Monitor template is missing projectId");
99
+ }
100
+ const totalLinkedMonitors = await this.countLinkedMonitors({
101
+ monitorTemplateId: template.id,
102
+ projectId: template.projectId,
103
+ });
104
+ if (totalLinkedMonitors === 0) {
105
+ return {
106
+ totalLinkedMonitors: 0,
107
+ syncedMonitors: 0,
108
+ };
109
+ }
110
+ const updateData = this.buildUpdateData(template, fields);
111
+ if (Object.keys(updateData).length === 0) {
112
+ return {
113
+ totalLinkedMonitors,
114
+ syncedMonitors: 0,
115
+ };
116
+ }
117
+ const syncedMonitors = await MonitorService.updateBy({
118
+ query: {
119
+ monitorTemplateId: template.id,
120
+ projectId: template.projectId,
121
+ },
122
+ data: updateData,
123
+ limit: LIMIT_MAX,
124
+ skip: 0,
125
+ props: data.props,
126
+ });
127
+ return {
128
+ totalLinkedMonitors,
129
+ syncedMonitors,
130
+ };
131
+ }
132
+ /**
133
+ * Sync the template's current configuration onto a single monitor that was
134
+ * created from it. The monitor must be linked to this template — passing an
135
+ * arbitrary monitor ID is rejected so the endpoint can't be tricked into
136
+ * pushing config to an unrelated monitor.
137
+ *
138
+ * Pass `fields` to scope the sync; if omitted, every syncable field is
139
+ * pushed.
140
+ */
141
+ async syncToMonitor(data) {
142
+ const fields = this.validateSyncableFields(data.fields);
143
+ const template = await this.findOneById({
144
+ id: data.monitorTemplateId,
145
+ select: {
146
+ _id: true,
147
+ projectId: true,
148
+ monitorSteps: true,
149
+ monitoringInterval: true,
150
+ minimumProbeAgreement: true,
151
+ labels: {
152
+ _id: true,
153
+ },
154
+ },
155
+ props: data.props,
156
+ });
157
+ if (!template) {
158
+ throw new BadDataException("Monitor template not found");
159
+ }
160
+ if (!template.projectId) {
161
+ throw new BadDataException("Monitor template is missing projectId");
162
+ }
163
+ const monitor = await MonitorService.findOneById({
164
+ id: data.monitorId,
165
+ select: {
166
+ _id: true,
167
+ projectId: true,
168
+ monitorTemplateId: true,
169
+ },
170
+ props: { isRoot: true },
171
+ });
172
+ if (!monitor) {
173
+ throw new BadDataException("Monitor not found");
174
+ }
175
+ if (!monitor.monitorTemplateId ||
176
+ monitor.monitorTemplateId.toString() !== template.id.toString()) {
177
+ throw new BadDataException("Monitor is not linked to this template");
178
+ }
179
+ if (!monitor.projectId ||
180
+ monitor.projectId.toString() !== template.projectId.toString()) {
181
+ throw new BadDataException("Monitor and template belong to different projects");
182
+ }
183
+ const updateData = this.buildUpdateData(template, fields);
184
+ if (Object.keys(updateData).length === 0) {
185
+ return;
186
+ }
187
+ await MonitorService.updateOneById({
188
+ id: data.monitorId,
189
+ data: updateData,
190
+ props: data.props,
191
+ });
192
+ }
193
+ /**
194
+ * Link an existing monitor to this template. The monitor must be in the same
195
+ * project AND have the same monitorType as the template — anything else is
196
+ * rejected, so a user can't (e.g.) link an API monitor to a Server-monitor
197
+ * template and then sync incompatible criteria onto it.
198
+ */
199
+ async linkMonitor(data) {
200
+ const template = await this.findOneById({
201
+ id: data.monitorTemplateId,
202
+ select: {
203
+ _id: true,
204
+ projectId: true,
205
+ monitorType: true,
206
+ },
207
+ props: data.props,
208
+ });
209
+ if (!template) {
210
+ throw new BadDataException("Monitor template not found");
211
+ }
212
+ if (!template.projectId) {
213
+ throw new BadDataException("Monitor template is missing projectId");
214
+ }
215
+ if (!template.monitorType) {
216
+ throw new BadDataException("Monitor template is missing monitorType");
217
+ }
218
+ const monitor = await MonitorService.findOneById({
219
+ id: data.monitorId,
220
+ select: {
221
+ _id: true,
222
+ projectId: true,
223
+ monitorType: true,
224
+ },
225
+ props: data.props,
226
+ });
227
+ if (!monitor) {
228
+ throw new BadDataException("Monitor not found");
229
+ }
230
+ if (!monitor.projectId ||
231
+ monitor.projectId.toString() !== template.projectId.toString()) {
232
+ throw new BadDataException("Monitor and template belong to different projects");
233
+ }
234
+ if (monitor.monitorType !== template.monitorType) {
235
+ throw new BadDataException(`Monitor type "${monitor.monitorType}" does not match template type "${template.monitorType}"`);
236
+ }
237
+ await MonitorService.updateOneById({
238
+ id: data.monitorId,
239
+ data: {
240
+ monitorTemplateId: template.id,
241
+ },
242
+ props: data.props,
243
+ });
244
+ }
245
+ /**
246
+ * Detach a monitor from this template. The monitor must currently be linked
247
+ * to *this* template — passing a monitor linked elsewhere (or unlinked) is
248
+ * rejected so a stale UI can't accidentally clear someone else's link.
249
+ */
250
+ async unlinkMonitor(data) {
251
+ const monitor = await MonitorService.findOneById({
252
+ id: data.monitorId,
253
+ select: {
254
+ _id: true,
255
+ monitorTemplateId: true,
256
+ },
257
+ props: data.props,
258
+ });
259
+ if (!monitor) {
260
+ throw new BadDataException("Monitor not found");
261
+ }
262
+ if (!monitor.monitorTemplateId ||
263
+ monitor.monitorTemplateId.toString() !== data.monitorTemplateId.toString()) {
264
+ throw new BadDataException("Monitor is not linked to this template");
265
+ }
266
+ await MonitorService.updateOneById({
267
+ id: data.monitorId,
268
+ data: {
269
+ monitorTemplateId: null,
270
+ },
271
+ props: data.props,
272
+ });
273
+ }
7
274
  }
275
+ __decorate([
276
+ CaptureSpan(),
277
+ __metadata("design:type", Function),
278
+ __metadata("design:paramtypes", [Object]),
279
+ __metadata("design:returntype", Promise)
280
+ ], Service.prototype, "countLinkedMonitors", null);
281
+ __decorate([
282
+ CaptureSpan(),
283
+ __metadata("design:type", Function),
284
+ __metadata("design:paramtypes", [Object]),
285
+ __metadata("design:returntype", Promise)
286
+ ], Service.prototype, "syncLinkedMonitors", null);
287
+ __decorate([
288
+ CaptureSpan(),
289
+ __metadata("design:type", Function),
290
+ __metadata("design:paramtypes", [Object]),
291
+ __metadata("design:returntype", Promise)
292
+ ], Service.prototype, "syncToMonitor", null);
293
+ __decorate([
294
+ CaptureSpan(),
295
+ __metadata("design:type", Function),
296
+ __metadata("design:paramtypes", [Object]),
297
+ __metadata("design:returntype", Promise)
298
+ ], Service.prototype, "linkMonitor", null);
299
+ __decorate([
300
+ CaptureSpan(),
301
+ __metadata("design:type", Function),
302
+ __metadata("design:paramtypes", [Object]),
303
+ __metadata("design:returntype", Promise)
304
+ ], Service.prototype, "unlinkMonitor", null);
8
305
  export default new Service();
9
306
  //# sourceMappingURL=MonitorTemplateService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MonitorTemplateService.js","sourceRoot":"","sources":["../../../../Server/Services/MonitorTemplateService.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,6CAA6C,CAAC;AAEhE,MAAM,OAAO,OAAQ,SAAQ,eAAsB;IACjD;QACE,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;CACF;AACD,eAAe,IAAI,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"MonitorTemplateService.js","sourceRoot":"","sources":["../../../../Server/Services/MonitorTemplateService.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,66 @@ import vm from "vm";
19
19
  * Hidden from user code via ownKeys / has traps.
20
20
  */
21
21
  const PROXY_TARGET_SYMBOL = Symbol("sandboxProxyTarget");
22
+ /**
23
+ * Hardening prelude injected before user code in `runCodeInNodeVM`.
24
+ *
25
+ * Node's `vm` module is not a security boundary. The published PoC for
26
+ * GHSA-g9cp-35m2-fjv6 forces a stack-overflow `RangeError`, walks
27
+ * `e.__proto__.__proto__.__proto__` to `Object.prototype`, then reads
28
+ * `.toString.constructor` to obtain a `Function` constructor that compiles
29
+ * code in a realm where `process.binding('spawn_sync')` is reachable.
30
+ *
31
+ * This prelude closes that path by:
32
+ * - severing `Error.prototype`'s link to `Object.prototype` so the 3-level
33
+ * walk lands on `null` instead of `Object.prototype`;
34
+ * - deleting `.constructor` from every built-in prototype, so even a
35
+ * different walk (e.g. `(0).constructor.constructor`) cannot resolve to a
36
+ * function constructor;
37
+ * - clearing `Function` / `eval` from the sandbox global;
38
+ * - freezing the affected prototypes so user code cannot reattach them.
39
+ *
40
+ * This is a hotfix for the public PoC. The durable fix is to drop
41
+ * `runCodeInNodeVM` in favor of running synthetic monitor scripts in an
42
+ * out-of-process sandbox (tracked on the `probe-runner` branch).
43
+ */
44
+ const VM_HARDENING_PRELUDE = `(() => {
45
+ const _ctors = [
46
+ Object, Function, Array, String, Number, Boolean, RegExp,
47
+ Error, RangeError, TypeError, SyntaxError, ReferenceError, EvalError, URIError,
48
+ Symbol, Date, Map, Set, WeakMap, WeakSet, Promise, Proxy,
49
+ ArrayBuffer, DataView,
50
+ Int8Array, Uint8Array, Uint8ClampedArray,
51
+ Int16Array, Uint16Array, Int32Array, Uint32Array,
52
+ Float32Array, Float64Array,
53
+ ];
54
+ if (typeof BigInt !== 'undefined') _ctors.push(BigInt);
55
+
56
+ for (const C of _ctors) {
57
+ try { if (C && C.prototype) delete C.prototype.constructor; } catch (_) {}
58
+ }
59
+
60
+ // Generator / async-function prototypes have no named global — reach via syntax.
61
+ try { delete Object.getPrototypeOf(function*(){}).constructor; } catch (_) {}
62
+ try { delete Object.getPrototypeOf(async function(){}).constructor; } catch (_) {}
63
+ try { delete Object.getPrototypeOf(async function*(){}).constructor; } catch (_) {}
64
+
65
+ try { Object.setPrototypeOf(Error.prototype, null); } catch (_) {}
66
+
67
+ try {
68
+ Object.defineProperty(globalThis, 'Function', {
69
+ value: undefined, writable: false, configurable: false,
70
+ });
71
+ } catch (_) {}
72
+ try {
73
+ Object.defineProperty(globalThis, 'eval', {
74
+ value: undefined, writable: false, configurable: false,
75
+ });
76
+ } catch (_) {}
77
+
78
+ for (const C of _ctors) {
79
+ try { if (C && C.prototype) Object.freeze(C.prototype); } catch (_) {}
80
+ }
81
+ })();`;
22
82
  /** Properties blocked on every host-realm object exposed to the sandbox. */
23
83
  const BLOCKED_SANDBOX_PROPERTIES = new Set([
24
84
  "constructor",
@@ -325,6 +385,7 @@ export default class VMRunner {
325
385
  },
326
386
  });
327
387
  const script = `(async()=>{
388
+ ${VM_HARDENING_PRELUDE}
328
389
  ${code}
329
390
  })()`;
330
391
  try {