@oneuptime/common 10.0.92 → 10.0.94
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/DatabaseModels/DockerResource.ts +497 -0
- package/Models/DatabaseModels/Index.ts +2 -0
- package/Models/DatabaseModels/Monitor.ts +83 -0
- package/Models/DatabaseModels/TeamMember.ts +0 -2
- package/Server/API/MonitorTemplateAPI.ts +182 -0
- package/Server/API/TeamMemberAPI.ts +116 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1777933061000-MigrationName.ts +41 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1777972687018-MigrationName.ts +69 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +4 -0
- package/Server/Services/BillingInvoiceService.ts +18 -29
- package/Server/Services/DockerResourceService.ts +310 -0
- package/Server/Services/MonitorTemplateService.ts +359 -0
- package/Server/Types/Database/Permissions/TenantPermission.ts +82 -0
- package/Types/Dashboard/DashboardComponentType.ts +13 -0
- package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +16 -0
- package/Types/Dashboard/DashboardComponents/DashboardAlertListComponent.ts +4 -0
- package/Types/Dashboard/DashboardComponents/DashboardDockerContainerListComponent.ts +15 -0
- package/Types/Dashboard/DashboardComponents/DashboardDockerHostListComponent.ts +14 -0
- package/Types/Dashboard/DashboardComponents/DashboardDockerImageListComponent.ts +15 -0
- package/Types/Dashboard/DashboardComponents/DashboardDockerNetworkListComponent.ts +14 -0
- package/Types/Dashboard/DashboardComponents/DashboardDockerVolumeListComponent.ts +14 -0
- package/Types/Dashboard/DashboardComponents/DashboardIncidentListComponent.ts +4 -0
- package/Types/Dashboard/DashboardComponents/DashboardKubernetesCronJobListComponent.ts +15 -0
- package/Types/Dashboard/DashboardComponents/DashboardKubernetesDaemonSetListComponent.ts +15 -0
- package/Types/Dashboard/DashboardComponents/DashboardKubernetesDeploymentListComponent.ts +15 -0
- package/Types/Dashboard/DashboardComponents/DashboardKubernetesJobListComponent.ts +15 -0
- package/Types/Dashboard/DashboardComponents/DashboardKubernetesNamespaceListComponent.ts +14 -0
- package/Types/Dashboard/DashboardComponents/DashboardKubernetesNodeListComponent.ts +15 -0
- package/Types/Dashboard/DashboardComponents/DashboardKubernetesPodListComponent.ts +16 -0
- package/Types/Dashboard/DashboardComponents/DashboardKubernetesStatefulSetListComponent.ts +15 -0
- package/Types/Dashboard/DashboardComponents/DashboardMonitorListComponent.ts +3 -0
- package/Types/Docker/DockerInventoryExtractor.ts +343 -0
- package/Types/Monitor/CustomCodeMonitor/CustomCodeMonitorResponse.ts +12 -0
- package/Utils/Dashboard/Components/DashboardAlertListComponent.ts +47 -2
- package/Utils/Dashboard/Components/DashboardDockerContainerListComponent.ts +93 -0
- package/Utils/Dashboard/Components/DashboardDockerHostListComponent.ts +83 -0
- package/Utils/Dashboard/Components/DashboardDockerImageListComponent.ts +92 -0
- package/Utils/Dashboard/Components/DashboardDockerNetworkListComponent.ts +82 -0
- package/Utils/Dashboard/Components/DashboardDockerVolumeListComponent.ts +82 -0
- package/Utils/Dashboard/Components/DashboardIncidentListComponent.ts +47 -2
- package/Utils/Dashboard/Components/DashboardKubernetesCronJobListComponent.ts +36 -0
- package/Utils/Dashboard/Components/DashboardKubernetesDaemonSetListComponent.ts +36 -0
- package/Utils/Dashboard/Components/DashboardKubernetesDeploymentListComponent.ts +36 -0
- package/Utils/Dashboard/Components/DashboardKubernetesJobListComponent.ts +34 -0
- package/Utils/Dashboard/Components/DashboardKubernetesNamespaceListComponent.ts +36 -0
- package/Utils/Dashboard/Components/DashboardKubernetesNodeListComponent.ts +57 -0
- package/Utils/Dashboard/Components/DashboardKubernetesPodListComponent.ts +60 -0
- package/Utils/Dashboard/Components/DashboardKubernetesResourceListShared.ts +75 -0
- package/Utils/Dashboard/Components/DashboardKubernetesStatefulSetListComponent.ts +36 -0
- package/Utils/Dashboard/Components/DashboardMonitorListComponent.ts +59 -2
- package/Utils/Dashboard/Components/Index.ts +102 -0
- package/build/dist/Models/DatabaseModels/DockerResource.js +525 -0
- package/build/dist/Models/DatabaseModels/DockerResource.js.map +1 -0
- package/build/dist/Models/DatabaseModels/Index.js +2 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Monitor.js +82 -0
- package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TeamMember.js +0 -1
- package/build/dist/Models/DatabaseModels/TeamMember.js.map +1 -1
- package/build/dist/Server/API/MonitorTemplateAPI.js +108 -0
- package/build/dist/Server/API/MonitorTemplateAPI.js.map +1 -0
- package/build/dist/Server/API/TeamMemberAPI.js +66 -0
- package/build/dist/Server/API/TeamMemberAPI.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1777933061000-MigrationName.js +20 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1777933061000-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1777972687018-MigrationName.js +30 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1777972687018-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +4 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Services/BillingInvoiceService.js +22 -25
- package/build/dist/Server/Services/BillingInvoiceService.js.map +1 -1
- package/build/dist/Server/Services/DockerResourceService.js +196 -0
- package/build/dist/Server/Services/DockerResourceService.js.map +1 -0
- package/build/dist/Server/Services/MonitorTemplateService.js +290 -0
- package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/TenantPermission.js +54 -0
- package/build/dist/Server/Types/Database/Permissions/TenantPermission.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponentType.js +13 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +15 -0
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerContainerListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerContainerListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerHostListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerHostListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerImageListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerImageListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerNetworkListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerNetworkListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerVolumeListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerVolumeListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesCronJobListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesCronJobListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesDaemonSetListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesDaemonSetListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesDeploymentListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesDeploymentListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesJobListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesJobListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesNamespaceListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesNamespaceListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesNodeListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesNodeListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesPodListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesPodListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesStatefulSetListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesStatefulSetListComponent.js.map +1 -0
- package/build/dist/Types/Docker/DockerInventoryExtractor.js +293 -0
- package/build/dist/Types/Docker/DockerInventoryExtractor.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardAlertListComponent.js +43 -3
- package/build/dist/Utils/Dashboard/Components/DashboardAlertListComponent.js.map +1 -1
- package/build/dist/Utils/Dashboard/Components/DashboardDockerContainerListComponent.js +75 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDockerContainerListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDockerHostListComponent.js +69 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDockerHostListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDockerImageListComponent.js +75 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDockerImageListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDockerNetworkListComponent.js +66 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDockerNetworkListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDockerVolumeListComponent.js +66 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDockerVolumeListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardIncidentListComponent.js +43 -3
- package/build/dist/Utils/Dashboard/Components/DashboardIncidentListComponent.js.map +1 -1
- package/build/dist/Utils/Dashboard/Components/DashboardKubernetesCronJobListComponent.js +29 -0
- package/build/dist/Utils/Dashboard/Components/DashboardKubernetesCronJobListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardKubernetesDaemonSetListComponent.js +29 -0
- package/build/dist/Utils/Dashboard/Components/DashboardKubernetesDaemonSetListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardKubernetesDeploymentListComponent.js +29 -0
- package/build/dist/Utils/Dashboard/Components/DashboardKubernetesDeploymentListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardKubernetesJobListComponent.js +29 -0
- package/build/dist/Utils/Dashboard/Components/DashboardKubernetesJobListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardKubernetesNamespaceListComponent.js +29 -0
- package/build/dist/Utils/Dashboard/Components/DashboardKubernetesNamespaceListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardKubernetesNodeListComponent.js +44 -0
- package/build/dist/Utils/Dashboard/Components/DashboardKubernetesNodeListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardKubernetesPodListComponent.js +47 -0
- package/build/dist/Utils/Dashboard/Components/DashboardKubernetesPodListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardKubernetesResourceListShared.js +55 -0
- package/build/dist/Utils/Dashboard/Components/DashboardKubernetesResourceListShared.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardKubernetesStatefulSetListComponent.js +29 -0
- package/build/dist/Utils/Dashboard/Components/DashboardKubernetesStatefulSetListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardMonitorListComponent.js +46 -3
- package/build/dist/Utils/Dashboard/Components/DashboardMonitorListComponent.js.map +1 -1
- package/build/dist/Utils/Dashboard/Components/Index.js +53 -0
- package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,9 +1,299 @@
|
|
|
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
|
+
];
|
|
3
21
|
export class Service extends DatabaseService {
|
|
4
22
|
constructor() {
|
|
5
23
|
super(Model);
|
|
6
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Count monitors created from this template.
|
|
27
|
+
* Caller must already have read access on the template via the API layer.
|
|
28
|
+
*/
|
|
29
|
+
async countLinkedMonitors(data) {
|
|
30
|
+
const count = await MonitorService.countBy({
|
|
31
|
+
query: {
|
|
32
|
+
monitorTemplateId: data.monitorTemplateId,
|
|
33
|
+
projectId: data.projectId,
|
|
34
|
+
},
|
|
35
|
+
props: {
|
|
36
|
+
isRoot: true,
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
return count.toNumber();
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Validate and narrow a list of field names to the syncable subset.
|
|
43
|
+
* Anything not in the whitelist throws — we never silently drop a field the
|
|
44
|
+
* caller asked for, that would mask UI bugs.
|
|
45
|
+
*/
|
|
46
|
+
validateSyncableFields(fields) {
|
|
47
|
+
if (!fields || fields.length === 0) {
|
|
48
|
+
return [...ALL_SYNCABLE_FIELDS];
|
|
49
|
+
}
|
|
50
|
+
const allowed = new Set(ALL_SYNCABLE_FIELDS);
|
|
51
|
+
for (const field of fields) {
|
|
52
|
+
if (!allowed.has(field)) {
|
|
53
|
+
throw new BadDataException(`Field "${field}" is not syncable from a monitor template`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return fields;
|
|
57
|
+
}
|
|
58
|
+
buildUpdateData(template, fields) {
|
|
59
|
+
const updateData = {};
|
|
60
|
+
for (const field of fields) {
|
|
61
|
+
const value = template[field];
|
|
62
|
+
if (value === undefined) {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
updateData[field] = value;
|
|
66
|
+
}
|
|
67
|
+
return updateData;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Push the template's current configuration onto every monitor that was
|
|
71
|
+
* created from it. Sync is intentionally explicit (button-triggered) so a
|
|
72
|
+
* config tweak doesn't silently re-deploy across the whole fleet.
|
|
73
|
+
*
|
|
74
|
+
* Pass `fields` to scope the sync — e.g. `["monitorSteps"]` to push only the
|
|
75
|
+
* criteria. If omitted, every syncable field is pushed.
|
|
76
|
+
*/
|
|
77
|
+
async syncLinkedMonitors(data) {
|
|
78
|
+
const fields = this.validateSyncableFields(data.fields);
|
|
79
|
+
const template = await this.findOneById({
|
|
80
|
+
id: data.monitorTemplateId,
|
|
81
|
+
select: {
|
|
82
|
+
_id: true,
|
|
83
|
+
projectId: true,
|
|
84
|
+
monitorSteps: true,
|
|
85
|
+
monitoringInterval: true,
|
|
86
|
+
minimumProbeAgreement: true,
|
|
87
|
+
},
|
|
88
|
+
props: data.props,
|
|
89
|
+
});
|
|
90
|
+
if (!template) {
|
|
91
|
+
throw new BadDataException("Monitor template not found");
|
|
92
|
+
}
|
|
93
|
+
if (!template.projectId) {
|
|
94
|
+
throw new BadDataException("Monitor template is missing projectId");
|
|
95
|
+
}
|
|
96
|
+
const totalLinkedMonitors = await this.countLinkedMonitors({
|
|
97
|
+
monitorTemplateId: template.id,
|
|
98
|
+
projectId: template.projectId,
|
|
99
|
+
});
|
|
100
|
+
if (totalLinkedMonitors === 0) {
|
|
101
|
+
return {
|
|
102
|
+
totalLinkedMonitors: 0,
|
|
103
|
+
syncedMonitors: 0,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
const updateData = this.buildUpdateData(template, fields);
|
|
107
|
+
if (Object.keys(updateData).length === 0) {
|
|
108
|
+
return {
|
|
109
|
+
totalLinkedMonitors,
|
|
110
|
+
syncedMonitors: 0,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
const syncedMonitors = await MonitorService.updateBy({
|
|
114
|
+
query: {
|
|
115
|
+
monitorTemplateId: template.id,
|
|
116
|
+
projectId: template.projectId,
|
|
117
|
+
},
|
|
118
|
+
data: updateData,
|
|
119
|
+
limit: LIMIT_MAX,
|
|
120
|
+
skip: 0,
|
|
121
|
+
props: data.props,
|
|
122
|
+
});
|
|
123
|
+
return {
|
|
124
|
+
totalLinkedMonitors,
|
|
125
|
+
syncedMonitors,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Sync the template's current configuration onto a single monitor that was
|
|
130
|
+
* created from it. The monitor must be linked to this template — passing an
|
|
131
|
+
* arbitrary monitor ID is rejected so the endpoint can't be tricked into
|
|
132
|
+
* pushing config to an unrelated monitor.
|
|
133
|
+
*
|
|
134
|
+
* Pass `fields` to scope the sync; if omitted, every syncable field is
|
|
135
|
+
* pushed.
|
|
136
|
+
*/
|
|
137
|
+
async syncToMonitor(data) {
|
|
138
|
+
const fields = this.validateSyncableFields(data.fields);
|
|
139
|
+
const template = await this.findOneById({
|
|
140
|
+
id: data.monitorTemplateId,
|
|
141
|
+
select: {
|
|
142
|
+
_id: true,
|
|
143
|
+
projectId: true,
|
|
144
|
+
monitorSteps: true,
|
|
145
|
+
monitoringInterval: true,
|
|
146
|
+
minimumProbeAgreement: true,
|
|
147
|
+
},
|
|
148
|
+
props: data.props,
|
|
149
|
+
});
|
|
150
|
+
if (!template) {
|
|
151
|
+
throw new BadDataException("Monitor template not found");
|
|
152
|
+
}
|
|
153
|
+
if (!template.projectId) {
|
|
154
|
+
throw new BadDataException("Monitor template is missing projectId");
|
|
155
|
+
}
|
|
156
|
+
const monitor = await MonitorService.findOneById({
|
|
157
|
+
id: data.monitorId,
|
|
158
|
+
select: {
|
|
159
|
+
_id: true,
|
|
160
|
+
projectId: true,
|
|
161
|
+
monitorTemplateId: true,
|
|
162
|
+
},
|
|
163
|
+
props: { isRoot: true },
|
|
164
|
+
});
|
|
165
|
+
if (!monitor) {
|
|
166
|
+
throw new BadDataException("Monitor not found");
|
|
167
|
+
}
|
|
168
|
+
if (!monitor.monitorTemplateId ||
|
|
169
|
+
monitor.monitorTemplateId.toString() !== template.id.toString()) {
|
|
170
|
+
throw new BadDataException("Monitor is not linked to this template");
|
|
171
|
+
}
|
|
172
|
+
if (!monitor.projectId ||
|
|
173
|
+
monitor.projectId.toString() !== template.projectId.toString()) {
|
|
174
|
+
throw new BadDataException("Monitor and template belong to different projects");
|
|
175
|
+
}
|
|
176
|
+
const updateData = this.buildUpdateData(template, fields);
|
|
177
|
+
if (Object.keys(updateData).length === 0) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
await MonitorService.updateOneById({
|
|
181
|
+
id: data.monitorId,
|
|
182
|
+
data: updateData,
|
|
183
|
+
props: data.props,
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Link an existing monitor to this template. The monitor must be in the same
|
|
188
|
+
* project AND have the same monitorType as the template — anything else is
|
|
189
|
+
* rejected, so a user can't (e.g.) link an API monitor to a Server-monitor
|
|
190
|
+
* template and then sync incompatible criteria onto it.
|
|
191
|
+
*/
|
|
192
|
+
async linkMonitor(data) {
|
|
193
|
+
const template = await this.findOneById({
|
|
194
|
+
id: data.monitorTemplateId,
|
|
195
|
+
select: {
|
|
196
|
+
_id: true,
|
|
197
|
+
projectId: true,
|
|
198
|
+
monitorType: true,
|
|
199
|
+
},
|
|
200
|
+
props: data.props,
|
|
201
|
+
});
|
|
202
|
+
if (!template) {
|
|
203
|
+
throw new BadDataException("Monitor template not found");
|
|
204
|
+
}
|
|
205
|
+
if (!template.projectId) {
|
|
206
|
+
throw new BadDataException("Monitor template is missing projectId");
|
|
207
|
+
}
|
|
208
|
+
if (!template.monitorType) {
|
|
209
|
+
throw new BadDataException("Monitor template is missing monitorType");
|
|
210
|
+
}
|
|
211
|
+
const monitor = await MonitorService.findOneById({
|
|
212
|
+
id: data.monitorId,
|
|
213
|
+
select: {
|
|
214
|
+
_id: true,
|
|
215
|
+
projectId: true,
|
|
216
|
+
monitorType: true,
|
|
217
|
+
},
|
|
218
|
+
props: data.props,
|
|
219
|
+
});
|
|
220
|
+
if (!monitor) {
|
|
221
|
+
throw new BadDataException("Monitor not found");
|
|
222
|
+
}
|
|
223
|
+
if (!monitor.projectId ||
|
|
224
|
+
monitor.projectId.toString() !== template.projectId.toString()) {
|
|
225
|
+
throw new BadDataException("Monitor and template belong to different projects");
|
|
226
|
+
}
|
|
227
|
+
if (monitor.monitorType !== template.monitorType) {
|
|
228
|
+
throw new BadDataException(`Monitor type "${monitor.monitorType}" does not match template type "${template.monitorType}"`);
|
|
229
|
+
}
|
|
230
|
+
await MonitorService.updateOneById({
|
|
231
|
+
id: data.monitorId,
|
|
232
|
+
data: {
|
|
233
|
+
monitorTemplateId: template.id,
|
|
234
|
+
},
|
|
235
|
+
props: data.props,
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Detach a monitor from this template. The monitor must currently be linked
|
|
240
|
+
* to *this* template — passing a monitor linked elsewhere (or unlinked) is
|
|
241
|
+
* rejected so a stale UI can't accidentally clear someone else's link.
|
|
242
|
+
*/
|
|
243
|
+
async unlinkMonitor(data) {
|
|
244
|
+
const monitor = await MonitorService.findOneById({
|
|
245
|
+
id: data.monitorId,
|
|
246
|
+
select: {
|
|
247
|
+
_id: true,
|
|
248
|
+
monitorTemplateId: true,
|
|
249
|
+
},
|
|
250
|
+
props: data.props,
|
|
251
|
+
});
|
|
252
|
+
if (!monitor) {
|
|
253
|
+
throw new BadDataException("Monitor not found");
|
|
254
|
+
}
|
|
255
|
+
if (!monitor.monitorTemplateId ||
|
|
256
|
+
monitor.monitorTemplateId.toString() !== data.monitorTemplateId.toString()) {
|
|
257
|
+
throw new BadDataException("Monitor is not linked to this template");
|
|
258
|
+
}
|
|
259
|
+
await MonitorService.updateOneById({
|
|
260
|
+
id: data.monitorId,
|
|
261
|
+
data: {
|
|
262
|
+
monitorTemplateId: null,
|
|
263
|
+
},
|
|
264
|
+
props: data.props,
|
|
265
|
+
});
|
|
266
|
+
}
|
|
7
267
|
}
|
|
268
|
+
__decorate([
|
|
269
|
+
CaptureSpan(),
|
|
270
|
+
__metadata("design:type", Function),
|
|
271
|
+
__metadata("design:paramtypes", [Object]),
|
|
272
|
+
__metadata("design:returntype", Promise)
|
|
273
|
+
], Service.prototype, "countLinkedMonitors", null);
|
|
274
|
+
__decorate([
|
|
275
|
+
CaptureSpan(),
|
|
276
|
+
__metadata("design:type", Function),
|
|
277
|
+
__metadata("design:paramtypes", [Object]),
|
|
278
|
+
__metadata("design:returntype", Promise)
|
|
279
|
+
], Service.prototype, "syncLinkedMonitors", null);
|
|
280
|
+
__decorate([
|
|
281
|
+
CaptureSpan(),
|
|
282
|
+
__metadata("design:type", Function),
|
|
283
|
+
__metadata("design:paramtypes", [Object]),
|
|
284
|
+
__metadata("design:returntype", Promise)
|
|
285
|
+
], Service.prototype, "syncToMonitor", null);
|
|
286
|
+
__decorate([
|
|
287
|
+
CaptureSpan(),
|
|
288
|
+
__metadata("design:type", Function),
|
|
289
|
+
__metadata("design:paramtypes", [Object]),
|
|
290
|
+
__metadata("design:returntype", Promise)
|
|
291
|
+
], Service.prototype, "linkMonitor", null);
|
|
292
|
+
__decorate([
|
|
293
|
+
CaptureSpan(),
|
|
294
|
+
__metadata("design:type", Function),
|
|
295
|
+
__metadata("design:paramtypes", [Object]),
|
|
296
|
+
__metadata("design:returntype", Promise)
|
|
297
|
+
], Service.prototype, "unlinkMonitor", null);
|
|
8
298
|
export default new Service();
|
|
9
299
|
//# 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;
|
|
1
|
+
{"version":3,"file":"MonitorTemplateService.js","sourceRoot":"","sources":["../../../../Server/Services/MonitorTemplateService.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,10 +9,23 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
};
|
|
10
10
|
import DatabaseRequestType from "../../BaseDatabase/DatabaseRequestType";
|
|
11
11
|
import BasePermission from "./BasePermission";
|
|
12
|
+
import TablePermission from "./TablePermission";
|
|
12
13
|
import Includes from "../../../../Types/BaseDatabase/Includes";
|
|
14
|
+
import DatabaseCommonInteractionPropsUtil, { PermissionType, } from "../../../../Types/BaseDatabase/DatabaseCommonInteractionPropsUtil";
|
|
13
15
|
import BadDataException from "../../../../Types/Exception/BadDataException";
|
|
14
16
|
import NotAuthorizedException from "../../../../Types/Exception/NotAuthorizedException";
|
|
17
|
+
import Permission from "../../../../Types/Permission";
|
|
15
18
|
import CaptureSpan from "../../../Utils/Telemetry/CaptureSpan";
|
|
19
|
+
/*
|
|
20
|
+
* Permissions auto-granted to every logged-in tenant user. Holding only these
|
|
21
|
+
* (without an actual role permission) does not signal admin authority and so
|
|
22
|
+
* should not unlock cross-row access on models that scope by user.
|
|
23
|
+
*/
|
|
24
|
+
const AUTO_GRANTED_TENANT_PERMISSIONS = [
|
|
25
|
+
Permission.CurrentUser,
|
|
26
|
+
Permission.Public,
|
|
27
|
+
Permission.UnAuthorizedSsoUser,
|
|
28
|
+
];
|
|
16
29
|
export default class TenantPermission {
|
|
17
30
|
static async addTenantScopeToQuery(modelType, query, select, props, type) {
|
|
18
31
|
var _a;
|
|
@@ -24,6 +37,19 @@ export default class TenantPermission {
|
|
|
24
37
|
// If this model has a tenantColumn, and request has tenantId, and is multiTenantQuery null then add tenantId to query.
|
|
25
38
|
if (tenantColumn && props.tenantId && !props.isMultiTenantRequest) {
|
|
26
39
|
query[tenantColumn] = props.tenantId;
|
|
40
|
+
/*
|
|
41
|
+
* If Permission.CurrentUser is the only thing letting the user through
|
|
42
|
+
* for this model+operation, also restrict the query to records they own.
|
|
43
|
+
* Otherwise the tenant filter alone leaves the user able to act on any
|
|
44
|
+
* row in the project (CVE-class issue when CurrentUser appears in a
|
|
45
|
+
* model's delete/update list alongside admin permissions).
|
|
46
|
+
*/
|
|
47
|
+
if (TenantPermission.shouldScopeQueryByCurrentUser(modelType, props, type)) {
|
|
48
|
+
const userColumn = model.getUserColumn();
|
|
49
|
+
if (userColumn) {
|
|
50
|
+
query[userColumn] = props.userId;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
27
53
|
}
|
|
28
54
|
// if model allows user query without tenant, and user column is present, and userId is present, then add userId to query.
|
|
29
55
|
else if (model.isUserQueryWithoutTenantAllowed() &&
|
|
@@ -83,6 +109,34 @@ export default class TenantPermission {
|
|
|
83
109
|
}
|
|
84
110
|
return query;
|
|
85
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* True if the only permission letting this user through the table-level
|
|
114
|
+
* check for this op is Permission.CurrentUser. In that case the query must
|
|
115
|
+
* be restricted to rows the user owns (via the model's user column).
|
|
116
|
+
*/
|
|
117
|
+
static shouldScopeQueryByCurrentUser(modelType, props, type) {
|
|
118
|
+
const model = new modelType();
|
|
119
|
+
if (!model.getUserColumn() || !props.userId) {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
const modelPermissions = TablePermission.getTablePermission(modelType, type);
|
|
123
|
+
if (!modelPermissions.includes(Permission.CurrentUser)) {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
const userPermissions = DatabaseCommonInteractionPropsUtil.getUserPermissions(props, PermissionType.Allow).map((up) => {
|
|
127
|
+
return up.permission;
|
|
128
|
+
});
|
|
129
|
+
const intersection = userPermissions.filter((p) => {
|
|
130
|
+
return modelPermissions.includes(p);
|
|
131
|
+
});
|
|
132
|
+
if (!intersection.includes(Permission.CurrentUser)) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
const adminMatch = intersection.filter((p) => {
|
|
136
|
+
return !AUTO_GRANTED_TENANT_PERMISSIONS.includes(p);
|
|
137
|
+
});
|
|
138
|
+
return adminMatch.length === 0;
|
|
139
|
+
}
|
|
86
140
|
}
|
|
87
141
|
__decorate([
|
|
88
142
|
CaptureSpan(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TenantPermission.js","sourceRoot":"","sources":["../../../../../../Server/Types/Database/Permissions/TenantPermission.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,mBAAmB,MAAM,wCAAwC,CAAC;AAGzE,OAAO,cAAgD,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"TenantPermission.js","sourceRoot":"","sources":["../../../../../../Server/Types/Database/Permissions/TenantPermission.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,19 @@ var DashboardComponentType;
|
|
|
10
10
|
DashboardComponentType["IncidentList"] = "IncidentList";
|
|
11
11
|
DashboardComponentType["AlertList"] = "AlertList";
|
|
12
12
|
DashboardComponentType["MonitorList"] = "MonitorList";
|
|
13
|
+
DashboardComponentType["KubernetesPodList"] = "KubernetesPodList";
|
|
14
|
+
DashboardComponentType["KubernetesNodeList"] = "KubernetesNodeList";
|
|
15
|
+
DashboardComponentType["KubernetesNamespaceList"] = "KubernetesNamespaceList";
|
|
16
|
+
DashboardComponentType["KubernetesDeploymentList"] = "KubernetesDeploymentList";
|
|
17
|
+
DashboardComponentType["KubernetesStatefulSetList"] = "KubernetesStatefulSetList";
|
|
18
|
+
DashboardComponentType["KubernetesDaemonSetList"] = "KubernetesDaemonSetList";
|
|
19
|
+
DashboardComponentType["KubernetesJobList"] = "KubernetesJobList";
|
|
20
|
+
DashboardComponentType["KubernetesCronJobList"] = "KubernetesCronJobList";
|
|
21
|
+
DashboardComponentType["DockerHostList"] = "DockerHostList";
|
|
22
|
+
DashboardComponentType["DockerContainerList"] = "DockerContainerList";
|
|
23
|
+
DashboardComponentType["DockerImageList"] = "DockerImageList";
|
|
24
|
+
DashboardComponentType["DockerNetworkList"] = "DockerNetworkList";
|
|
25
|
+
DashboardComponentType["DockerVolumeList"] = "DockerVolumeList";
|
|
13
26
|
})(DashboardComponentType || (DashboardComponentType = {}));
|
|
14
27
|
export default DashboardComponentType;
|
|
15
28
|
//# sourceMappingURL=DashboardComponentType.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardComponentType.js","sourceRoot":"","sources":["../../../../Types/Dashboard/DashboardComponentType.ts"],"names":[],"mappings":"AAAA,IAAK,
|
|
1
|
+
{"version":3,"file":"DashboardComponentType.js","sourceRoot":"","sources":["../../../../Types/Dashboard/DashboardComponentType.ts"],"names":[],"mappings":"AAAA,IAAK,sBAwBJ;AAxBD,WAAK,sBAAsB;IACzB,yCAAe,CAAA;IACf,yCAAe,CAAA;IACf,uCAAa,CAAA;IACb,yCAAe,CAAA;IACf,yCAAe,CAAA;IACf,iDAAuB,CAAA;IACvB,iDAAuB,CAAA;IACvB,uDAA6B,CAAA;IAC7B,iDAAuB,CAAA;IACvB,qDAA2B,CAAA;IAC3B,iEAAuC,CAAA;IACvC,mEAAyC,CAAA;IACzC,6EAAmD,CAAA;IACnD,+EAAqD,CAAA;IACrD,iFAAuD,CAAA;IACvD,6EAAmD,CAAA;IACnD,iEAAuC,CAAA;IACvC,yEAA+C,CAAA;IAC/C,2DAAiC,CAAA;IACjC,qEAA2C,CAAA;IAC3C,6DAAmC,CAAA;IACnC,iEAAuC,CAAA;IACvC,+DAAqC,CAAA;AACvC,CAAC,EAxBI,sBAAsB,KAAtB,sBAAsB,QAwB1B;AAED,eAAe,sBAAsB,CAAC"}
|
|
@@ -10,5 +10,20 @@ export var ComponentInputType;
|
|
|
10
10
|
ComponentInputType["MetricsQueryConfigs"] = "MetricsQueryConfigs";
|
|
11
11
|
ComponentInputType["LongText"] = "Long Text";
|
|
12
12
|
ComponentInputType["Dropdown"] = "Dropdown";
|
|
13
|
+
ComponentInputType["MultiSelectDropdown"] = "MultiSelectDropdown";
|
|
14
|
+
ComponentInputType["EntityDropdown"] = "EntityDropdown";
|
|
15
|
+
ComponentInputType["EntityMultiSelectDropdown"] = "EntityMultiSelectDropdown";
|
|
13
16
|
})(ComponentInputType || (ComponentInputType = {}));
|
|
17
|
+
export var EntityFilterModelType;
|
|
18
|
+
(function (EntityFilterModelType) {
|
|
19
|
+
EntityFilterModelType["IncidentSeverity"] = "IncidentSeverity";
|
|
20
|
+
EntityFilterModelType["AlertSeverity"] = "AlertSeverity";
|
|
21
|
+
EntityFilterModelType["IncidentState"] = "IncidentState";
|
|
22
|
+
EntityFilterModelType["AlertState"] = "AlertState";
|
|
23
|
+
EntityFilterModelType["MonitorStatus"] = "MonitorStatus";
|
|
24
|
+
EntityFilterModelType["Monitor"] = "Monitor";
|
|
25
|
+
EntityFilterModelType["Label"] = "Label";
|
|
26
|
+
EntityFilterModelType["KubernetesCluster"] = "KubernetesCluster";
|
|
27
|
+
EntityFilterModelType["DockerHost"] = "DockerHost";
|
|
28
|
+
})(EntityFilterModelType || (EntityFilterModelType = {}));
|
|
14
29
|
//# sourceMappingURL=ComponentArgument.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComponentArgument.js","sourceRoot":"","sources":["../../../../../Types/Dashboard/DashboardComponents/ComponentArgument.ts"],"names":[],"mappings":"AAGA,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"ComponentArgument.js","sourceRoot":"","sources":["../../../../../Types/Dashboard/DashboardComponents/ComponentArgument.ts"],"names":[],"mappings":"AAGA,MAAM,CAAN,IAAY,kBAcX;AAdD,WAAY,kBAAkB;IAC5B,mCAAa,CAAA;IACb,mCAAa,CAAA;IACb,4CAAsB,CAAA;IACtB,+CAAyB,CAAA;IACzB,uCAAiB,CAAA;IACjB,yCAAmB,CAAA;IACnB,+DAAyC,CAAA;IACzC,iEAA2C,CAAA;IAC3C,4CAAsB,CAAA;IACtB,2CAAqB,CAAA;IACrB,iEAA2C,CAAA;IAC3C,uDAAiC,CAAA;IACjC,6EAAuD,CAAA;AACzD,CAAC,EAdW,kBAAkB,KAAlB,kBAAkB,QAc7B;AAED,MAAM,CAAN,IAAY,qBAUX;AAVD,WAAY,qBAAqB;IAC/B,8DAAqC,CAAA;IACrC,wDAA+B,CAAA;IAC/B,wDAA+B,CAAA;IAC/B,kDAAyB,CAAA;IACzB,wDAA+B,CAAA;IAC/B,4CAAmB,CAAA;IACnB,wCAAe,CAAA;IACf,gEAAuC,CAAA;IACvC,kDAAyB,CAAA;AAC3B,CAAC,EAVW,qBAAqB,KAArB,qBAAqB,QAUhC"}
|
package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerContainerListComponent.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardDockerContainerListComponent.js","sourceRoot":"","sources":["../../../../../Types/Dashboard/DashboardComponents/DashboardDockerContainerListComponent.ts"],"names":[],"mappings":""}
|
package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerHostListComponent.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardDockerHostListComponent.js","sourceRoot":"","sources":["../../../../../Types/Dashboard/DashboardComponents/DashboardDockerHostListComponent.ts"],"names":[],"mappings":""}
|
package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerImageListComponent.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardDockerImageListComponent.js","sourceRoot":"","sources":["../../../../../Types/Dashboard/DashboardComponents/DashboardDockerImageListComponent.ts"],"names":[],"mappings":""}
|
package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerNetworkListComponent.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardDockerNetworkListComponent.js","sourceRoot":"","sources":["../../../../../Types/Dashboard/DashboardComponents/DashboardDockerNetworkListComponent.ts"],"names":[],"mappings":""}
|
package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerVolumeListComponent.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardDockerVolumeListComponent.js","sourceRoot":"","sources":["../../../../../Types/Dashboard/DashboardComponents/DashboardDockerVolumeListComponent.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardKubernetesCronJobListComponent.js","sourceRoot":"","sources":["../../../../../Types/Dashboard/DashboardComponents/DashboardKubernetesCronJobListComponent.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardKubernetesDaemonSetListComponent.js","sourceRoot":"","sources":["../../../../../Types/Dashboard/DashboardComponents/DashboardKubernetesDaemonSetListComponent.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardKubernetesDeploymentListComponent.js","sourceRoot":"","sources":["../../../../../Types/Dashboard/DashboardComponents/DashboardKubernetesDeploymentListComponent.ts"],"names":[],"mappings":""}
|
package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesJobListComponent.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardKubernetesJobListComponent.js","sourceRoot":"","sources":["../../../../../Types/Dashboard/DashboardComponents/DashboardKubernetesJobListComponent.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardKubernetesNamespaceListComponent.js","sourceRoot":"","sources":["../../../../../Types/Dashboard/DashboardComponents/DashboardKubernetesNamespaceListComponent.ts"],"names":[],"mappings":""}
|
package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesNodeListComponent.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardKubernetesNodeListComponent.js","sourceRoot":"","sources":["../../../../../Types/Dashboard/DashboardComponents/DashboardKubernetesNodeListComponent.ts"],"names":[],"mappings":""}
|
package/build/dist/Types/Dashboard/DashboardComponents/DashboardKubernetesPodListComponent.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardKubernetesPodListComponent.js","sourceRoot":"","sources":["../../../../../Types/Dashboard/DashboardComponents/DashboardKubernetesPodListComponent.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardKubernetesStatefulSetListComponent.js","sourceRoot":"","sources":["../../../../../Types/Dashboard/DashboardComponents/DashboardKubernetesStatefulSetListComponent.ts"],"names":[],"mappings":""}
|