@grnsft/if 0.0.6 → 0.1.0
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/.examples/ompls/azure.yml +205 -0
- package/.github/workflows/nodejs-ci.yml +0 -8
- package/README.md +48 -9
- package/build/index.js +1 -2
- package/examples/impls/test/azure.yml +8 -8
- package/examples/impls/test/ccf.yml +5 -3
- package/examples/impls/test/if-demo.yml +19 -9
- package/examples/impls/test/metadata.yml +3 -2
- package/examples/impls/test/nesting.yml +10 -13
- package/examples/impls/test/sci-e.yml +1 -1
- package/examples/impls/test/sci-m.yml +2 -2
- package/examples/impls/test/sci-o.yml +2 -4
- package/examples/impls/test/sci.yml +1 -2
- package/examples/impls/test/shell.yml +2 -1
- package/examples/impls/{tdp-finder-test.yml → test/tdp-finder.yml} +8 -8
- package/examples/ompls/ccf.yml +3 -1
- package/examples/ompls/if-demo.yml +46 -22
- package/package.json +12 -5
- package/tsconfig.build.json +7 -0
- package/tsconfig.build.tsbuildinfo +1 -0
- package/build/__mocks__/azure/index.d.ts +0 -11
- package/build/__mocks__/azure/index.js +0 -132
- package/build/__mocks__/boavizta/countries.json +0 -138
- package/build/__mocks__/boavizta/instance_types.json +0 -625
- package/build/__mocks__/boavizta/providers.json +0 -1
- package/build/__mocks__/fs/index.d.ts +0 -3
- package/build/__mocks__/fs/index.js +0 -56
- package/build/__mocks__/model-universe/index.d.ts +0 -31
- package/build/__mocks__/model-universe/index.js +0 -64
- package/build/__mocks__/watt-time/data.json +0 -119
- package/build/__tests__/integration/ompl/index.test.d.ts +0 -1
- package/build/__tests__/integration/ompl/index.test.js +0 -61
- package/build/__tests__/unit/lib/azure-importer/index.test.d.ts +0 -1
- package/build/__tests__/unit/lib/azure-importer/index.test.js +0 -152
- package/build/__tests__/unit/lib/boavizta/index.test.d.ts +0 -1
- package/build/__tests__/unit/lib/boavizta/index.test.js +0 -579
- package/build/__tests__/unit/lib/case-studies/aveva.test.d.ts +0 -1
- package/build/__tests__/unit/lib/case-studies/aveva.test.js +0 -36
- package/build/__tests__/unit/lib/case-studies/emem.test.d.ts +0 -1
- package/build/__tests__/unit/lib/case-studies/emem.test.js +0 -108
- package/build/__tests__/unit/lib/case-studies/eshoppen.test.d.ts +0 -1
- package/build/__tests__/unit/lib/case-studies/eshoppen.test.js +0 -53
- package/build/__tests__/unit/lib/case-studies/sci-accenture.test.d.ts +0 -1
- package/build/__tests__/unit/lib/case-studies/sci-accenture.test.js +0 -23
- package/build/__tests__/unit/lib/ccf/index.test.d.ts +0 -1
- package/build/__tests__/unit/lib/ccf/index.test.js +0 -223
- package/build/__tests__/unit/lib/cloud-instance-metadata/index.test.d.ts +0 -1
- package/build/__tests__/unit/lib/cloud-instance-metadata/index.test.js +0 -73
- package/build/__tests__/unit/lib/models-universe.test.d.ts +0 -1
- package/build/__tests__/unit/lib/models-universe.test.js +0 -193
- package/build/__tests__/unit/lib/observatory.test.d.ts +0 -1
- package/build/__tests__/unit/lib/observatory.test.js +0 -99
- package/build/__tests__/unit/lib/sci/index.test.d.ts +0 -1
- package/build/__tests__/unit/lib/sci/index.test.js +0 -106
- package/build/__tests__/unit/lib/sci-e/index.test.d.ts +0 -1
- package/build/__tests__/unit/lib/sci-e/index.test.js +0 -30
- package/build/__tests__/unit/lib/sci-m/index.test.d.ts +0 -1
- package/build/__tests__/unit/lib/sci-m/index.test.js +0 -58
- package/build/__tests__/unit/lib/sci-o/index.test.d.ts +0 -1
- package/build/__tests__/unit/lib/sci-o/index.test.js +0 -42
- package/build/__tests__/unit/lib/shell-imp/index.test.d.ts +0 -1
- package/build/__tests__/unit/lib/shell-imp/index.test.js +0 -21
- package/build/__tests__/unit/lib/supercomputer.test.d.ts +0 -1
- package/build/__tests__/unit/lib/supercomputer.test.js +0 -231
- package/build/__tests__/unit/lib/tdp-finder/index.test.d.ts +0 -1
- package/build/__tests__/unit/lib/tdp-finder/index.test.js +0 -62
- package/build/__tests__/unit/lib/teads-aws/index.test.d.ts +0 -1
- package/build/__tests__/unit/lib/teads-aws/index.test.js +0 -170
- package/build/__tests__/unit/lib/teads-curve/index.test.d.ts +0 -1
- package/build/__tests__/unit/lib/teads-curve/index.test.js +0 -146
- package/build/__tests__/unit/lib/watt-time/index.test.d.ts +0 -1
- package/build/__tests__/unit/lib/watt-time/index.test.js +0 -106
- package/build/__tests__/unit/util/args.test.d.ts +0 -1
- package/build/__tests__/unit/util/args.test.js +0 -92
- package/build/__tests__/unit/util/models-universe.test.d.ts +0 -1
- package/build/__tests__/unit/util/models-universe.test.js +0 -193
- package/build/__tests__/unit/util/observatory.test.d.ts +0 -1
- package/build/__tests__/unit/util/observatory.test.js +0 -99
- package/build/__tests__/unit/util/supercomputer.test.d.ts +0 -1
- package/build/__tests__/unit/util/supercomputer.test.js +0 -231
- package/build/__tests__/unit/util/yaml.test.d.ts +0 -1
- package/build/__tests__/unit/util/yaml.test.js +0 -59
- package/build/lib/azure-importer/index.d.ts +0 -55
- package/build/lib/azure-importer/index.js +0 -314
- package/build/lib/boavizta/index.d.ts +0 -53
- package/build/lib/boavizta/index.js +0 -254
- package/build/lib/case-studies/aveva-model.d.ts +0 -29
- package/build/lib/case-studies/aveva-model.js +0 -53
- package/build/lib/case-studies/emem-model.d.ts +0 -42
- package/build/lib/case-studies/emem-model.js +0 -93
- package/build/lib/case-studies/eshoppen-model.d.ts +0 -24
- package/build/lib/case-studies/eshoppen-model.js +0 -123
- package/build/lib/case-studies/index.d.ts +0 -4
- package/build/lib/case-studies/index.js +0 -21
- package/build/lib/case-studies/sci-accenture-model.d.ts +0 -10
- package/build/lib/case-studies/sci-accenture-model.js +0 -37
- package/build/lib/ccf/aws-embodied.json +0 -5591
- package/build/lib/ccf/aws-instances.json +0 -21116
- package/build/lib/ccf/aws-use.json +0 -79
- package/build/lib/ccf/azure-embodied.json +0 -6547
- package/build/lib/ccf/azure-instances.json +0 -8332
- package/build/lib/ccf/azure-use.json +0 -58
- package/build/lib/ccf/gcp-embodied.json +0 -3049
- package/build/lib/ccf/gcp-instances.json +0 -3880
- package/build/lib/ccf/gcp-use.json +0 -58
- package/build/lib/ccf/index.d.ts +0 -63
- package/build/lib/ccf/index.js +0 -338
- package/build/lib/cloud-instance-metadata/aws-instances.json +0 -1
- package/build/lib/cloud-instance-metadata/azure-instances.json +0 -1
- package/build/lib/cloud-instance-metadata/index.d.ts +0 -15
- package/build/lib/cloud-instance-metadata/index.js +0 -104
- package/build/lib/index.d.ts +0 -14
- package/build/lib/index.js +0 -32
- package/build/lib/interfaces/ccf.d.ts +0 -19
- package/build/lib/interfaces/ccf.js +0 -3
- package/build/lib/interfaces/index.d.ts +0 -7
- package/build/lib/interfaces/index.js +0 -18
- package/build/lib/sci/index.d.ts +0 -13
- package/build/lib/sci/index.js +0 -131
- package/build/lib/sci-e/index.d.ts +0 -38
- package/build/lib/sci-e/index.js +0 -85
- package/build/lib/sci-m/index.d.ts +0 -10
- package/build/lib/sci-m/index.js +0 -124
- package/build/lib/sci-o/index.d.ts +0 -17
- package/build/lib/sci-o/index.js +0 -52
- package/build/lib/shell-imp/index.d.ts +0 -32
- package/build/lib/shell-imp/index.js +0 -82
- package/build/lib/tdp-finder/index.d.ts +0 -19
- package/build/lib/tdp-finder/index.js +0 -98
- package/build/lib/teads-aws/aws-embodied.json +0 -1
- package/build/lib/teads-aws/aws-instances.json +0 -1
- package/build/lib/teads-aws/index.d.ts +0 -58
- package/build/lib/teads-aws/index.js +0 -208
- package/build/lib/teads-curve/index.d.ts +0 -52
- package/build/lib/teads-curve/index.js +0 -158
- package/build/lib/watt-time/index.d.ts +0 -18
- package/build/lib/watt-time/index.js +0 -204
- package/build/util/models-universe.d.ts +0 -28
- package/build/util/models-universe.js +0 -95
- package/build/util/observatory.d.ts +0 -20
- package/build/util/observatory.js +0 -31
- package/build/util/supercomputer.d.ts +0 -30
- package/build/util/supercomputer.js +0 -109
- package/docs/implementations/tdp-finder.md +0 -36
- package/examples/impls/test/complex-pipeline.yml +0 -67
- package/examples/impls/test/toto.yaml +0 -22
- package/tsconfig.tsbuildinfo +0 -1
|
@@ -1,314 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AzureImporterModel = void 0;
|
|
4
|
-
const identity_1 = require("@azure/identity");
|
|
5
|
-
const arm_monitor_1 = require("@azure/arm-monitor");
|
|
6
|
-
const arm_compute_1 = require("@azure/arm-compute");
|
|
7
|
-
const dotenv = require("dotenv");
|
|
8
|
-
const zod_1 = require("zod");
|
|
9
|
-
/**
|
|
10
|
-
* @todo Move all input validation schemas to separate file.
|
|
11
|
-
*/
|
|
12
|
-
const azureInputSchema = zod_1.z
|
|
13
|
-
.object({
|
|
14
|
-
'azure-observation-window': zod_1.z.string(),
|
|
15
|
-
'azure-observation-aggregation': zod_1.z.string(),
|
|
16
|
-
'azure-resource-group': zod_1.z.string(),
|
|
17
|
-
'azure-vm-name': zod_1.z.string(),
|
|
18
|
-
'azure-subscription-id': zod_1.z.string(),
|
|
19
|
-
timestamp: zod_1.z.string().datetime(),
|
|
20
|
-
duration: zod_1.z.number(),
|
|
21
|
-
})
|
|
22
|
-
.required()
|
|
23
|
-
.array();
|
|
24
|
-
class AzureImporterModel {
|
|
25
|
-
constructor() {
|
|
26
|
-
this.authParams = undefined;
|
|
27
|
-
/**
|
|
28
|
-
* Gets CPU metrics by calling monitor client.
|
|
29
|
-
*/
|
|
30
|
-
this.getCPUMetrics = (monitorClient, params) => {
|
|
31
|
-
const { subscriptionId, resourceGroupName, timespan, interval, aggregation, vmName, } = params;
|
|
32
|
-
const metricnames = 'Percentage CPU';
|
|
33
|
-
return monitorClient.metrics.list(`subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.Compute/virtualMachines/${vmName}`, {
|
|
34
|
-
metricnames,
|
|
35
|
-
timespan,
|
|
36
|
-
interval,
|
|
37
|
-
aggregation,
|
|
38
|
-
});
|
|
39
|
-
};
|
|
40
|
-
/**
|
|
41
|
-
* Gets RAW metrics by calling monitor client.
|
|
42
|
-
*/
|
|
43
|
-
this.getRawMetrics = (monitorClient, params) => {
|
|
44
|
-
const { subscriptionId, resourceGroupName, timespan, interval, aggregation, vmName, } = params;
|
|
45
|
-
const metricnames = 'Available Memory Bytes';
|
|
46
|
-
return monitorClient.metrics.list(`subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.Compute/virtualMachines/${vmName}`, {
|
|
47
|
-
metricnames,
|
|
48
|
-
timespan,
|
|
49
|
-
interval,
|
|
50
|
-
aggregation,
|
|
51
|
-
});
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
authenticate(authParams) {
|
|
55
|
-
this.authParams = authParams;
|
|
56
|
-
}
|
|
57
|
-
modelIdentifier() {
|
|
58
|
-
return 'azure';
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Validates given `inputs` params. If it's valid, then captures params, then passes to monitor.
|
|
62
|
-
* Returns flattened result from Azure monitor client.
|
|
63
|
-
*/
|
|
64
|
-
async execute(inputs) {
|
|
65
|
-
dotenv.config();
|
|
66
|
-
azureInputSchema.parse(inputs);
|
|
67
|
-
const input = inputs[0];
|
|
68
|
-
const params = {
|
|
69
|
-
aggregation: input['azure-observation-aggregation'],
|
|
70
|
-
resourceGroupName: input['azure-resource-group'],
|
|
71
|
-
vmName: input['azure-vm-name'],
|
|
72
|
-
subscriptionId: input['azure-subscription-id'],
|
|
73
|
-
timestamp: input['timestamp'],
|
|
74
|
-
duration: input['duration'],
|
|
75
|
-
window: input['azure-observation-window'],
|
|
76
|
-
timespan: this.getTimeSpan(input['duration'], input['timestamp']),
|
|
77
|
-
interval: this.getInterval(input['azure-observation-window']),
|
|
78
|
-
};
|
|
79
|
-
// Call the function and get data back in AzureOutputs object
|
|
80
|
-
const rawResults = await this.getVmUsage(params);
|
|
81
|
-
const rawMetadataResults = await this.getInstanceMetadata(params.subscriptionId, params.vmName, params.resourceGroupName);
|
|
82
|
-
input['duration'] = this.calculateDurationPerInput(params);
|
|
83
|
-
const enrichedOutputs = rawResults.timestamps.map((timestamp, index) => ({
|
|
84
|
-
timestamp,
|
|
85
|
-
'cloud-vendor': 'azure',
|
|
86
|
-
'cpu-util': rawResults.cpu_utils[index],
|
|
87
|
-
'mem-availableGB': parseFloat(rawResults.memAvailable[index]) * 1e-9,
|
|
88
|
-
'mem-usedGB': parseFloat(rawMetadataResults.totalMemoryGB) -
|
|
89
|
-
parseFloat(rawResults.memAvailable[index]) * 1e-9,
|
|
90
|
-
'total-memoryGB': rawMetadataResults.totalMemoryGB,
|
|
91
|
-
'mem-util': ((parseFloat(rawMetadataResults.totalMemoryGB) -
|
|
92
|
-
parseFloat(rawResults.memAvailable[index]) * 1e-9) /
|
|
93
|
-
parseFloat(rawMetadataResults.totalMemoryGB)) *
|
|
94
|
-
100,
|
|
95
|
-
location: rawMetadataResults.location,
|
|
96
|
-
'cloud-instance-type': rawMetadataResults.instanceType,
|
|
97
|
-
}));
|
|
98
|
-
for (let i = 0; i < Object.entries(enrichedOutputs).length; i++) {
|
|
99
|
-
enrichedOutputs[i] = Object.assign(enrichedOutputs[i], input);
|
|
100
|
-
}
|
|
101
|
-
return enrichedOutputs;
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Use DefaultAzureCredential which works with AZURE_TENANT_ID, AZURE_CLIENT_ID, and AZURE_CLIENT_SECRET environment variables.
|
|
105
|
-
* You can also use other credentials provided by @azure/identity package.
|
|
106
|
-
*/
|
|
107
|
-
async getVmUsage(params) {
|
|
108
|
-
const { subscriptionId, resourceGroupName, vmName, timespan, interval, aggregation, } = params;
|
|
109
|
-
const getMetricParams = {
|
|
110
|
-
subscriptionId,
|
|
111
|
-
resourceGroupName,
|
|
112
|
-
vmName,
|
|
113
|
-
timespan,
|
|
114
|
-
interval,
|
|
115
|
-
aggregation,
|
|
116
|
-
};
|
|
117
|
-
const timestamps = [];
|
|
118
|
-
const cpu_utils = [];
|
|
119
|
-
const memAvailable = [];
|
|
120
|
-
const credential = new identity_1.DefaultAzureCredential();
|
|
121
|
-
const monitorClient = new arm_monitor_1.MonitorClient(credential, subscriptionId);
|
|
122
|
-
const cpuMetricsResponse = await this.getCPUMetrics(monitorClient, getMetricParams);
|
|
123
|
-
// parse CPU util data
|
|
124
|
-
for (const timeSeries of cpuMetricsResponse.value[0].timeseries || []) {
|
|
125
|
-
const timeSeriesData = timeSeries.data || [];
|
|
126
|
-
for (const data of timeSeriesData) {
|
|
127
|
-
try {
|
|
128
|
-
timestamps.push(data.timeStamp.toISOString());
|
|
129
|
-
if (!(data.average === undefined)) {
|
|
130
|
-
cpu_utils.push(data.average.toString());
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
catch (error) {
|
|
134
|
-
console.log('error retrieving CPU data');
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
const ramMetricsResponse = await this.getRawMetrics(monitorClient, getMetricParams);
|
|
139
|
-
// parse ram util data
|
|
140
|
-
for (const timeSeries of ramMetricsResponse.value[0].timeseries || []) {
|
|
141
|
-
for (const data of timeSeries.data || []) {
|
|
142
|
-
if (!(typeof data.average === 'undefined')) {
|
|
143
|
-
memAvailable.push(data.average.toString());
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
return {
|
|
148
|
-
timestamps,
|
|
149
|
-
cpu_utils,
|
|
150
|
-
memAvailable,
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Initalize static params.
|
|
155
|
-
*/
|
|
156
|
-
async configure(name, staticParams) {
|
|
157
|
-
this.staticParams = staticParams;
|
|
158
|
-
this.name = name;
|
|
159
|
-
return this;
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Takes impl timestamp and duration and returns an Azure formatted `timespan` value.
|
|
163
|
-
*/
|
|
164
|
-
getTimeSpan(duration, timestamp) {
|
|
165
|
-
const start = new Date(timestamp);
|
|
166
|
-
const end = new Date(start.getTime() + duration * 1000).toISOString();
|
|
167
|
-
return `${start.toISOString()}/${end}`;
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* Formats given `amountOfTime` according to given `unit`.
|
|
171
|
-
* Throws error if given `unit` is not supported.
|
|
172
|
-
*/
|
|
173
|
-
timeUnitConverter(amountOfTime, unit) {
|
|
174
|
-
const seconds = ['seconds', 'second', 'secs', 'sec', 's'];
|
|
175
|
-
const minutes = ['minutes', 'm', 'min', 'mins'];
|
|
176
|
-
const hours = ['hour', 'hours', 'h', 'hr', 'hrs'];
|
|
177
|
-
const days = ['days', 'd'];
|
|
178
|
-
const weeks = ['week', 'weeks', 'w', 'wk', 'wks'];
|
|
179
|
-
const months = ['month', 'months', 'mth'];
|
|
180
|
-
const years = ['year', 'years', 'yr', 'yrs', 'y', 'ys'];
|
|
181
|
-
if (seconds.includes(unit)) {
|
|
182
|
-
throw new Error('The minimum unit of time for azure importer is minutes');
|
|
183
|
-
}
|
|
184
|
-
if (minutes.includes(unit)) {
|
|
185
|
-
return `T${amountOfTime}M`;
|
|
186
|
-
}
|
|
187
|
-
if (hours.includes(unit)) {
|
|
188
|
-
return `T${amountOfTime}H`;
|
|
189
|
-
}
|
|
190
|
-
if (days.includes(unit)) {
|
|
191
|
-
return `${amountOfTime}D`;
|
|
192
|
-
}
|
|
193
|
-
if (weeks.includes(unit)) {
|
|
194
|
-
return `${amountOfTime}W`;
|
|
195
|
-
}
|
|
196
|
-
if (months.includes(unit)) {
|
|
197
|
-
return `${amountOfTime}M`;
|
|
198
|
-
}
|
|
199
|
-
if (years.includes(unit)) {
|
|
200
|
-
return `${amountOfTime}Y`;
|
|
201
|
-
}
|
|
202
|
-
throw new Error('azure-observation-window parameter is malformed');
|
|
203
|
-
}
|
|
204
|
-
/**
|
|
205
|
-
* Takes granularity as e.g. "1 m", "1 hr" and translates into ISO8601 as expected by the azure API.
|
|
206
|
-
*/
|
|
207
|
-
getInterval(window) {
|
|
208
|
-
const splits = window.split(' ', 2);
|
|
209
|
-
const floatNumber = parseFloat(splits[0]);
|
|
210
|
-
// if number is a whole number, cast as int to avoid the ".0"
|
|
211
|
-
const amountOfTime = floatNumber % 1 === 0 ? Math.floor(floatNumber) : floatNumber;
|
|
212
|
-
const unit = splits[1];
|
|
213
|
-
const numberInFormat = this.timeUnitConverter(amountOfTime, unit);
|
|
214
|
-
return `P${numberInFormat}`;
|
|
215
|
-
}
|
|
216
|
-
/**
|
|
217
|
-
* Caculates total memory based on data from ComputeManagementClient response.
|
|
218
|
-
*/
|
|
219
|
-
async calculateTotalMemory(params) {
|
|
220
|
-
const { client, instanceType, location } = params;
|
|
221
|
-
// here we grab the total memory for the instance
|
|
222
|
-
const memResponseData = [];
|
|
223
|
-
for await (const item of client.resourceSkus.list()) {
|
|
224
|
-
memResponseData.push(item);
|
|
225
|
-
}
|
|
226
|
-
let totalMemoryGB = '';
|
|
227
|
-
const filteredMemData = memResponseData
|
|
228
|
-
.filter(item => item.resourceType === 'virtualMachines')
|
|
229
|
-
.filter(item => item.name === instanceType)
|
|
230
|
-
.filter(item => item.locations !== undefined);
|
|
231
|
-
const vmCapabilitiesData = filteredMemData
|
|
232
|
-
.filter(item => item.locations !== undefined && item.locations[0] === location)
|
|
233
|
-
.map(item => item.capabilities)[0];
|
|
234
|
-
if (vmCapabilitiesData !== undefined) {
|
|
235
|
-
const totalMemoryObject = vmCapabilitiesData.filter((item) => item.name === 'MemoryGB')[0];
|
|
236
|
-
if (totalMemoryObject.value !== undefined) {
|
|
237
|
-
totalMemoryGB = totalMemoryObject.value;
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
return totalMemoryGB;
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Gathers instance metadata.
|
|
244
|
-
*/
|
|
245
|
-
async getInstanceMetadata(subscriptionId, vmName, resourceGroupName) {
|
|
246
|
-
const credential = new identity_1.DefaultAzureCredential();
|
|
247
|
-
const client = new arm_compute_1.ComputeManagementClient(credential, subscriptionId);
|
|
248
|
-
const vmData = [];
|
|
249
|
-
for await (const item of client.virtualMachines.list(resourceGroupName)) {
|
|
250
|
-
vmData.push(item);
|
|
251
|
-
}
|
|
252
|
-
const filteredVmData = vmData.filter(item => item.name === vmName);
|
|
253
|
-
const location = filteredVmData.map(item => item.location ?? 'unknown')[0];
|
|
254
|
-
const instanceType = filteredVmData.map(item => item.hardwareProfile?.vmSize ?? 'unknown')[0];
|
|
255
|
-
const totalMemoryGB = await this.calculateTotalMemory({
|
|
256
|
-
client,
|
|
257
|
-
instanceType,
|
|
258
|
-
location,
|
|
259
|
-
});
|
|
260
|
-
return {
|
|
261
|
-
location,
|
|
262
|
-
instanceType,
|
|
263
|
-
totalMemoryGB,
|
|
264
|
-
};
|
|
265
|
-
}
|
|
266
|
-
/**
|
|
267
|
-
* Calculates number of seconds covered by each individual input using azure-time-window value
|
|
268
|
-
*/
|
|
269
|
-
calculateDurationPerInput(params) {
|
|
270
|
-
const window = params.window;
|
|
271
|
-
const splits = window.split(' ', 2);
|
|
272
|
-
const floatNumber = parseFloat(splits[0]);
|
|
273
|
-
const unit = splits[1];
|
|
274
|
-
let duration = 0;
|
|
275
|
-
const seconds = ['seconds', 'second', 'secs', 'sec', 's'];
|
|
276
|
-
const minutes = ['minutes', 'm', 'min', 'mins'];
|
|
277
|
-
const hours = ['hour', 'hours', 'h', 'hr', 'hrs'];
|
|
278
|
-
const days = ['days', 'd'];
|
|
279
|
-
const weeks = ['week', 'weeks', 'w', 'wk', 'wks'];
|
|
280
|
-
const months = ['month', 'months', 'mth'];
|
|
281
|
-
const years = ['year', 'years', 'yr', 'yrs', 'y', 'ys'];
|
|
282
|
-
if (seconds.includes(unit)) {
|
|
283
|
-
const secs_per_unit = 1;
|
|
284
|
-
duration = secs_per_unit * floatNumber;
|
|
285
|
-
}
|
|
286
|
-
if (minutes.includes(unit)) {
|
|
287
|
-
const secs_per_unit = 60;
|
|
288
|
-
duration = secs_per_unit * floatNumber;
|
|
289
|
-
}
|
|
290
|
-
if (hours.includes(unit)) {
|
|
291
|
-
const secs_per_unit = 3600;
|
|
292
|
-
duration = secs_per_unit * floatNumber;
|
|
293
|
-
}
|
|
294
|
-
if (days.includes(unit)) {
|
|
295
|
-
const secs_per_unit = 86400;
|
|
296
|
-
duration = secs_per_unit * floatNumber;
|
|
297
|
-
}
|
|
298
|
-
if (weeks.includes(unit)) {
|
|
299
|
-
const secs_per_unit = 604800;
|
|
300
|
-
duration = secs_per_unit * floatNumber;
|
|
301
|
-
}
|
|
302
|
-
if (months.includes(unit)) {
|
|
303
|
-
const secs_per_unit = 2419200;
|
|
304
|
-
duration = secs_per_unit * floatNumber;
|
|
305
|
-
}
|
|
306
|
-
if (years.includes(unit)) {
|
|
307
|
-
const secs_per_unit = 29030400;
|
|
308
|
-
duration = secs_per_unit * floatNumber;
|
|
309
|
-
}
|
|
310
|
-
return duration;
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
exports.AzureImporterModel = AzureImporterModel;
|
|
314
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2F6dXJlLWltcG9ydGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDhDQUF1RDtBQUN2RCxvREFBaUQ7QUFDakQsb0RBQTJEO0FBQzNELGlDQUFpQztBQUNqQyw2QkFBc0I7QUFVdEI7O0dBRUc7QUFDSCxNQUFNLGdCQUFnQixHQUFHLE9BQUM7S0FDdkIsTUFBTSxDQUFDO0lBQ04sMEJBQTBCLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUN0QywrQkFBK0IsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0lBQzNDLHNCQUFzQixFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7SUFDbEMsZUFBZSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7SUFDM0IsdUJBQXVCLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNuQyxTQUFTLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNoQyxRQUFRLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtDQUNyQixDQUFDO0tBQ0QsUUFBUSxFQUFFO0tBQ1YsS0FBSyxFQUFFLENBQUM7QUFFWCxNQUFhLGtCQUFrQjtJQUEvQjtRQUNFLGVBQVUsR0FBdUIsU0FBUyxDQUFDO1FBb0UzQzs7V0FFRztRQUNLLGtCQUFhLEdBQUcsQ0FDdEIsYUFBNEIsRUFDNUIsTUFBd0IsRUFDeEIsRUFBRTtZQUNGLE1BQU0sRUFDSixjQUFjLEVBQ2QsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixRQUFRLEVBQ1IsV0FBVyxFQUNYLE1BQU0sR0FDUCxHQUFHLE1BQU0sQ0FBQztZQUNYLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDO1lBQ3JDLE9BQU8sYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQy9CLGlCQUFpQixjQUFjLG1CQUFtQixpQkFBaUIsZ0RBQWdELE1BQU0sRUFBRSxFQUMzSDtnQkFD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RCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDekIsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDO1lBQzlCLFFBQVEsR0FBRyxhQUFhLEdBQUcsV0FBVyxDQUFDO1NBQ3hDO1FBQ0QsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQztZQUMvQixRQUFRLEdBQUcsYUFBYSxHQUFHLFdBQVcsQ0FBQztTQUN4QztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7Q0FDRjtBQTNZRCxnREEyWUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RlZmF1bHRBenVyZUNyZWRlbnRpYWx9IGZyb20gJ0BhenVyZS9pZGVudGl0eSc7XG5pbXBvcnQge01vbml0b3JDbGllbnR9IGZyb20gJ0BhenVyZS9hcm0tbW9uaXRvcic7XG5pbXBvcnQge0NvbXB1dGVNYW5hZ2VtZW50Q2xpZW50fSBmcm9tICdAYXp1cmUvYXJtLWNvbXB1dGUnO1xuaW1wb3J0ICogYXMgZG90ZW52IGZyb20gJ2RvdGVudic7XG5pbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7SU91dHB1dE1vZGVsSW50ZXJmYWNlfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7XG4gIEF6dXJlSW5wdXRzLFxuICBBenVyZU91dHB1dHMsXG4gIEdldE1ldHJpY3NQYXJhbXMsXG4gIEF6dXJlTWV0YWRhdGFPdXRwdXRzLFxufSBmcm9tICcuLi8uLi90eXBlcy9henVyZS1pbXBvcnRlcic7XG5cbi8qKlxuICogQHRvZG8gTW92ZSBhbGwgaW5wdXQgdmFsaWRhdGlvbiBzY2hlbWFzIHRvIHNlcGFyYXRlIGZpbGUuXG4gKi9cbmNvbnN0IGF6dXJlSW5wdXRTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgICdhenVyZS1vYnNlcnZhdGlvbi13aW5kb3cnOiB6LnN0cmluZygpLFxuICAgICdhenVyZS1vYnNlcnZhdGlvbi1hZ2dyZWdhdGlvbic6IHouc3RyaW5nKCksXG4gICAgJ2F6dXJlLXJlc291cmNlLWdyb3VwJzogei5zdHJpbmcoKSxcbiAgICAnYXp1cmUtdm0tbmFtZSc6IHouc3RyaW5nKCksXG4gICAgJ2F6dXJlLXN1YnNjcmlwdGlvbi1pZCc6IHouc3RyaW5nKCksXG4gICAgdGltZXN0YW1wOiB6LnN0cmluZygpLmRhdGV0aW1lKCksXG4gICAgZHVyYXRpb246IHoubnVtYmVyKCksXG4gIH0pXG4gIC5yZXF1aXJlZCgpXG4gIC5hcnJheSgpO1xuXG5leHBvcnQgY2xhc3MgQXp1cmVJbXBvcnRlck1vZGVsIGltcGxlbWVudHMgSU91dHB1dE1vZGVsSW50ZXJmYWNlIHtcbiAgYXV0aFBhcmFtczogb2JqZWN0IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBzdGF0aWNQYXJhbXM6IG9iamVjdCB8IHVuZGVmaW5lZDtcbiAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGF1dGhlbnRpY2F0ZShhdXRoUGFyYW1zOiBvYmplY3QpOiB2b2lkIHtcbiAgICB0aGlzLmF1dGhQYXJhbXMgPSBhdXRoUGFyYW1zO1xuICB9XG5cbiAgbW9kZWxJZGVudGlmaWVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdhenVyZSc7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGdpdmVuIGBpbnB1dHNgIHBhcmFtcy4gSWYgaXQncyB2YWxpZCwgdGhlbiBjYXB0dXJlcyBwYXJhbXMsIHRoZW4gcGFzc2VzIHRvIG1vbml0b3IuXG4gICAqIFJldHVybnMgZmxhdHRlbmVkIHJlc3VsdCBmcm9tIEF6dXJlIG1vbml0b3IgY2xpZW50LlxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZShpbnB1dHM6IGFueVtdKTogUHJvbWlzZTxhbnk+IHtcbiAgICBkb3RlbnYuY29uZmlnKCk7XG5cbiAgICBhenVyZUlucHV0U2NoZW1hLnBhcnNlKGlucHV0cyk7XG5cbiAgICBjb25zdCBpbnB1dCA9IGlucHV0c1swXTtcblxuICAgIGNvbnN0IHBhcmFtczogQXp1cmVJbnB1dHMgPSB7XG4gICAgICBhZ2dyZWdhdGlvbjogaW5wdXRbJ2F6dXJlLW9ic2VydmF0aW9uLWFnZ3JlZ2F0aW9uJ10sXG4gICAgICByZXNvdXJjZUdyb3VwTmFtZTogaW5wdXRbJ2F6dXJlLXJlc291cmNlLWdyb3VwJ10sXG4gICAgICB2bU5hbWU6IGlucHV0WydhenVyZS12bS1uYW1lJ10sXG4gICAgICBzdWJzY3JpcHRpb25JZDogaW5wdXRbJ2F6dXJlLXN1YnNjcmlwdGlvbi1pZCddLFxuICAgICAgdGltZXN0YW1wOiBpbnB1dFsndGltZXN0YW1wJ10sXG4gICAgICBkdXJhdGlvbjogaW5wdXRbJ2R1cmF0aW9uJ10sXG4gICAgICB3aW5kb3c6IGlucHV0WydhenVyZS1vYnNlcnZhdGlvbi13aW5kb3cnXSxcbiAgICAgIHRpbWVzcGFuOiB0aGlzLmdldFRpbWVTcGFuKGlucHV0WydkdXJhdGlvbiddLCBpbnB1dFsndGltZXN0YW1wJ10pLFxuICAgICAgaW50ZXJ2YWw6IHRoaXMuZ2V0SW50ZXJ2YWwoaW5wdXRbJ2F6dXJlLW9ic2VydmF0aW9uLXdpbmRvdyddKSxcbiAgICB9O1xuXG4gICAgLy8gQ2FsbCB0aGUgZnVuY3Rpb24gYW5kIGdldCBkYXRhIGJhY2sgaW4gQXp1cmVPdXRwdXRzIG9iamVjdFxuICAgIGNvbnN0IHJhd1Jlc3VsdHMgPSBhd2FpdCB0aGlzLmdldFZtVXNhZ2UocGFyYW1zKTtcbiAgICBjb25zdCByYXdNZXRhZGF0YVJlc3VsdHMgPSBhd2FpdCB0aGlzLmdldEluc3RhbmNlTWV0YWRhdGEoXG4gICAgICBwYXJhbXMuc3Vic2NyaXB0aW9uSWQsXG4gICAgICBwYXJhbXMudm1OYW1lLFxuICAgICAgcGFyYW1zLnJlc291cmNlR3JvdXBOYW1lXG4gICAgKTtcbiAgICBpbnB1dFsnZHVyYXRpb24nXSA9IHRoaXMuY2FsY3VsYXRlRHVyYXRpb25QZXJJbnB1dChwYXJhbXMpO1xuXG4gICAgY29uc3QgZW5yaWNoZWRPdXRwdXRzID0gcmF3UmVzdWx0cy50aW1lc3RhbXBzLm1hcCgodGltZXN0YW1wLCBpbmRleCkgPT4gKHtcbiAgICAgIHRpbWVzdGFtcCxcbiAgICAgICdjbG91ZC12ZW5kb3InOiAnYXp1cmUnLFxuICAgICAgJ2NwdS11dGlsJzogcmF3UmVzdWx0cy5jcHVfdXRpbHNbaW5kZXhdLFxuICAgICAgJ21lbS1hdmFpbGFibGVHQic6IHBhcnNlRmxvYXQocmF3UmVzdWx0cy5tZW1BdmFpbGFibGVbaW5kZXhdKSAqIDFlLTksXG4gICAgICAnbWVtLXVzZWRHQic6XG4gICAgICAgIHBhcnNlRmxvYXQocmF3TWV0YWRhdGFSZXN1bHRzLnRvdGFsTWVtb3J5R0IpIC1cbiAgICAgICAgcGFyc2VGbG9hdChyYXdSZXN1bHRzLm1lbUF2YWlsYWJsZVtpbmRleF0pICogMWUtOSxcbiAgICAgICd0b3RhbC1tZW1vcnlHQic6IHJhd01ldGFkYXRhUmVzdWx0cy50b3RhbE1lbW9yeUdCLFxuICAgICAgJ21lbS11dGlsJzpcbiAgICAgICAgKChwYXJzZUZsb2F0KHJhd01ldGFkYXRhUmVzdWx0cy50b3RhbE1lbW9yeUdCKSAtXG4gICAgICAgICAgcGFyc2VGbG9hdChyYXdSZXN1bHRzLm1lbUF2YWlsYWJsZVtpbmRleF0pICogMWUtOSkgL1xuICAgICAgICAgIHBhcnNlRmxvYXQocmF3TWV0YWRhdGFSZXN1bHRzLnRvdGFsTWVtb3J5R0IpKSAqXG4gICAgICAgIDEwMCxcbiAgICAgIGxvY2F0aW9uOiByYXdNZXRhZGF0YVJlc3VsdHMubG9jYXRpb24sXG4gICAgICAnY2xvdWQtaW5zdGFuY2UtdHlwZSc6IHJhd01ldGFkYXRhUmVzdWx0cy5pbnN0YW5jZVR5cGUsXG4gICAgfSkpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBPYmplY3QuZW50cmllcyhlbnJpY2hlZE91dHB1dHMpLmxlbmd0aDsgaSsrKSB7XG4gICAgICBlbnJpY2hlZE91dHB1dHNbaV0gPSBPYmplY3QuYXNzaWduKGVucmljaGVkT3V0cHV0c1tpXSwgaW5wdXQpO1xuICAgIH1cbiAgICByZXR1cm4gZW5yaWNoZWRPdXRwdXRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgQ1BVIG1ldHJpY3MgYnkgY2FsbGluZyBtb25pdG9yIGNsaWVudC5cbiAgICovXG4gIHByaXZhdGUgZ2V0Q1BVTWV0cmljcyA9IChcbiAgICBtb25pdG9yQ2xpZW50OiBNb25pdG9yQ2xpZW50LFxuICAgIHBhcmFtczogR2V0TWV0cmljc1BhcmFtc1xuICApID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBzdWJzY3JpcHRpb25JZCxcbiAgICAgIHJlc291cmNlR3JvdXBOYW1lLFxuICAgICAgdGltZXNwYW4sXG4gICAgICBpbnRlcnZhbCxcbiAgICAgIGFnZ3JlZ2F0aW9uLFxuICAgICAgdm1OYW1lLFxuICAgIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgbWV0cmljbmFtZXMgPSAnUGVyY2VudGFnZSBDUFUnO1xuICAgIHJldHVybiBtb25pdG9yQ2xpZW50Lm1ldHJpY3MubGlzdChcbiAgICAgIGBzdWJzY3JpcHRpb25zLyR7c3Vic2NyaXB0aW9uSWR9L3Jlc291cmNlR3JvdXBzLyR7cmVzb3VyY2VHcm91cE5hbWV9L3Byb3ZpZGVycy9NaWNyb3NvZnQuQ29tcHV0ZS92aXJ0dWFsTWFjaGluZXMvJHt2bU5hbWV9YCxcbiAgICAgIHtcbiAgICAgICAgbWV0cmljbmFtZXMsXG4gICAgICAgIHRpbWVzcGFuLFxuICAgICAgICBpbnRlcnZhbCxcbiAgICAgICAgYWdncmVnYXRpb24sXG4gICAgICB9XG4gICAgKTtcbiAgfTtcblxuICAvKipcbiAgICogR2V0cyBSQVcgbWV0cmljcyBieSBjYWxsaW5nIG1vbml0b3IgY2xpZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRSYXdNZXRyaWNzID0gKFxuICAgIG1vbml0b3JDbGllbnQ6IE1vbml0b3JDbGllbnQsXG4gICAgcGFyYW1zOiBHZXRNZXRyaWNzUGFyYW1zXG4gICkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHN1YnNjcmlwdGlvbklkLFxuICAgICAgcmVzb3VyY2VHcm91cE5hbWUsXG4gICAgICB0aW1lc3BhbixcbiAgICAgIGludGVydmFsLFxuICAgICAgYWdncmVnYXRpb24sXG4gICAgICB2bU5hbWUsXG4gICAgfSA9IHBhcmFtcztcbiAgICBjb25zdCBtZXRyaWNuYW1lcyA9ICdBdmFpbGFibGUgTWVtb3J5IEJ5dGVzJztcbiAgICByZXR1cm4gbW9uaXRvckNsaWVudC5tZXRyaWNzLmxpc3QoXG4gICAgICBgc3Vic2NyaXB0aW9ucy8ke3N1YnNjcmlwdGlvbklkfS9yZXNvdXJjZUdyb3Vwcy8ke3Jlc291cmNlR3JvdXBOYW1lfS9wcm92aWRlcnMvTWljcm9zb2Z0LkNvbXB1dGUvdmlydHVhbE1hY2hpbmVzLyR7dm1OYW1lfWAsXG4gICAgICB7XG4gICAgICAgIG1ldHJpY25hbWVzLFxuICAgICAgICB0aW1lc3BhbixcbiAgICAgICAgaW50ZXJ2YWwsXG4gICAgICAgIGFnZ3JlZ2F0aW9uLFxuICAgICAgfVxuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFVzZSBEZWZhdWx0QXp1cmVDcmVkZW50aWFsIHdoaWNoIHdvcmtzIHdpdGggQVpVUkVfVEVOQU5UX0lELCBBWlVSRV9DTElFTlRfSUQsIGFuZCBBWlVSRV9DTElFTlRfU0VDUkVUIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAgICogWW91IGNhbiBhbHNvIHVzZSBvdGhlciBjcmVkZW50aWFscyBwcm92aWRlZCBieSBAYXp1cmUvaWRlbnRpdHkgcGFja2FnZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0Vm1Vc2FnZShwYXJhbXM6IEF6dXJlSW5wdXRzKTogUHJvbWlzZTxBenVyZU91dHB1dHM+IHtcbiAgICBjb25zdCB7XG4gICAgICBzdWJzY3JpcHRpb25JZCxcbiAgICAgIHJlc291cmNlR3JvdXBOYW1lLFxuICAgICAgdm1OYW1lLFxuICAgICAgdGltZXNwYW4sXG4gICAgICBpbnRlcnZhbCxcbiAgICAgIGFnZ3JlZ2F0aW9uLFxuICAgIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgZ2V0TWV0cmljUGFyYW1zID0ge1xuICAgICAgc3Vic2NyaXB0aW9uSWQsXG4gICAgICByZXNvdXJjZUdyb3VwTmFtZSxcbiAgICAgIHZtTmFtZSxcbiAgICAgIHRpbWVzcGFuLFxuICAgICAgaW50ZXJ2YWwsXG4gICAgICBhZ2dyZWdhdGlvbixcbiAgICB9O1xuXG4gICAgY29uc3QgdGltZXN0YW1wczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBjcHVfdXRpbHM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgbWVtQXZhaWxhYmxlOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgY29uc3QgY3JlZGVudGlhbCA9IG5ldyBEZWZhdWx0QXp1cmVDcmVkZW50aWFsKCk7XG4gICAgY29uc3QgbW9uaXRvckNsaWVudCA9IG5ldyBNb25pdG9yQ2xpZW50KGNyZWRlbnRpYWwsIHN1YnNjcmlwdGlvbklkKTtcbiAgICBjb25zdCBjcHVNZXRyaWNzUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldENQVU1ldHJpY3MoXG4gICAgICBtb25pdG9yQ2xpZW50LFxuICAgICAgZ2V0TWV0cmljUGFyYW1zXG4gICAgKTtcblxuICAgIC8vIHBhcnNlIENQVSB1dGlsIGRhdGFcbiAgICBmb3IgKGNvbnN0IHRpbWVTZXJpZXMgb2YgY3B1TWV0cmljc1Jlc3BvbnNlLnZhbHVlWzBdLnRpbWVzZXJpZXMgfHwgW10pIHtcbiAgICAgIGNvbnN0IHRpbWVTZXJpZXNEYXRhID0gdGltZVNlcmllcy5kYXRhIHx8IFtdO1xuICAgICAgZm9yIChjb25zdCBkYXRhIG9mIHRpbWVTZXJpZXNEYXRhKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGltZXN0YW1wcy5wdXNoKGRhdGEudGltZVN0YW1wLnRvSVNPU3RyaW5nKCkpO1xuXG4gICAgICAgICAgaWYgKCEoZGF0YS5hdmVyYWdlID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICBjcHVfdXRpbHMucHVzaChkYXRhLmF2ZXJhZ2UudG9TdHJpbmcoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciByZXRyaWV2aW5nIENQVSBkYXRhJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByYW1NZXRyaWNzUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldFJhd01ldHJpY3MoXG4gICAgICBtb25pdG9yQ2xpZW50LFxuICAgICAgZ2V0TWV0cmljUGFyYW1zXG4gICAgKTtcblxuICAgIC8vIHBhcnNlIHJhbSB1dGlsIGRhdGFcbiAgICBmb3IgKGNvbnN0IHRpbWVTZXJpZXMgb2YgcmFtTWV0cmljc1Jlc3BvbnNlLnZhbHVlWzBdLnRpbWVzZXJpZXMgfHwgW10pIHtcbiAgICAgIGZvciAoY29uc3QgZGF0YSBvZiB0aW1lU2VyaWVzLmRhdGEgfHwgW10pIHtcbiAgICAgICAgaWYgKCEodHlwZW9mIGRhdGEuYXZlcmFnZSA9PT0gJ3VuZGVmaW5lZCcpKSB7XG4gICAgICAgICAgbWVtQXZhaWxhYmxlLnB1c2goZGF0YS5hdmVyYWdlLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRpbWVzdGFtcHMsXG4gICAgICBjcHVfdXRpbHMsXG4gICAgICBtZW1BdmFpbGFibGUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0YWxpemUgc3RhdGljIHBhcmFtcy5cbiAgICovXG4gIGFzeW5jIGNvbmZpZ3VyZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgc3RhdGljUGFyYW1zOiBvYmplY3QgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxJT3V0cHV0TW9kZWxJbnRlcmZhY2U+IHtcbiAgICB0aGlzLnN0YXRpY1BhcmFtcyA9IHN0YXRpY1BhcmFtcztcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVGFrZXMgaW1wbCB0aW1lc3RhbXAgYW5kIGR1cmF0aW9uIGFuZCByZXR1cm5zIGFuIEF6dXJlIGZvcm1hdHRlZCBgdGltZXNwYW5gIHZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRUaW1lU3BhbihkdXJhdGlvbjogbnVtYmVyLCB0aW1lc3RhbXA6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSh0aW1lc3RhbXApO1xuICAgIGNvbnN0IGVuZCA9IG5ldyBEYXRlKHN0YXJ0LmdldFRpbWUoKSArIGR1cmF0aW9uICogMTAwMCkudG9JU09TdHJpbmcoKTtcblxuICAgIHJldHVybiBgJHtzdGFydC50b0lTT1N0cmluZygpfS8ke2VuZH1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgZ2l2ZW4gYGFtb3VudE9mVGltZWAgYWNjb3JkaW5nIHRvIGdpdmVuIGB1bml0YC5cbiAgICogVGhyb3dzIGVycm9yIGlmIGdpdmVuIGB1bml0YCBpcyBub3Qgc3VwcG9ydGVkLlxuICAgKi9cbiAgcHJpdmF0ZSB0aW1lVW5pdENvbnZlcnRlcihhbW91bnRPZlRpbWU6IG51bWJlciwgdW5pdDogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2Vjb25kcyA9IFsnc2Vjb25kcycsICdzZWNvbmQnLCAnc2VjcycsICdzZWMnLCAncyddO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBbJ21pbnV0ZXMnLCAnbScsICdtaW4nLCAnbWlucyddO1xuICAgIGNvbnN0IGhvdXJzID0gWydob3VyJywgJ2hvdXJzJywgJ2gnLCAnaHInLCAnaHJzJ107XG4gICAgY29uc3QgZGF5cyA9IFsnZGF5cycsICdkJ107XG4gICAgY29uc3Qgd2Vla3MgPSBbJ3dlZWsnLCAnd2Vla3MnLCAndycsICd3aycsICd3a3MnXTtcbiAgICBjb25zdCBtb250aHMgPSBbJ21vbnRoJywgJ21vbnRocycsICdtdGgnXTtcbiAgICBjb25zdCB5ZWFycyA9IFsneWVhcicsICd5ZWFycycsICd5cicsICd5cnMnLCAneScsICd5cyddO1xuXG4gICAgaWYgKHNlY29uZHMuaW5jbHVkZXModW5pdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIG1pbmltdW0gdW5pdCBvZiB0aW1lIGZvciBhenVyZSBpbXBvcnRlciBpcyBtaW51dGVzJyk7XG4gICAgfVxuXG4gICAgaWYgKG1pbnV0ZXMuaW5jbHVkZXModW5pdCkpIHtcbiAgICAgIHJldHVybiBgVCR7YW1vdW50T2ZUaW1lfU1gO1xuICAgIH1cblxuICAgIGlmIChob3Vycy5pbmNsdWRlcyh1bml0KSkge1xuICAgICAgcmV0dXJuIGBUJHthbW91bnRPZlRpbWV9SGA7XG4gICAgfVxuXG4gICAgaWYgKGRheXMuaW5jbHVkZXModW5pdCkpIHtcbiAgICAgIHJldHVybiBgJHthbW91bnRPZlRpbWV9RGA7XG4gICAgfVxuXG4gICAgaWYgKHdlZWtzLmluY2x1ZGVzKHVuaXQpKSB7XG4gICAgICByZXR1cm4gYCR7YW1vdW50T2ZUaW1lfVdgO1xuICAgIH1cblxuICAgIGlmIChtb250aHMuaW5jbHVkZXModW5pdCkpIHtcbiAgICAgIHJldHVybiBgJHthbW91bnRPZlRpbWV9TWA7XG4gICAgfVxuXG4gICAgaWYgKHllYXJzLmluY2x1ZGVzKHVuaXQpKSB7XG4gICAgICByZXR1cm4gYCR7YW1vdW50T2ZUaW1lfVlgO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignYXp1cmUtb2JzZXJ2YXRpb24td2luZG93IHBhcmFtZXRlciBpcyBtYWxmb3JtZWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlcyBncmFudWxhcml0eSBhcyBlLmcuIFwiMSBtXCIsIFwiMSBoclwiIGFuZCB0cmFuc2xhdGVzIGludG8gSVNPODYwMSBhcyBleHBlY3RlZCBieSB0aGUgYXp1cmUgQVBJLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRJbnRlcnZhbCh3aW5kb3c6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3BsaXRzID0gd2luZG93LnNwbGl0KCcgJywgMik7XG4gICAgY29uc3QgZmxvYXROdW1iZXI6IG51bWJlciA9IHBhcnNlRmxvYXQoc3BsaXRzWzBdKTtcbiAgICAvLyBpZiBudW1iZXIgaXMgYSB3aG9sZSBudW1iZXIsIGNhc3QgYXMgaW50IHRvIGF2b2lkIHRoZSBcIi4wXCJcbiAgICBjb25zdCBhbW91bnRPZlRpbWUgPVxuICAgICAgZmxvYXROdW1iZXIgJSAxID09PSAwID8gTWF0aC5mbG9vcihmbG9hdE51bWJlcikgOiBmbG9hdE51bWJlcjtcbiAgICBjb25zdCB1bml0OiBzdHJpbmcgPSBzcGxpdHNbMV07XG4gICAgY29uc3QgbnVtYmVySW5Gb3JtYXQgPSB0aGlzLnRpbWVVbml0Q29udmVydGVyKGFtb3VudE9mVGltZSwgdW5pdCk7XG5cbiAgICByZXR1cm4gYFAke251bWJlckluRm9ybWF0fWA7XG4gIH1cblxuICAvKipcbiAgICogQ2FjdWxhdGVzIHRvdGFsIG1lbW9yeSBiYXNlZCBvbiBkYXRhIGZyb20gQ29tcHV0ZU1hbmFnZW1lbnRDbGllbnQgcmVzcG9uc2UuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNhbGN1bGF0ZVRvdGFsTWVtb3J5KHBhcmFtczogYW55KSB7XG4gICAgY29uc3Qge2NsaWVudCwgaW5zdGFuY2VUeXBlLCBsb2NhdGlvbn0gPSBwYXJhbXM7XG4gICAgLy8gaGVyZSB3ZSBncmFiIHRoZSB0b3RhbCBtZW1vcnkgZm9yIHRoZSBpbnN0YW5jZVxuICAgIGNvbnN0IG1lbVJlc3BvbnNlRGF0YSA9IFtdO1xuXG4gICAgZm9yIGF3YWl0IChjb25zdCBpdGVtIG9mIGNsaWVudC5yZXNvdXJjZVNrdXMubGlzdCgpKSB7XG4gICAgICBtZW1SZXNwb25zZURhdGEucHVzaChpdGVtKTtcbiAgICB9XG5cbiAgICBsZXQgdG90YWxNZW1vcnlHQiA9ICcnO1xuICAgIGNvbnN0IGZpbHRlcmVkTWVtRGF0YSA9IG1lbVJlc3BvbnNlRGF0YVxuICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0ucmVzb3VyY2VUeXBlID09PSAndmlydHVhbE1hY2hpbmVzJylcbiAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLm5hbWUgPT09IGluc3RhbmNlVHlwZSlcbiAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLmxvY2F0aW9ucyAhPT0gdW5kZWZpbmVkKTtcblxuICAgIGNvbnN0IHZtQ2FwYWJpbGl0aWVzRGF0YSA9IGZpbHRlcmVkTWVtRGF0YVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgaXRlbSA9PiBpdGVtLmxvY2F0aW9ucyAhPT0gdW5kZWZpbmVkICYmIGl0ZW0ubG9jYXRpb25zWzBdID09PSBsb2NhdGlvblxuICAgICAgKVxuICAgICAgLm1hcChpdGVtID0+IGl0ZW0uY2FwYWJpbGl0aWVzKVswXTtcblxuICAgIGlmICh2bUNhcGFiaWxpdGllc0RhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdG90YWxNZW1vcnlPYmplY3QgPSB2bUNhcGFiaWxpdGllc0RhdGEuZmlsdGVyKFxuICAgICAgICAoaXRlbTogYW55KSA9PiBpdGVtLm5hbWUgPT09ICdNZW1vcnlHQidcbiAgICAgIClbMF07XG4gICAgICBpZiAodG90YWxNZW1vcnlPYmplY3QudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0b3RhbE1lbW9yeUdCID0gdG90YWxNZW1vcnlPYmplY3QudmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvdGFsTWVtb3J5R0I7XG4gIH1cblxuICAvKipcbiAgICogR2F0aGVycyBpbnN0YW5jZSBtZXRhZGF0YS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0SW5zdGFuY2VNZXRhZGF0YShcbiAgICBzdWJzY3JpcHRpb25JZDogc3RyaW5nLFxuICAgIHZtTmFtZTogc3RyaW5nLFxuICAgIHJlc291cmNlR3JvdXBOYW1lOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxBenVyZU1ldGFkYXRhT3V0cHV0cz4ge1xuICAgIGNvbnN0IGNyZWRlbnRpYWwgPSBuZXcgRGVmYXVsdEF6dXJlQ3JlZGVudGlhbCgpO1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBDb21wdXRlTWFuYWdlbWVudENsaWVudChjcmVkZW50aWFsLCBzdWJzY3JpcHRpb25JZCk7XG5cbiAgICBjb25zdCB2bURhdGEgPSBbXTtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IGl0ZW0gb2YgY2xpZW50LnZpcnR1YWxNYWNoaW5lcy5saXN0KHJlc291cmNlR3JvdXBOYW1lKSkge1xuICAgICAgdm1EYXRhLnB1c2goaXRlbSk7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyZWRWbURhdGEgPSB2bURhdGEuZmlsdGVyKGl0ZW0gPT4gaXRlbS5uYW1lID09PSB2bU5hbWUpO1xuICAgIGNvbnN0IGxvY2F0aW9uID0gZmlsdGVyZWRWbURhdGEubWFwKGl0ZW0gPT4gaXRlbS5sb2NhdGlvbiA/PyAndW5rbm93bicpWzBdO1xuICAgIGNvbnN0IGluc3RhbmNlVHlwZSA9IGZpbHRlcmVkVm1EYXRhLm1hcChcbiAgICAgIGl0ZW0gPT4gaXRlbS5oYXJkd2FyZVByb2ZpbGU/LnZtU2l6ZSA/PyAndW5rbm93bidcbiAgICApWzBdO1xuXG4gICAgY29uc3QgdG90YWxNZW1vcnlHQiA9IGF3YWl0IHRoaXMuY2FsY3VsYXRlVG90YWxNZW1vcnkoe1xuICAgICAgY2xpZW50LFxuICAgICAgaW5zdGFuY2VUeXBlLFxuICAgICAgbG9jYXRpb24sXG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbG9jYXRpb24sXG4gICAgICBpbnN0YW5jZVR5cGUsXG4gICAgICB0b3RhbE1lbW9yeUdCLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBudW1iZXIgb2Ygc2Vjb25kcyBjb3ZlcmVkIGJ5IGVhY2ggaW5kaXZpZHVhbCBpbnB1dCB1c2luZyBhenVyZS10aW1lLXdpbmRvdyB2YWx1ZVxuICAgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVEdXJhdGlvblBlcklucHV0KHBhcmFtczogQXp1cmVJbnB1dHMpOiBudW1iZXIge1xuICAgIGNvbnN0IHdpbmRvdyA9IHBhcmFtcy53aW5kb3c7XG4gICAgY29uc3Qgc3BsaXRzID0gd2luZG93LnNwbGl0KCcgJywgMik7XG4gICAgY29uc3QgZmxvYXROdW1iZXIgPSBwYXJzZUZsb2F0KHNwbGl0c1swXSk7XG4gICAgY29uc3QgdW5pdCA9IHNwbGl0c1sxXTtcbiAgICBsZXQgZHVyYXRpb24gPSAwO1xuXG4gICAgY29uc3Qgc2Vjb25kcyA9IFsnc2Vjb25kcycsICdzZWNvbmQnLCAnc2VjcycsICdzZWMnLCAncyddO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBbJ21pbnV0ZXMnLCAnbScsICdtaW4nLCAnbWlucyddO1xuICAgIGNvbnN0IGhvdXJzID0gWydob3VyJywgJ2hvdXJzJywgJ2gnLCAnaHInLCAnaHJzJ107XG4gICAgY29uc3QgZGF5cyA9IFsnZGF5cycsICdkJ107XG4gICAgY29uc3Qgd2Vla3MgPSBbJ3dlZWsnLCAnd2Vla3MnLCAndycsICd3aycsICd3a3MnXTtcbiAgICBjb25zdCBtb250aHMgPSBbJ21vbnRoJywgJ21vbnRocycsICdtdGgnXTtcbiAgICBjb25zdCB5ZWFycyA9IFsneWVhcicsICd5ZWFycycsICd5cicsICd5cnMnLCAneScsICd5cyddO1xuXG4gICAgaWYgKHNlY29uZHMuaW5jbHVkZXModW5pdCkpIHtcbiAgICAgIGNvbnN0IHNlY3NfcGVyX3VuaXQgPSAxO1xuICAgICAgZHVyYXRpb24gPSBzZWNzX3Blcl91bml0ICogZmxvYXROdW1iZXI7XG4gICAgfVxuICAgIGlmIChtaW51dGVzLmluY2x1ZGVzKHVuaXQpKSB7XG4gICAgICBjb25zdCBzZWNzX3Blcl91bml0ID0gNjA7XG4gICAgICBkdXJhdGlvbiA9IHNlY3NfcGVyX3VuaXQgKiBmbG9hdE51bWJlcjtcbiAgICB9XG4gICAgaWYgKGhvdXJzLmluY2x1ZGVzKHVuaXQpKSB7XG4gICAgICBjb25zdCBzZWNzX3Blcl91bml0ID0gMzYwMDtcbiAgICAgIGR1cmF0aW9uID0gc2Vjc19wZXJfdW5pdCAqIGZsb2F0TnVtYmVyO1xuICAgIH1cbiAgICBpZiAoZGF5cy5pbmNsdWRlcyh1bml0KSkge1xuICAgICAgY29uc3Qgc2Vjc19wZXJfdW5pdCA9IDg2NDAwO1xuICAgICAgZHVyYXRpb24gPSBzZWNzX3Blcl91bml0ICogZmxvYXROdW1iZXI7XG4gICAgfVxuICAgIGlmICh3ZWVrcy5pbmNsdWRlcyh1bml0KSkge1xuICAgICAgY29uc3Qgc2Vjc19wZXJfdW5pdCA9IDYwNDgwMDtcbiAgICAgIGR1cmF0aW9uID0gc2Vjc19wZXJfdW5pdCAqIGZsb2F0TnVtYmVyO1xuICAgIH1cbiAgICBpZiAobW9udGhzLmluY2x1ZGVzKHVuaXQpKSB7XG4gICAgICBjb25zdCBzZWNzX3Blcl91bml0ID0gMjQxOTIwMDtcbiAgICAgIGR1cmF0aW9uID0gc2Vjc19wZXJfdW5pdCAqIGZsb2F0TnVtYmVyO1xuICAgIH1cbiAgICBpZiAoeWVhcnMuaW5jbHVkZXModW5pdCkpIHtcbiAgICAgIGNvbnN0IHNlY3NfcGVyX3VuaXQgPSAyOTAzMDQwMDtcbiAgICAgIGR1cmF0aW9uID0gc2Vjc19wZXJfdW5pdCAqIGZsb2F0TnVtYmVyO1xuICAgIH1cblxuICAgIHJldHVybiBkdXJhdGlvbjtcbiAgfVxufVxuIl19
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { IOutputModelInterface } from '../interfaces';
|
|
2
|
-
import { BoaviztaInstanceTypes } from '../../types/boavizta';
|
|
3
|
-
import { KeyValuePair } from '../../types/common';
|
|
4
|
-
declare abstract class BoaviztaOutputModel implements IOutputModelInterface {
|
|
5
|
-
name: string | undefined;
|
|
6
|
-
sharedParams: object | undefined;
|
|
7
|
-
metricType: 'cpu-util' | 'gpu-util' | 'ram-util';
|
|
8
|
-
expectedLifespan: number;
|
|
9
|
-
protected authCredentials: object | undefined;
|
|
10
|
-
authenticate(authParams: object): Promise<void>;
|
|
11
|
-
configure(name: string, staticParams?: object | undefined): Promise<IOutputModelInterface>;
|
|
12
|
-
abstract modelIdentifier(): string;
|
|
13
|
-
abstract fetchData(usageData: object | undefined): Promise<object>;
|
|
14
|
-
supportedLocations(): Promise<string[]>;
|
|
15
|
-
transformToBoaviztaUsage(duration: number, metric: number): KeyValuePair;
|
|
16
|
-
execute(inputs?: object | object[] | undefined): Promise<any[]>;
|
|
17
|
-
addLocationToUsage(usageRaw: KeyValuePair): KeyValuePair;
|
|
18
|
-
protected abstract captureStaticParams(staticParams: object): object;
|
|
19
|
-
protected formatResponse(data: KeyValuePair): KeyValuePair;
|
|
20
|
-
protected calculateUsageForinput(input: KeyValuePair): Promise<KeyValuePair>;
|
|
21
|
-
}
|
|
22
|
-
export declare class BoaviztaCpuOutputModel extends BoaviztaOutputModel implements IOutputModelInterface {
|
|
23
|
-
sharedParams: object | undefined;
|
|
24
|
-
name: string | undefined;
|
|
25
|
-
verbose: boolean;
|
|
26
|
-
allocation: string;
|
|
27
|
-
private readonly componentType;
|
|
28
|
-
constructor();
|
|
29
|
-
modelIdentifier(): string;
|
|
30
|
-
fetchData(usageData: object | undefined): Promise<object>;
|
|
31
|
-
protected captureStaticParams(staticParams: object): Promise<object>;
|
|
32
|
-
}
|
|
33
|
-
export declare class BoaviztaCloudOutputModel extends BoaviztaOutputModel implements IOutputModelInterface {
|
|
34
|
-
sharedParams: object | undefined;
|
|
35
|
-
instanceTypes: BoaviztaInstanceTypes;
|
|
36
|
-
name: string | undefined;
|
|
37
|
-
verbose: boolean;
|
|
38
|
-
allocation: string;
|
|
39
|
-
modelIdentifier(): string;
|
|
40
|
-
validateLocation(staticParamsCast: object): Promise<string | void>;
|
|
41
|
-
validateInstanceType(staticParamsCast: object): Promise<void>;
|
|
42
|
-
validateProvider(staticParamsCast: object): Promise<void>;
|
|
43
|
-
supportedInstancesList(provider: string): Promise<any>;
|
|
44
|
-
supportedProvidersList(): Promise<string[]>;
|
|
45
|
-
fetchData(usageData: object | undefined): Promise<object>;
|
|
46
|
-
protected captureStaticParams(staticParams: object): Promise<object>;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* For JSII.
|
|
50
|
-
*/
|
|
51
|
-
export { IOutputModelInterface } from '../interfaces';
|
|
52
|
-
export { BoaviztaInstanceTypes, IBoaviztaUsageSCI } from '../../types/boavizta';
|
|
53
|
-
export { KeyValuePair } from '../../types/common';
|