@grnsft/if 0.0.5 → 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/config/config.d.ts +0 -23
- package/build/config/config.js +1 -24
- package/build/index.js +3 -4
- package/build/lib/models-universe.js +95 -0
- package/build/lib/observatory.js +31 -0
- package/build/lib/supercomputer.js +109 -0
- 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/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/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.js +0 -95
- package/build/util/observatory.js +0 -31
- 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
- /package/build/{util → lib}/models-universe.d.ts +0 -0
- /package/build/{util → lib}/observatory.d.ts +0 -0
- /package/build/{util → lib}/supercomputer.d.ts +0 -0
|
@@ -1,254 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BoaviztaCloudOutputModel = exports.BoaviztaCpuOutputModel = void 0;
|
|
4
|
-
const axios_1 = require("axios");
|
|
5
|
-
const config_1 = require("../../config");
|
|
6
|
-
const { MODEL_IDS } = config_1.CONFIG;
|
|
7
|
-
const { BOAVIZTA_CPU, BOAVIZTA_CLOUD } = MODEL_IDS;
|
|
8
|
-
class BoaviztaOutputModel {
|
|
9
|
-
constructor() {
|
|
10
|
-
this.sharedParams = undefined;
|
|
11
|
-
this.metricType = 'cpu-util';
|
|
12
|
-
this.expectedLifespan = 4 * 365 * 24 * 60 * 60;
|
|
13
|
-
}
|
|
14
|
-
async authenticate(authParams) {
|
|
15
|
-
this.authCredentials = authParams;
|
|
16
|
-
}
|
|
17
|
-
async configure(name, staticParams = undefined) {
|
|
18
|
-
this.name = name;
|
|
19
|
-
this.sharedParams = await this.captureStaticParams(staticParams ?? {});
|
|
20
|
-
return this;
|
|
21
|
-
}
|
|
22
|
-
// list of supported locations by the model
|
|
23
|
-
async supportedLocations() {
|
|
24
|
-
const countries = await axios_1.default.get('https://api.boavizta.org/v1/utils/country_code');
|
|
25
|
-
return Object.values(countries.data);
|
|
26
|
-
}
|
|
27
|
-
// converts the usage from IMPL input to the format required by Boavizta API.
|
|
28
|
-
transformToBoaviztaUsage(duration, metric) {
|
|
29
|
-
// duration is in seconds, convert to hours
|
|
30
|
-
// metric is between 0 and 1, convert to percentage
|
|
31
|
-
let usageInput = {
|
|
32
|
-
hours_use_time: duration / 3600.0,
|
|
33
|
-
time_workload: metric,
|
|
34
|
-
};
|
|
35
|
-
// convert expected lifespan from seconds to years
|
|
36
|
-
usageInput['years_life_time'] =
|
|
37
|
-
this.expectedLifespan / (365.0 * 24.0 * 60.0 * 60.0);
|
|
38
|
-
usageInput = this.addLocationToUsage(usageInput);
|
|
39
|
-
return usageInput;
|
|
40
|
-
}
|
|
41
|
-
// Calculates the output of the given usage
|
|
42
|
-
async execute(inputs = undefined) {
|
|
43
|
-
if (Array.isArray(inputs)) {
|
|
44
|
-
const results = [];
|
|
45
|
-
for (const input of inputs) {
|
|
46
|
-
const usageResult = await this.calculateUsageForinput(input);
|
|
47
|
-
results.push(usageResult);
|
|
48
|
-
}
|
|
49
|
-
return results;
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
throw new Error('Parameter Not Given: invalid inputs parameter. Expecting an array of inputs');
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
// Adds location to usage if location is defined in sharedParams
|
|
56
|
-
addLocationToUsage(usageRaw) {
|
|
57
|
-
if (this.sharedParams !== undefined && 'location' in this.sharedParams) {
|
|
58
|
-
usageRaw['usage_location'] = this.sharedParams['location'];
|
|
59
|
-
}
|
|
60
|
-
return usageRaw;
|
|
61
|
-
}
|
|
62
|
-
// extracts information from Boavizta API response to return the output in the format required by IMPL
|
|
63
|
-
formatResponse(data) {
|
|
64
|
-
let m = 0;
|
|
65
|
-
let e = 0;
|
|
66
|
-
if ('outputs' in data) {
|
|
67
|
-
// embodied-carbon output is in kgCO2eq, convert to gCO2eq
|
|
68
|
-
m = data['outputs']['gwp']['embedded']['value'] * 1000;
|
|
69
|
-
// use output is in J , convert to kWh.
|
|
70
|
-
// 1,000,000 J / 3600 = 277.7777777777778 Wh.
|
|
71
|
-
// 1 MJ / 3.6 = 0.278 kWh
|
|
72
|
-
e = data['outputs']['pe']['use']['value'] / 3.6;
|
|
73
|
-
}
|
|
74
|
-
else if ('gwp' in data && 'pe' in data) {
|
|
75
|
-
// embodied-carbon output is in kgCO2eq, convert to gCO2eq
|
|
76
|
-
m = data['gwp']['embodied-carbon'] * 1000;
|
|
77
|
-
// use output is in J , convert to kWh.
|
|
78
|
-
// 1,000,000 J / 3600 = 277.7777777777778 Wh.
|
|
79
|
-
// 1 MJ / 3.6 = 0.278 kWh
|
|
80
|
-
e = data['pe']['use'] / 3.6;
|
|
81
|
-
}
|
|
82
|
-
return { 'embodied-carbon': m, energy: e };
|
|
83
|
-
}
|
|
84
|
-
// converts the usage to the format required by Boavizta API.
|
|
85
|
-
async calculateUsageForinput(input) {
|
|
86
|
-
if ('timestamp' in input &&
|
|
87
|
-
'duration' in input &&
|
|
88
|
-
this.metricType in input) {
|
|
89
|
-
const usageInput = this.transformToBoaviztaUsage(input['duration'], input[this.metricType]);
|
|
90
|
-
const usage = (await this.fetchData(usageInput));
|
|
91
|
-
return usage;
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
throw new Error('Invalid Input: Invalid inputs parameter');
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
class BoaviztaCpuOutputModel extends BoaviztaOutputModel {
|
|
99
|
-
constructor() {
|
|
100
|
-
super();
|
|
101
|
-
this.sharedParams = undefined;
|
|
102
|
-
this.verbose = false;
|
|
103
|
-
this.allocation = 'LINEAR';
|
|
104
|
-
this.componentType = 'cpu';
|
|
105
|
-
this.metricType = 'cpu-util';
|
|
106
|
-
this.componentType = 'cpu';
|
|
107
|
-
}
|
|
108
|
-
modelIdentifier() {
|
|
109
|
-
return BOAVIZTA_CPU;
|
|
110
|
-
}
|
|
111
|
-
async fetchData(usageData) {
|
|
112
|
-
if (this.sharedParams === undefined) {
|
|
113
|
-
throw new Error('Improper configure: Missing configuration parameters');
|
|
114
|
-
}
|
|
115
|
-
const dataCast = this.sharedParams;
|
|
116
|
-
dataCast['usage'] = usageData;
|
|
117
|
-
const response = await axios_1.default.post(`https://api.boavizta.org/v1/component/${this.componentType}?verbose=${this.verbose}&duration=${dataCast['usage']['hours_use_time']}`, dataCast);
|
|
118
|
-
const result = this.formatResponse(response.data);
|
|
119
|
-
// console.log(
|
|
120
|
-
// 'hitting ',
|
|
121
|
-
// `https://api.boavizta.org/v1/component/${this.componentType}?verbose=${this.verbose}&duration=${dataCast['usage']['hours_use_time']}`,
|
|
122
|
-
// dataCast,
|
|
123
|
-
// JSON.stringify(response.data)
|
|
124
|
-
// );
|
|
125
|
-
return {
|
|
126
|
-
'e-cpu': result.energy,
|
|
127
|
-
'embodied-carbon': result['embodied-carbon'],
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
async captureStaticParams(staticParams) {
|
|
131
|
-
if ('verbose' in staticParams) {
|
|
132
|
-
this.verbose = staticParams.verbose ?? false;
|
|
133
|
-
staticParams.verbose = undefined;
|
|
134
|
-
}
|
|
135
|
-
if (!('physical-processor' in staticParams)) {
|
|
136
|
-
throw new Error('Improper configure: Missing processor parameter');
|
|
137
|
-
}
|
|
138
|
-
if (!('core-units' in staticParams)) {
|
|
139
|
-
throw new Error('Improper configure: Missing core-units parameter');
|
|
140
|
-
}
|
|
141
|
-
if ('expected-lifespan' in staticParams) {
|
|
142
|
-
this.expectedLifespan = staticParams['expected-lifespan'];
|
|
143
|
-
}
|
|
144
|
-
this.sharedParams = Object.assign({}, staticParams);
|
|
145
|
-
return this.sharedParams;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
exports.BoaviztaCpuOutputModel = BoaviztaCpuOutputModel;
|
|
149
|
-
class BoaviztaCloudOutputModel extends BoaviztaOutputModel {
|
|
150
|
-
constructor() {
|
|
151
|
-
super(...arguments);
|
|
152
|
-
this.sharedParams = undefined;
|
|
153
|
-
this.instanceTypes = {};
|
|
154
|
-
this.verbose = false;
|
|
155
|
-
this.allocation = 'LINEAR';
|
|
156
|
-
}
|
|
157
|
-
modelIdentifier() {
|
|
158
|
-
return BOAVIZTA_CLOUD;
|
|
159
|
-
}
|
|
160
|
-
async validateLocation(staticParamsCast) {
|
|
161
|
-
if ('location' in staticParamsCast) {
|
|
162
|
-
const location = staticParamsCast.location ?? 'USA';
|
|
163
|
-
const countries = await this.supportedLocations();
|
|
164
|
-
if (!countries.includes(location)) {
|
|
165
|
-
throw new Error("Improper configure: Invalid location parameter: '" +
|
|
166
|
-
location +
|
|
167
|
-
"'. Valid values are : " +
|
|
168
|
-
countries.join(', '));
|
|
169
|
-
}
|
|
170
|
-
return staticParamsCast.location;
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
async validateInstanceType(staticParamsCast) {
|
|
174
|
-
if (!('provider' in staticParamsCast)) {
|
|
175
|
-
throw new Error('Improper configure: Missing provider parameter');
|
|
176
|
-
}
|
|
177
|
-
if (!('instance-type' in staticParamsCast)) {
|
|
178
|
-
throw new Error("Improper configure: Missing 'instance-type' parameter");
|
|
179
|
-
}
|
|
180
|
-
const provider = staticParamsCast.provider;
|
|
181
|
-
if (this.instanceTypes[provider] === undefined ||
|
|
182
|
-
this.instanceTypes[provider].length === 0) {
|
|
183
|
-
this.instanceTypes[provider] = await this.supportedInstancesList(provider);
|
|
184
|
-
}
|
|
185
|
-
if ('instance-type' in staticParamsCast) {
|
|
186
|
-
if (!this.instanceTypes[provider].includes(staticParamsCast['instance-type'])) {
|
|
187
|
-
throw new Error(`Improper configure: Invalid 'instance-type' parameter: '${staticParamsCast['instance-type']}'. Valid values are : ${this.instanceTypes[provider].join(', ')}`);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
async validateProvider(staticParamsCast) {
|
|
192
|
-
if (!('provider' in staticParamsCast)) {
|
|
193
|
-
throw new Error('Improper configure: Missing provider parameter');
|
|
194
|
-
}
|
|
195
|
-
else {
|
|
196
|
-
const supportedProviders = await this.supportedProvidersList();
|
|
197
|
-
if (!supportedProviders.includes(staticParamsCast.provider)) {
|
|
198
|
-
throw new Error("Improper configure: Invalid provider parameter: '" +
|
|
199
|
-
staticParamsCast.provider +
|
|
200
|
-
"'. Valid values are : " +
|
|
201
|
-
supportedProviders.join(', '));
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
async supportedInstancesList(provider) {
|
|
206
|
-
const instances = await axios_1.default.get(`https://api.boavizta.org/v1/cloud/instance/all_instances?provider=${provider}`);
|
|
207
|
-
return instances.data;
|
|
208
|
-
}
|
|
209
|
-
async supportedProvidersList() {
|
|
210
|
-
const providers = await axios_1.default.get('https://api.boavizta.org/v1/cloud/instance/all_providers');
|
|
211
|
-
return Object.values(providers.data);
|
|
212
|
-
}
|
|
213
|
-
async fetchData(usageData) {
|
|
214
|
-
if (this.sharedParams === undefined) {
|
|
215
|
-
throw new Error('Improper configure: Missing configuration parameters');
|
|
216
|
-
}
|
|
217
|
-
const dataCast = this.sharedParams;
|
|
218
|
-
for (const key in dataCast) {
|
|
219
|
-
// replace - with _ in keys
|
|
220
|
-
if (key.includes('-')) {
|
|
221
|
-
const newKey = key.replace(/-/g, '_');
|
|
222
|
-
dataCast[newKey] = dataCast[key];
|
|
223
|
-
delete dataCast[key];
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
dataCast['usage'] = usageData;
|
|
227
|
-
const response = await axios_1.default.post(`https://api.boavizta.org/v1/cloud/instance?verbose=${this.verbose}&duration=${dataCast['usage']['hours_use_time']}`, dataCast);
|
|
228
|
-
// console.log(
|
|
229
|
-
// `https://api.boavizta.org/v1/cloud/instance?verbose=${this.verbose}&duration=${dataCast['usage']['hours_use_time']}`,
|
|
230
|
-
// JSON.stringify(response.data),
|
|
231
|
-
// dataCast
|
|
232
|
-
// );
|
|
233
|
-
return this.formatResponse(response.data);
|
|
234
|
-
}
|
|
235
|
-
async captureStaticParams(staticParams) {
|
|
236
|
-
if ('verbose' in staticParams) {
|
|
237
|
-
this.verbose = staticParams.verbose ?? false;
|
|
238
|
-
staticParams.verbose = undefined;
|
|
239
|
-
}
|
|
240
|
-
// if no valid provider found, throw error
|
|
241
|
-
await this.validateProvider(staticParams);
|
|
242
|
-
// if no valid 'instance-type' found, throw error
|
|
243
|
-
await this.validateInstanceType(staticParams);
|
|
244
|
-
// if no valid location found, throw error
|
|
245
|
-
await this.validateLocation(staticParams);
|
|
246
|
-
if ('expected-lifespan' in staticParams) {
|
|
247
|
-
this.expectedLifespan = staticParams['expected-lifespan'];
|
|
248
|
-
}
|
|
249
|
-
this.sharedParams = Object.assign({}, staticParams);
|
|
250
|
-
return this.sharedParams;
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
exports.BoaviztaCloudOutputModel = BoaviztaCloudOutputModel;
|
|
254
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2JvYXZpenRhL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUEwQjtBQUcxQix5Q0FBb0M7QUFLcEMsTUFBTSxFQUFDLFNBQVMsRUFBQyxHQUFHLGVBQU0sQ0FBQztBQUMzQixNQUFNLEVBQUMsWUFBWSxFQUFFLGNBQWMsRUFBQyxHQUFHLFNBQVMsQ0FBQztBQUVqRCxNQUFlLG1CQUFtQjtJQUFsQztRQUVFLGlCQUFZLEdBQXVCLFNBQVMsQ0FBQztRQUM3QyxlQUFVLEdBQXlDLFVBQVUsQ0FBQztRQUM5RCxxQkFBZ0IsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBeUg1QyxDQUFDO0lBdEhDLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBa0I7UUFDbkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUM7SUFDcEMsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQ2IsSUFBWSxFQUNaLGVBQW1DLFNBQVM7UUFFNUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBUUQsMkNBQTJDO0lBQzNDLEtBQUssQ0FBQyxrQkFBa0I7UUFDdEIsTUFBTSxTQUFTLEdBQUcsTUFBTSxlQUFLLENBQUMsR0FBRyxDQUMvQixnREFBZ0QsQ0FDakQsQ0FBQztRQUNGLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSx3QkFBd0IsQ0FBQyxRQUFnQixFQUFFLE1BQWM7UUFDdkQsMkNBQTJDO1FBQzNDLG1E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QztZQUMxRCxZQUFZLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztTQUNsQztRQUNELDBDQUEwQztRQUMxQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxQyxpREFBaUQ7UUFDakQsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDOUMsMENBQTBDO1FBQzFDLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRTFDLElBQUksbUJBQW1CLElBQUksWUFBWSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsbUJBQW1CLENBQVcsQ0FBQztTQUNyRTtRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFcEQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7Q0FDRjtBQWxKRCw0REFrSkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuXG5pbXBvcnQge0lPdXRwdXRNb2RlbEludGVyZmFjZX0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQge0NPTkZJR30gZnJvbSAnLi4vLi4vY29uZmlnJztcblxuaW1wb3J0IHtCb2F2aXp0YUluc3RhbmNlVHlwZXMsIElCb2F2aXp0YVVzYWdlU0NJfSBmcm9tICcuLi8uLi90eXBlcy9ib2F2aXp0YSc7XG5pbXBvcnQge0tleVZhbHVlUGFpcn0gZnJvbSAnLi4vLi4vdHlwZXMvY29tbW9uJztcblxuY29uc3Qge01PREVMX0lEU30gPSBDT05GSUc7XG5jb25zdCB7Qk9BVklaVEFfQ1BVLCBCT0FWSVpUQV9DTE9VRH0gPSBNT0RFTF9JRFM7XG5cbmFic3RyYWN0IGNsYXNzIEJvYXZpenRhT3V0cHV0TW9kZWwgaW1wbGVtZW50cyBJT3V0cHV0TW9kZWxJbnRlcmZhY2Uge1xuICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHNoYXJlZFBhcmFtczogb2JqZWN0IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBtZXRyaWNUeXBlOiAnY3B1LXV0aWwnIHwgJ2dwdS11dGlsJyB8ICdyYW0tdXRpbCcgPSAnY3B1LXV0aWwnO1xuICBleHBlY3RlZExpZmVzcGFuID0gNCAqIDM2NSAqIDI0ICogNjAgKiA2MDtcbiAgcHJvdGVjdGVkIGF1dGhDcmVkZW50aWFsczogb2JqZWN0IHwgdW5kZWZpbmVkO1xuXG4gIGFzeW5jIGF1dGhlbnRpY2F0ZShhdXRoUGFyYW1zOiBvYmplY3QpIHtcbiAgICB0aGlzLmF1dGhDcmVkZW50aWFscyA9IGF1dGhQYXJhbXM7XG4gIH1cblxuICBhc3luYyBjb25maWd1cmUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHN0YXRpY1BhcmFtczogb2JqZWN0IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG4gICk6IFByb21pc2U8SU91dHB1dE1vZGVsSW50ZXJmYWNlPiB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnNoYXJlZFBhcmFtcyA9IGF3YWl0IHRoaXMuY2FwdHVyZVN0YXRpY1BhcmFtcyhzdGF0aWNQYXJhbXMgPz8ge30pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy9kZWZpbmVzIHRoZSBtb2RlbCBpZGVudGlmaWVyXG4gIGFic3RyYWN0IG1vZGVsSWRlbnRpZmllcigpOiBzdHJpbmc7XG5cbiAgLy9mZXRjaGVzIGRhdGEgZnJvbSBCb2F2aXp0YSBBUEkgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpYyBlbmRwb2ludCBvZiB0aGUgbW9kZWxcbiAgYWJzdHJhY3QgZmV0Y2hEYXRhKHVzYWdlRGF0YTogb2JqZWN0IHwgdW5kZWZpbmVkKTogUHJvbWlzZTxvYmplY3Q+O1xuXG4gIC8vIGxpc3Qgb2Ygc3VwcG9ydGVkIGxvY2F0aW9ucyBieSB0aGUgbW9kZWxcbiAgYXN5bmMgc3VwcG9ydGVkTG9jYXRpb25zKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCBjb3VudHJpZXMgPSBhd2FpdCBheGlvcy5nZXQoXG4gICAgICAnaHR0cHM6Ly9hcGkuYm9hdml6dGEub3JnL3YxL3V0aWxzL2NvdW50cnlfY29kZSdcbiAgICApO1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKGNvdW50cmllcy5kYXRhKTtcbiAgfVxuXG4gIC8vIGNvbnZlcnRzIHRoZSB1c2FnZSBmcm9tIElNUEwgaW5wdXQgdG8gdGhlIGZvcm1hdCByZXF1aXJlZCBieSBCb2F2aXp0YSBBUEkuXG4gIHRyYW5zZm9ybVRvQm9hdml6dGFVc2FnZShkdXJhdGlvbjogbnVtYmVyLCBtZXRyaWM6IG51bWJlcikge1xuICAgIC8vIGR1cmF0aW9uIGlzIGluIHNlY29uZHMsIGNvbnZlcnQgdG8gaG91cnNcbiAgICAvLyBtZXRyaWMgaXMgYmV0d2VlbiAwIGFuZCAxLCBjb252ZXJ0IHRvIHBlcmNlbnRhZ2VcbiAgICBsZXQgdXNhZ2VJbnB1dDogS2V5VmFsdWVQYWlyID0ge1xuICAgICAgaG91cnNfdXNlX3RpbWU6IGR1cmF0aW9uIC8gMzYwMC4wLFxuICAgICAgdGltZV93b3JrbG9hZDogbWV0cmljLFxuICAgIH07XG4gICAgLy8gY29udmVydCBleHBlY3RlZCBsaWZlc3BhbiBmcm9tIHNlY29uZHMgdG8geWVhcnNcbiAgICB1c2FnZUlucHV0Wyd5ZWFyc19saWZlX3RpbWUnXSA9XG4gICAgICB0aGlzLmV4cGVjdGVkTGlmZXNwYW4gLyAoMzY1LjAgKiAyNC4wICogNjAuMCAqIDYwLjApO1xuICAgIHVzYWdlSW5wdXQgPSB0aGlzLmFkZExvY2F0aW9uVG9Vc2FnZSh1c2FnZUlucHV0KTtcblxuICAgIHJldHVybiB1c2FnZUlucHV0O1xuICB9XG5cbiAgLy8gQ2FsY3VsYXRlcyB0aGUgb3V0cHV0IG9mIHRoZSBnaXZlbiB1c2FnZVxuICBhc3luYyBleGVjdXRlKFxuICAgIGlucHV0czogb2JqZWN0IHwgb2JqZWN0W10gfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0cykpIHtcbiAgICAgIGNvbnN0IHJlc3VsdHM6IEtleVZhbHVlUGFpcltdID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgaW5wdXQgb2YgaW5wdXRzKSB7XG4gICAgICAgIGNvbnN0IHVzYWdlUmVzdWx0ID0gYXdhaXQgdGhpcy5jYWxjdWxhdGVVc2FnZUZvcmlucHV0KGlucHV0KTtcbiAgICAgICAgcmVzdWx0cy5wdXNoKHVzYWdlUmVzdWx0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1BhcmFtZXRlciBOb3QgR2l2ZW46IGludmFsaWQgaW5wdXRzIHBhcmFtZXRlci4gRXhwZWN0aW5nIGFuIGFycmF5IG9mIGlucHV0cydcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkcyBsb2NhdGlvbiB0byB1c2FnZSBpZiBsb2NhdGlvbiBpcyBkZWZpbmVkIGluIHNoYXJlZFBhcmFtc1xuICBhZGRMb2NhdGlvblRvVXNhZ2UodXNhZ2VSYXc6IEtleVZhbHVlUGFpcikge1xuICAgIGlmICh0aGlzLnNoYXJlZFBhcmFtcyAhPT0gdW5kZWZpbmVkICYmICdsb2NhdGlvbicgaW4gdGhpcy5zaGFyZWRQYXJhbXMpIHtcbiAgICAgIHVzYWdlUmF3Wyd1c2FnZV9sb2NhdGlvbiddID0gdGhpcy5zaGFyZWRQYXJhbXNbJ2xvY2F0aW9uJ107XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzYWdlUmF3O1xuICB9XG5cbiAgLy9hYnN0cmFjdCBzdWJzIHRvIG1ha2UgY29tcGF0aWJpbGl0eSB3aXRoIGJhc2UgaW50ZXJmYWNlLiBhbGxvd3MgY29uZmlndXJlIHRvIGJlIGRlZmluZWQgaW4gYmFzZSBjbGFzc1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY2FwdHVyZVN0YXRpY1BhcmFtcyhzdGF0aWNQYXJhbXM6IG9iamVjdCk6IG9iamVjdDtcblxuICAvLyBleHRyYWN0cyBpbmZvcm1hdGlvbiBmcm9tIEJvYXZpenRhIEFQSSByZXNwb25zZSB0byByZXR1cm4gdGhlIG91dHB1dCBpbiB0aGUgZm9ybWF0IHJlcXVpcmVkIGJ5IElNUExcbiAgcHJvdGVjdGVkIGZvcm1hdFJlc3BvbnNlKGRhdGE6IEtleVZhbHVlUGFpcik6IEtleVZhbHVlUGFpciB7XG4gICAgbGV0IG0gPSAwO1xuICAgIGxldCBlID0gMDtcbiAgICBpZiAoJ291dHB1dHMnIGluIGRhdGEpIHtcbiAgICAgIC8vIGVtYm9kaWVkLWNhcmJvbiBvdXRwdXQgaXMgaW4ga2dDTzJlcSwgY29udmVydCB0byBnQ08yZXFcbiAgICAgIG0gPSBkYXRhWydvdXRwdXRzJ11bJ2d3cCddWydlbWJlZGRlZCddWyd2YWx1ZSddICogMTAwMDtcbiAgICAgIC8vIHVzZSBvdXRwdXQgaXMgaW4gSiAsIGNvbnZlcnQgdG8ga1doLlxuICAgICAgLy8gMSwwMDAsMDAwIEogLyAzNjAwID0gMjc3Ljc3Nzc3Nzc3Nzc3NzggV2guXG4gICAgICAvLyAxIE1KIC8gMy42ID0gMC4yNzgga1doXG4gICAgICBlID0gZGF0YVsnb3V0cHV0cyddWydwZSddWyd1c2UnXVsndmFsdWUnXSAvIDMuNjtcbiAgICB9IGVsc2UgaWYgKCdnd3AnIGluIGRhdGEgJiYgJ3BlJyBpbiBkYXRhKSB7XG4gICAgICAvLyBlbWJvZGllZC1jYXJib24gb3V0cHV0IGlzIGluIGtnQ08yZXEsIGNvbnZlcnQgdG8gZ0NPMmVxXG4gICAgICBtID0gZGF0YVsnZ3dwJ11bJ2VtYm9kaWVkLWNhcmJvbiddICogMTAwMDtcbiAgICAgIC8vIHVzZSBvdXRwdXQgaXMgaW4gSiAsIGNvbnZlcnQgdG8ga1doLlxuICAgICAgLy8gMSwwMDAsMDAwIEogLyAzNjAwID0gMjc3Ljc3Nzc3Nzc3Nzc3NzggV2guXG4gICAgICAvLyAxIE1KIC8gMy42ID0gMC4yNzgga1doXG4gICAgICBlID0gZGF0YVsncGUnXVsndXNlJ10gLyAzLjY7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsnZW1ib2RpZWQtY2FyYm9uJzogbSwgZW5lcmd5OiBlfTtcbiAgfVxuXG4gIC8vIGNvbnZlcnRzIHRoZSB1c2FnZSB0byB0aGUgZm9ybWF0IHJlcXVpcmVkIGJ5IEJvYXZpenRhIEFQSS5cbiAgcHJvdGVjdGVkIGFzeW5jIGNhbGN1bGF0ZVVzYWdlRm9yaW5wdXQoXG4gICAgaW5wdXQ6IEtleVZhbHVlUGFpclxuICApOiBQcm9taXNlPEtleVZhbHVlUGFpcj4ge1xuICAgIGlmIChcbiAgICAgICd0aW1lc3RhbXAnIGluIGlucHV0ICYmXG4gICAgICAnZHVyYXRpb24nIGluIGlucHV0ICYmXG4gICAgICB0aGlzLm1ldHJpY1R5cGUgaW4gaW5wdXRcbiAgICApIHtcbiAgICAgIGNvbnN0IHVzYWdlSW5wdXQgPSB0aGlzLnRyYW5zZm9ybVRvQm9hdml6dGFVc2FnZShcbiAgICAgICAgaW5wdXRbJ2R1cmF0aW9uJ10sXG4gICAgICAgIGlucHV0W3RoaXMubWV0cmljVHlwZV1cbiAgICAgICk7XG4gICAgICBjb25zdCB1c2FnZSA9IChhd2FpdCB0aGlzLmZldGNoRGF0YSh1c2FnZUlucHV0KSkgYXMgSUJvYXZpenRhVXNhZ2VTQ0k7XG5cbiAgICAgIHJldHVybiB1c2FnZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIElucHV0OiBJbnZhbGlkIGlucHV0cyBwYXJhbWV0ZXInKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJvYXZpenRhQ3B1T3V0cHV0TW9kZWxcbiAgZXh0ZW5kcyBCb2F2aXp0YU91dHB1dE1vZGVsXG4gIGltcGxlbWVudHMgSU91dHB1dE1vZGVsSW50ZXJmYWNlXG57XG4gIHNoYXJlZFBhcmFtczogb2JqZWN0IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBwdWJsaWMgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgdmVyYm9zZSA9IGZhbHNlO1xuICBwdWJsaWMgYWxsb2NhdGlvbiA9ICdMSU5FQVInO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudFR5cGUgPSAnY3B1JztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubWV0cmljVHlwZSA9ICdjcHUtdXRpbCc7XG4gICAgdGhpcy5jb21wb25lbnRUeXBlID0gJ2NwdSc7XG4gIH1cblxuICBtb2RlbElkZW50aWZpZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQk9BVklaVEFfQ1BVO1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hEYXRhKHVzYWdlRGF0YTogb2JqZWN0IHwgdW5kZWZpbmVkKTogUHJvbWlzZTxvYmplY3Q+IHtcbiAgICBpZiAodGhpcy5zaGFyZWRQYXJhbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbXByb3BlciBjb25maWd1cmU6IE1pc3NpbmcgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YUNhc3QgPSB0aGlzLnNoYXJlZFBhcmFtcyBhcyBLZXlWYWx1ZVBhaXI7XG4gICAgZGF0YUNhc3RbJ3VzYWdlJ10gPSB1c2FnZURhdGE7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3QoXG4gICAgICBgaHR0cHM6Ly9hcGkuYm9hdml6dGEub3JnL3YxL2NvbXBvbmVudC8ke3RoaXMuY29tcG9uZW50VHlwZX0/dmVyYm9zZT0ke3RoaXMudmVyYm9zZX0mZHVyYXRpb249JHtkYXRhQ2FzdFsndXNhZ2UnXVsnaG91cnNfdXNlX3RpbWUnXX1gLFxuICAgICAgZGF0YUNhc3RcbiAgICApO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5mb3JtYXRSZXNwb25zZShyZXNwb25zZS5kYXRhKTtcblxuICAgIC8vIGNvbnNvbGUubG9nKFxuICAgIC8vICAgJ2hpdHRpbmcgJyxcbiAgICAvLyAgIGBodHRwczovL2FwaS5ib2F2aXp0YS5vcmcvdjEvY29tcG9uZW50LyR7dGhpcy5jb21wb25lbnRUeXBlfT92ZXJib3NlPSR7dGhpcy52ZXJib3NlfSZkdXJhdGlvbj0ke2RhdGFDYXN0Wyd1c2FnZSddWydob3Vyc191c2VfdGltZSddfWAsXG4gICAgLy8gICBkYXRhQ2FzdCxcbiAgICAvLyAgIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmRhdGEpXG4gICAgLy8gKTtcbiAgICByZXR1cm4ge1xuICAgICAgJ2UtY3B1JzogcmVzdWx0LmVuZXJneSxcbiAgICAgICdlbWJvZGllZC1jYXJib24nOiByZXN1bHRbJ2VtYm9kaWVkLWNhcmJvbiddLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgY2FwdHVyZVN0YXRpY1BhcmFtcyhzdGF0aWNQYXJhbXM6IG9iamVjdCk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgaWYgKCd2ZXJib3NlJyBpbiBzdGF0aWNQYXJhbXMpIHtcbiAgICAgIHRoaXMudmVyYm9zZSA9IChzdGF0aWNQYXJhbXMudmVyYm9zZSBhcyBib29sZWFuKSA/PyBmYWxzZTtcbiAgICAgIHN0YXRpY1BhcmFtcy52ZXJib3NlID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICghKCdwaHlzaWNhbC1wcm9jZXNzb3InIGluIHN0YXRpY1BhcmFtcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW1wcm9wZXIgY29uZmlndXJlOiBNaXNzaW5nIHByb2Nlc3NvciBwYXJhbWV0ZXInKTtcbiAgICB9XG5cbiAgICBpZiAoISgnY29yZS11bml0cycgaW4gc3RhdGljUGFyYW1zKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbXByb3BlciBjb25maWd1cmU6IE1pc3NpbmcgY29yZS11bml0cyBwYXJhbWV0ZXInKTtcbiAgICB9XG5cbiAgICBpZiAoJ2V4cGVjdGVkLWxpZmVzcGFuJyBpbiBzdGF0aWNQYXJhbXMpIHtcbiAgICAgIHRoaXMuZXhwZWN0ZWRMaWZlc3BhbiA9IHN0YXRpY1BhcmFtc1snZXhwZWN0ZWQtbGlmZXNwYW4nXSBhcyBudW1iZXI7XG4gICAgfVxuICAgIHRoaXMuc2hhcmVkUGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGljUGFyYW1zKTtcblxuICAgIHJldHVybiB0aGlzLnNoYXJlZFBhcmFtcztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQm9hdml6dGFDbG91ZE91dHB1dE1vZGVsXG4gIGV4dGVuZHMgQm9hdml6dGFPdXRwdXRNb2RlbFxuICBpbXBsZW1lbnRzIElPdXRwdXRNb2RlbEludGVyZmFjZVxue1xuICBwdWJsaWMgc2hhcmVkUGFyYW1zOiBvYmplY3QgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIHB1YmxpYyBpbnN0YW5jZVR5cGVzOiBCb2F2aXp0YUluc3RhbmNlVHlwZXMgPSB7fTtcbiAgcHVibGljIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHVibGljIHZlcmJvc2UgPSBmYWxzZTtcbiAgcHVibGljIGFsbG9jYXRpb24gPSAnTElORUFSJztcblxuICBtb2RlbElkZW50aWZpZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQk9BVklaVEFfQ0xPVUQ7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZUxvY2F0aW9uKHN0YXRpY1BhcmFtc0Nhc3Q6IG9iamVjdCk6IFByb21pc2U8c3RyaW5nIHwgdm9pZD4ge1xuICAgIGlmICgnbG9jYXRpb24nIGluIHN0YXRpY1BhcmFtc0Nhc3QpIHtcbiAgICAgIGNvbnN0IGxvY2F0aW9uID0gKHN0YXRpY1BhcmFtc0Nhc3QubG9jYXRpb24gYXMgc3RyaW5nKSA/PyAnVVNBJztcbiAgICAgIGNvbnN0IGNvdW50cmllcyA9IGF3YWl0IHRoaXMuc3VwcG9ydGVkTG9jYXRpb25zKCk7XG4gICAgICBpZiAoIWNvdW50cmllcy5pbmNsdWRlcyhsb2NhdGlvbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiSW1wcm9wZXIgY29uZmlndXJlOiBJbnZhbGlkIGxvY2F0aW9uIHBhcmFtZXRlcjogJ1wiICtcbiAgICAgICAgICAgIGxvY2F0aW9uICtcbiAgICAgICAgICAgIFwiJy4gVmFsaWQgdmFsdWVzIGFyZSA6IFwiICtcbiAgICAgICAgICAgIGNvdW50cmllcy5qb2luKCcsICcpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGljUGFyYW1zQ2FzdC5sb2NhdGlvbiBhcyBzdHJpbmc7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGVJbnN0YW5jZVR5cGUoc3RhdGljUGFyYW1zQ2FzdDogb2JqZWN0KSB7XG4gICAgaWYgKCEoJ3Byb3ZpZGVyJyBpbiBzdGF0aWNQYXJhbXNDYXN0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbXByb3BlciBjb25maWd1cmU6IE1pc3NpbmcgcHJvdmlkZXIgcGFyYW1ldGVyJyk7XG4gICAgfVxuXG4gICAgaWYgKCEoJ2luc3RhbmNlLXR5cGUnIGluIHN0YXRpY1BhcmFtc0Nhc3QpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbXByb3BlciBjb25maWd1cmU6IE1pc3NpbmcgJ2luc3RhbmNlLXR5cGUnIHBhcmFtZXRlclwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm92aWRlciA9IHN0YXRpY1BhcmFtc0Nhc3QucHJvdmlkZXIgYXMgc3RyaW5nO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5pbnN0YW5jZVR5cGVzW3Byb3ZpZGVyXSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLmluc3RhbmNlVHlwZXNbcHJvdmlkZXJdLmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgdGhpcy5pbnN0YW5jZVR5cGVzW3Byb3ZpZGVyXSA9IGF3YWl0IHRoaXMuc3VwcG9ydGVkSW5zdGFuY2VzTGlzdChcbiAgICAgICAgcHJvdmlkZXJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCdpbnN0YW5jZS10eXBlJyBpbiBzdGF0aWNQYXJhbXNDYXN0KSB7XG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLmluc3RhbmNlVHlwZXNbcHJvdmlkZXJdLmluY2x1ZGVzKFxuICAgICAgICAgIHN0YXRpY1BhcmFtc0Nhc3RbJ2luc3RhbmNlLXR5cGUnXSBhcyBzdHJpbmdcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW1wcm9wZXIgY29uZmlndXJlOiBJbnZhbGlkICdpbnN0YW5jZS10eXBlJyBwYXJhbWV0ZXI6ICcke1xuICAgICAgICAgICAgc3RhdGljUGFyYW1zQ2FzdFsnaW5zdGFuY2UtdHlwZSddXG4gICAgICAgICAgfScuIFZhbGlkIHZhbHVlcyBhcmUgOiAke3RoaXMuaW5zdGFuY2VUeXBlc1twcm92aWRlcl0uam9pbignLCAnKX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGVQcm92aWRlcihzdGF0aWNQYXJhbXNDYXN0OiBvYmplY3QpIHtcbiAgICBpZiAoISgncHJvdmlkZXInIGluIHN0YXRpY1BhcmFtc0Nhc3QpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ltcHJvcGVyIGNvbmZpZ3VyZTogTWlzc2luZyBwcm92aWRlciBwYXJhbWV0ZXInKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3VwcG9ydGVkUHJvdmlkZXJzID0gYXdhaXQgdGhpcy5zdXBwb3J0ZWRQcm92aWRlcnNMaXN0KCk7XG5cbiAgICAgIGlmICghc3VwcG9ydGVkUHJvdmlkZXJzLmluY2x1ZGVzKHN0YXRpY1BhcmFtc0Nhc3QucHJvdmlkZXIgYXMgc3RyaW5nKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJJbXByb3BlciBjb25maWd1cmU6IEludmFsaWQgcHJvdmlkZXIgcGFyYW1ldGVyOiAnXCIgK1xuICAgICAgICAgICAgc3RhdGljUGFyYW1zQ2FzdC5wcm92aWRlciArXG4gICAgICAgICAgICBcIicuIFZhbGlkIHZhbHVlcyBhcmUgOiBcIiArXG4gICAgICAgICAgICBzdXBwb3J0ZWRQcm92aWRlcnMuam9pbignLCAnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN1cHBvcnRlZEluc3RhbmNlc0xpc3QocHJvdmlkZXI6IHN0cmluZykge1xuICAgIGNvbnN0IGluc3RhbmNlcyA9IGF3YWl0IGF4aW9zLmdldChcbiAgICAgIGBodHRwczovL2FwaS5ib2F2aXp0YS5vcmcvdjEvY2xvdWQvaW5zdGFuY2UvYWxsX2luc3RhbmNlcz9wcm92aWRlcj0ke3Byb3ZpZGVyfWBcbiAgICApO1xuXG4gICAgcmV0dXJuIGluc3RhbmNlcy5kYXRhO1xuICB9XG5cbiAgYXN5bmMgc3VwcG9ydGVkUHJvdmlkZXJzTGlzdCgpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgcHJvdmlkZXJzID0gYXdhaXQgYXhpb3MuZ2V0KFxuICAgICAgJ2h0dHBzOi8vYXBpLmJvYXZpenRhLm9yZy92MS9jbG91ZC9pbnN0YW5jZS9hbGxfcHJvdmlkZXJzJ1xuICAgICk7XG5cbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhwcm92aWRlcnMuZGF0YSk7XG4gIH1cblxuICBhc3luYyBmZXRjaERhdGEodXNhZ2VEYXRhOiBvYmplY3QgfCB1bmRlZmluZWQpOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGlmICh0aGlzLnNoYXJlZFBhcmFtcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ltcHJvcGVyIGNvbmZpZ3VyZTogTWlzc2luZyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMnKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhQ2FzdCA9IHRoaXMuc2hhcmVkUGFyYW1zIGFzIEtleVZhbHVlUGFpcjtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhQ2FzdCkge1xuICAgICAgLy8gICByZXBsYWNlIC0gd2l0aCBfIGluIGtleXNcbiAgICAgIGlmIChrZXkuaW5jbHVkZXMoJy0nKSkge1xuICAgICAgICBjb25zdCBuZXdLZXkgPSBrZXkucmVwbGFjZSgvLS9nLCAnXycpO1xuICAgICAgICBkYXRhQ2FzdFtuZXdLZXldID0gZGF0YUNhc3Rba2V5XTtcbiAgICAgICAgZGVsZXRlIGRhdGFDYXN0W2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIGRhdGFDYXN0Wyd1c2FnZSddID0gdXNhZ2VEYXRhO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdChcbiAgICAgIGBodHRwczovL2FwaS5ib2F2aXp0YS5vcmcvdjEvY2xvdWQvaW5zdGFuY2U/dmVyYm9zZT0ke3RoaXMudmVyYm9zZX0mZHVyYXRpb249JHtkYXRhQ2FzdFsndXNhZ2UnXVsnaG91cnNfdXNlX3RpbWUnXX1gLFxuICAgICAgZGF0YUNhc3RcbiAgICApO1xuICAgIC8vIGNvbnNvbGUubG9nKFxuICAgIC8vICAgYGh0dHBzOi8vYXBpLmJvYXZpenRhLm9yZy92MS9jbG91ZC9pbnN0YW5jZT92ZXJib3NlPSR7dGhpcy52ZXJib3NlfSZkdXJhdGlvbj0ke2RhdGFDYXN0Wyd1c2FnZSddWydob3Vyc191c2VfdGltZSddfWAsXG4gICAgLy8gICBKU09OLnN0cmluZ2lmeShyZXNwb25zZS5kYXRhKSxcbiAgICAvLyAgIGRhdGFDYXN0XG4gICAgLy8gKTtcblxuICAgIHJldHVybiB0aGlzLmZvcm1hdFJlc3BvbnNlKHJlc3BvbnNlLmRhdGEpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNhcHR1cmVTdGF0aWNQYXJhbXMoc3RhdGljUGFyYW1zOiBvYmplY3QpIHtcbiAgICBpZiAoJ3ZlcmJvc2UnIGluIHN0YXRpY1BhcmFtcykge1xuICAgICAgdGhpcy52ZXJib3NlID0gKHN0YXRpY1BhcmFtcy52ZXJib3NlIGFzIGJvb2xlYW4pID8/IGZhbHNlO1xuICAgICAgc3RhdGljUGFyYW1zLnZlcmJvc2UgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIGlmIG5vIHZhbGlkIHByb3ZpZGVyIGZvdW5kLCB0aHJvdyBlcnJvclxuICAgIGF3YWl0IHRoaXMudmFsaWRhdGVQcm92aWRlcihzdGF0aWNQYXJhbXMpO1xuICAgIC8vIGlmIG5vIHZhbGlkICdpbnN0YW5jZS10eXBlJyBmb3VuZCwgdGhyb3cgZXJyb3JcbiAgICBhd2FpdCB0aGlzLnZhbGlkYXRlSW5zdGFuY2VUeXBlKHN0YXRpY1BhcmFtcyk7XG4gICAgLy8gaWYgbm8gdmFsaWQgbG9jYXRpb24gZm91bmQsIHRocm93IGVycm9yXG4gICAgYXdhaXQgdGhpcy52YWxpZGF0ZUxvY2F0aW9uKHN0YXRpY1BhcmFtcyk7XG5cbiAgICBpZiAoJ2V4cGVjdGVkLWxpZmVzcGFuJyBpbiBzdGF0aWNQYXJhbXMpIHtcbiAgICAgIHRoaXMuZXhwZWN0ZWRMaWZlc3BhbiA9IHN0YXRpY1BhcmFtc1snZXhwZWN0ZWQtbGlmZXNwYW4nXSBhcyBudW1iZXI7XG4gICAgfVxuXG4gICAgdGhpcy5zaGFyZWRQYXJhbXMgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0aWNQYXJhbXMpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2hhcmVkUGFyYW1zO1xuICB9XG59XG5cbi8qKlxuICogRm9yIEpTSUkuXG4gKi9cbmV4cG9ydCB7SU91dHB1dE1vZGVsSW50ZXJmYWNlfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmV4cG9ydCB7Qm9hdml6dGFJbnN0YW5jZVR5cGVzLCBJQm9hdml6dGFVc2FnZVNDSX0gZnJvbSAnLi4vLi4vdHlwZXMvYm9hdml6dGEnO1xuZXhwb3J0IHtLZXlWYWx1ZVBhaXJ9IGZyb20gJy4uLy4uL3R5cGVzL2NvbW1vbic7XG4iXX0=
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { IOutputModelInterface } from '../interfaces';
|
|
2
|
-
export declare class EAvevaModel implements IOutputModelInterface {
|
|
3
|
-
authParams: object | undefined;
|
|
4
|
-
name: string | undefined;
|
|
5
|
-
staticParams: object | undefined;
|
|
6
|
-
/**
|
|
7
|
-
* Defined for compatibility. Not used here.
|
|
8
|
-
*/
|
|
9
|
-
authenticate(authParams: object): void;
|
|
10
|
-
/**
|
|
11
|
-
* Configures the Aveva Plugin for IEF
|
|
12
|
-
* @param {string} name name of the resource
|
|
13
|
-
* @param {Object} staticParams static parameters for the resource
|
|
14
|
-
*/
|
|
15
|
-
configure(name: string, staticParams?: object | undefined): Promise<IOutputModelInterface>;
|
|
16
|
-
/**
|
|
17
|
-
* Calculate the total emissions for a list of inputs.
|
|
18
|
-
* Each input require:
|
|
19
|
-
* @param {Object[]} inputs
|
|
20
|
-
* @param {number} inputs[].time time to normalize to in hours
|
|
21
|
-
* @param {number} inputs[].pb baseline power
|
|
22
|
-
* @param {number} inputs[].pl measured power
|
|
23
|
-
*/
|
|
24
|
-
execute(inputs: object | object[] | undefined): Promise<any[]>;
|
|
25
|
-
/**
|
|
26
|
-
* Returns model identifier
|
|
27
|
-
*/
|
|
28
|
-
modelIdentifier(): string;
|
|
29
|
-
}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EAvevaModel = void 0;
|
|
4
|
-
const config_1 = require("../../config");
|
|
5
|
-
const { MODEL_IDS } = config_1.CONFIG;
|
|
6
|
-
const { AVEVA } = MODEL_IDS;
|
|
7
|
-
class EAvevaModel {
|
|
8
|
-
/**
|
|
9
|
-
* Defined for compatibility. Not used here.
|
|
10
|
-
*/
|
|
11
|
-
authenticate(authParams) {
|
|
12
|
-
this.authParams = authParams;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Configures the Aveva Plugin for IEF
|
|
16
|
-
* @param {string} name name of the resource
|
|
17
|
-
* @param {Object} staticParams static parameters for the resource
|
|
18
|
-
*/
|
|
19
|
-
async configure(name, staticParams = undefined) {
|
|
20
|
-
this.name = name;
|
|
21
|
-
this.staticParams = staticParams;
|
|
22
|
-
return this;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Calculate the total emissions for a list of inputs.
|
|
26
|
-
* Each input require:
|
|
27
|
-
* @param {Object[]} inputs
|
|
28
|
-
* @param {number} inputs[].time time to normalize to in hours
|
|
29
|
-
* @param {number} inputs[].pb baseline power
|
|
30
|
-
* @param {number} inputs[].pl measured power
|
|
31
|
-
*/
|
|
32
|
-
async execute(inputs) {
|
|
33
|
-
if (inputs === undefined) {
|
|
34
|
-
throw new Error('Required Parameters not provided');
|
|
35
|
-
}
|
|
36
|
-
else if (!Array.isArray(inputs)) {
|
|
37
|
-
throw new Error('inputs must be an array');
|
|
38
|
-
}
|
|
39
|
-
return inputs.map(input => {
|
|
40
|
-
input['energy-cpu'] =
|
|
41
|
-
((input['pl'] - input['pb']) * input['time']) / 1000;
|
|
42
|
-
return input;
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Returns model identifier
|
|
47
|
-
*/
|
|
48
|
-
modelIdentifier() {
|
|
49
|
-
return AVEVA;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
exports.EAvevaModel = EAvevaModel;
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZldmEtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2Nhc2Utc3R1ZGllcy9hdmV2YS1tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSx5Q0FBb0M7QUFFcEMsTUFBTSxFQUFDLFNBQVMsRUFBQyxHQUFHLGVBQU0sQ0FBQztBQUMzQixNQUFNLEVBQUMsS0FBSyxFQUFDLEdBQUcsU0FBUyxDQUFDO0FBRTFCLE1BQWEsV0FBVztJQUt0Qjs7T0FFRztJQUNILFlBQVksQ0FBQyxVQUFrQjtRQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxTQUFTLENBQ2IsSUFBWSxFQUNaLGVBQW1DLFNBQVM7UUFFNUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFFakMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBcUM7UUFDakQsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztTQUNyRDthQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztTQUM1QztRQUVELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixLQUFLLENBQUMsWUFBWSxDQUFDO2dCQUNqQixDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUV2RCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZTtRQUNiLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGO0FBeERELGtDQXdEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SU91dHB1dE1vZGVsSW50ZXJmYWNlfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuaW1wb3J0IHtDT05GSUd9IGZyb20gJy4uLy4uL2NvbmZpZyc7XG5cbmNvbnN0IHtNT0RFTF9JRFN9ID0gQ09ORklHO1xuY29uc3Qge0FWRVZBfSA9IE1PREVMX0lEUztcblxuZXhwb3J0IGNsYXNzIEVBdmV2YU1vZGVsIGltcGxlbWVudHMgSU91dHB1dE1vZGVsSW50ZXJmYWNlIHtcbiAgYXV0aFBhcmFtczogb2JqZWN0IHwgdW5kZWZpbmVkOyAvLyBEZWZpbmVkIGZvciBjb21wYXRpYmlsaXR5LiBOb3QgdXNlZCBpbiBBdmV2YS5cbiAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkOyAvLyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZVxuICBzdGF0aWNQYXJhbXM6IG9iamVjdCB8IHVuZGVmaW5lZDsgLy8gRGVmaW5lZCBmb3IgY29tcGF0aWJpbGl0eS4gTm90IHVzZWQgaW4gQXZldmEuXG5cbiAgLyoqXG4gICAqIERlZmluZWQgZm9yIGNvbXBhdGliaWxpdHkuIE5vdCB1c2VkIGhlcmUuXG4gICAqL1xuICBhdXRoZW50aWNhdGUoYXV0aFBhcmFtczogb2JqZWN0KTogdm9pZCB7XG4gICAgdGhpcy5hdXRoUGFyYW1zID0gYXV0aFBhcmFtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmVzIHRoZSBBdmV2YSBQbHVnaW4gZm9yIElFRlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBuYW1lIG9mIHRoZSByZXNvdXJjZVxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGljUGFyYW1zIHN0YXRpYyBwYXJhbWV0ZXJzIGZvciB0aGUgcmVzb3VyY2VcbiAgICovXG4gIGFzeW5jIGNvbmZpZ3VyZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgc3RhdGljUGFyYW1zOiBvYmplY3QgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxJT3V0cHV0TW9kZWxJbnRlcmZhY2U+IHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMuc3RhdGljUGFyYW1zID0gc3RhdGljUGFyYW1zO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSB0b3RhbCBlbWlzc2lvbnMgZm9yIGEgbGlzdCBvZiBpbnB1dHMuXG4gICAqIEVhY2ggaW5wdXQgcmVxdWlyZTpcbiAgICogQHBhcmFtIHtPYmplY3RbXX0gaW5wdXRzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbnB1dHNbXS50aW1lIHRpbWUgdG8gbm9ybWFsaXplIHRvIGluIGhvdXJzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbnB1dHNbXS5wYiBiYXNlbGluZSBwb3dlclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5wdXRzW10ucGwgbWVhc3VyZWQgcG93ZXJcbiAgICovXG4gIGFzeW5jIGV4ZWN1dGUoaW5wdXRzOiBvYmplY3QgfCBvYmplY3RbXSB8IHVuZGVmaW5lZCk6IFByb21pc2U8YW55W10+IHtcbiAgICBpZiAoaW5wdXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgUGFyYW1ldGVycyBub3QgcHJvdmlkZWQnKTtcbiAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KGlucHV0cykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW5wdXRzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5wdXRzLm1hcChpbnB1dCA9PiB7XG4gICAgICBpbnB1dFsnZW5lcmd5LWNwdSddID1cbiAgICAgICAgKChpbnB1dFsncGwnXSAtIGlucHV0WydwYiddKSAqIGlucHV0Wyd0aW1lJ10pIC8gMTAwMDtcblxuICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgbW9kZWwgaWRlbnRpZmllclxuICAgKi9cbiAgbW9kZWxJZGVudGlmaWVyKCkge1xuICAgIHJldHVybiBBVkVWQTtcbiAgfVxufVxuIl19
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { IOutputModelInterface } from '../interfaces';
|
|
2
|
-
export declare class EMemModel implements IOutputModelInterface {
|
|
3
|
-
authParams: object | undefined;
|
|
4
|
-
name: string | undefined;
|
|
5
|
-
memoryAllocation: number;
|
|
6
|
-
memoryEnergy: number;
|
|
7
|
-
/**
|
|
8
|
-
* Defined for compatibility. Not used.
|
|
9
|
-
*/
|
|
10
|
-
authenticate(authParams: object): void;
|
|
11
|
-
/**
|
|
12
|
-
* Configures the Plugin for IEF
|
|
13
|
-
* @param {string} name name of the resource
|
|
14
|
-
* @param {Object} staticParams static parameters for the resource
|
|
15
|
-
* @param {number} staticParams.thermal-design-power Thermal Design Power in Watts
|
|
16
|
-
* @param {Interpolation} staticParams.interpolation Interpolation method
|
|
17
|
-
*/
|
|
18
|
-
configure(name: string, staticParams?: object | undefined): Promise<IOutputModelInterface>;
|
|
19
|
-
/**
|
|
20
|
-
* Calculate the total emissions for a list of inputs.
|
|
21
|
-
*
|
|
22
|
-
* Each input require:
|
|
23
|
-
* @param {Object[]} inputs
|
|
24
|
-
* @param {string} inputs[].timestamp RFC3339 timestamp string
|
|
25
|
-
* @param {number} inputs[].mem-util percentage mem usage
|
|
26
|
-
*/
|
|
27
|
-
execute(inputs: object | object[] | undefined): Promise<any[]>;
|
|
28
|
-
/**
|
|
29
|
-
* Returns model identifier
|
|
30
|
-
*/
|
|
31
|
-
modelIdentifier(): string;
|
|
32
|
-
/**
|
|
33
|
-
* Calculates the energy consumption for a single input
|
|
34
|
-
* requires
|
|
35
|
-
*
|
|
36
|
-
* mem-util: ram usage in percentage
|
|
37
|
-
* timestamp: RFC3339 timestamp string
|
|
38
|
-
*
|
|
39
|
-
* multiplies memory used (GB) by a coefficient (wh/GB) and converts to kwh
|
|
40
|
-
*/
|
|
41
|
-
private calculateEnergy;
|
|
42
|
-
}
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EMemModel = void 0;
|
|
4
|
-
const config_1 = require("../../config");
|
|
5
|
-
const { MODEL_IDS } = config_1.CONFIG;
|
|
6
|
-
const { EMEM } = MODEL_IDS;
|
|
7
|
-
class EMemModel {
|
|
8
|
-
constructor() {
|
|
9
|
-
this.memoryAllocation = 0;
|
|
10
|
-
this.memoryEnergy = 0;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Defined for compatibility. Not used.
|
|
14
|
-
*/
|
|
15
|
-
authenticate(authParams) {
|
|
16
|
-
this.authParams = authParams;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Configures the Plugin for IEF
|
|
20
|
-
* @param {string} name name of the resource
|
|
21
|
-
* @param {Object} staticParams static parameters for the resource
|
|
22
|
-
* @param {number} staticParams.thermal-design-power Thermal Design Power in Watts
|
|
23
|
-
* @param {Interpolation} staticParams.interpolation Interpolation method
|
|
24
|
-
*/
|
|
25
|
-
async configure(name, staticParams = undefined) {
|
|
26
|
-
this.name = name;
|
|
27
|
-
if (staticParams === undefined) {
|
|
28
|
-
throw new Error('Required Parameters not provided');
|
|
29
|
-
}
|
|
30
|
-
if ('mem-alloc' in staticParams) {
|
|
31
|
-
this.memoryAllocation = staticParams['mem-alloc'];
|
|
32
|
-
}
|
|
33
|
-
if ('mem-energy' in staticParams) {
|
|
34
|
-
this.memoryEnergy = staticParams['mem-energy'];
|
|
35
|
-
}
|
|
36
|
-
return this;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Calculate the total emissions for a list of inputs.
|
|
40
|
-
*
|
|
41
|
-
* Each input require:
|
|
42
|
-
* @param {Object[]} inputs
|
|
43
|
-
* @param {string} inputs[].timestamp RFC3339 timestamp string
|
|
44
|
-
* @param {number} inputs[].mem-util percentage mem usage
|
|
45
|
-
*/
|
|
46
|
-
async execute(inputs) {
|
|
47
|
-
if (inputs === undefined) {
|
|
48
|
-
throw new Error('Required Parameters not provided');
|
|
49
|
-
}
|
|
50
|
-
else if (!Array.isArray(inputs)) {
|
|
51
|
-
throw new Error('inputs must be an array');
|
|
52
|
-
}
|
|
53
|
-
return inputs.map((input) => {
|
|
54
|
-
this.configure(this.name, input);
|
|
55
|
-
input['energy-memory'] = this.calculateEnergy(input);
|
|
56
|
-
return input;
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Returns model identifier
|
|
61
|
-
*/
|
|
62
|
-
modelIdentifier() {
|
|
63
|
-
return EMEM;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Calculates the energy consumption for a single input
|
|
67
|
-
* requires
|
|
68
|
-
*
|
|
69
|
-
* mem-util: ram usage in percentage
|
|
70
|
-
* timestamp: RFC3339 timestamp string
|
|
71
|
-
*
|
|
72
|
-
* multiplies memory used (GB) by a coefficient (wh/GB) and converts to kwh
|
|
73
|
-
*/
|
|
74
|
-
calculateEnergy(input) {
|
|
75
|
-
if (!('mem-util' in input) || !('timestamp' in input)) {
|
|
76
|
-
throw new Error('Required Parameters duration,cpu-util,timestamp not provided for input');
|
|
77
|
-
}
|
|
78
|
-
if (this.memoryAllocation === 0) {
|
|
79
|
-
throw new Error('Required Parameter: mem-alloc not provided in configure');
|
|
80
|
-
}
|
|
81
|
-
if (this.memoryEnergy === 0) {
|
|
82
|
-
throw new Error('Required Parameter: mem-energy not provided in configure');
|
|
83
|
-
}
|
|
84
|
-
const mem_alloc = this.memoryAllocation;
|
|
85
|
-
const mem_util = input['mem-util']; // convert cpu usage to percentage
|
|
86
|
-
if (mem_util < 0 || mem_util > 100) {
|
|
87
|
-
throw new Error('cpu usage must be between 0 and 100');
|
|
88
|
-
}
|
|
89
|
-
return (mem_alloc * (mem_util / 100) * this.memoryEnergy) / 1000;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
exports.EMemModel = EMemModel;
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1lbS1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY2FzZS1zdHVkaWVzL2VtZW0tbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEseUNBQW9DO0FBSXBDLE1BQU0sRUFBQyxTQUFTLEVBQUMsR0FBRyxlQUFNLENBQUM7QUFDM0IsTUFBTSxFQUFDLElBQUksRUFBQyxHQUFHLFNBQVMsQ0FBQztBQUV6QixNQUFhLFNBQVM7SUFBdEI7UUFHRSxxQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFDckIsaUJBQVksR0FBRyxDQUFDLENBQUM7SUF3R25CLENBQUM7SUF0R0M7O09BRUc7SUFDSCxZQUFZLENBQUMsVUFBa0I7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxTQUFTLENBQ2IsSUFBWSxFQUNaLGVBQW1DLFNBQVM7UUFFNUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFFakIsSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztTQUNyRDtRQUVELElBQUksV0FBVyxJQUFJLFlBQVksRUFBRTtZQUMvQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBVyxDQUFDO1NBQzdEO1FBRUQsSUFBSSxZQUFZLElBQUksWUFBWSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBVyxDQUFDO1NBQzFEO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBcUM7UUFDakQsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztTQUNyRDthQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztTQUM1QztRQUVELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQW1CLEVBQUUsRUFBRTtZQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbEMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFckQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNLLGVBQWUsQ0FBQyxLQUFtQjtRQUN6QyxJQUFJLENBQUMsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNyRCxNQUFNLElBQUksS0FBSyxDQUNiLHdFQUF3RSxDQUN6RSxDQUFDO1NBQ0g7UUFFRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUU7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FDYix5REFBeUQsQ0FDMUQsQ0FBQztTQUNIO1FBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLENBQUMsRUFBRTtZQUMzQixNQUFNLElBQUksS0FBSyxDQUNiLDBEQUEwRCxDQUMzRCxDQUFDO1NBQ0g7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDeEMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsa0NBQWtDO1FBRXRFLElBQUksUUFBUSxHQUFHLENBQUMsSUFBSSxRQUFRLEdBQUcsR0FBRyxFQUFFO1lBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztTQUN4RDtRQUVELE9BQU8sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNuRSxDQUFDO0NBQ0Y7QUE1R0QsOEJBNEdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJT3V0cHV0TW9kZWxJbnRlcmZhY2V9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5pbXBvcnQge0NPTkZJR30gZnJvbSAnLi4vLi4vY29uZmlnJztcblxuaW1wb3J0IHtLZXlWYWx1ZVBhaXJ9IGZyb20gJy4uLy4uL3R5cGVzL2NvbW1vbic7XG5cbmNvbnN0IHtNT0RFTF9JRFN9ID0gQ09ORklHO1xuY29uc3Qge0VNRU19ID0gTU9ERUxfSURTO1xuXG5leHBvcnQgY2xhc3MgRU1lbU1vZGVsIGltcGxlbWVudHMgSU91dHB1dE1vZGVsSW50ZXJmYWNlIHtcbiAgYXV0aFBhcmFtczogb2JqZWN0IHwgdW5kZWZpbmVkOyAvLyBEZWZpbmVkIGZvciBjb21wYXRpYmlsaXR5LiBOb3QgdXNlZCBpbiB0aGlzLlxuICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7IC8vIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlXG4gIG1lbW9yeUFsbG9jYXRpb24gPSAwO1xuICBtZW1vcnlFbmVyZ3kgPSAwO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVkIGZvciBjb21wYXRpYmlsaXR5LiBOb3QgdXNlZC5cbiAgICovXG4gIGF1dGhlbnRpY2F0ZShhdXRoUGFyYW1zOiBvYmplY3QpOiB2b2lkIHtcbiAgICB0aGlzLmF1dGhQYXJhbXMgPSBhdXRoUGFyYW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZXMgdGhlIFBsdWdpbiBmb3IgSUVGXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIHJlc291cmNlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0aWNQYXJhbXMgc3RhdGljIHBhcmFtZXRlcnMgZm9yIHRoZSByZXNvdXJjZVxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhdGljUGFyYW1zLnRoZXJtYWwtZGVzaWduLXBvd2VyIFRoZXJtYWwgRGVzaWduIFBvd2VyIGluIFdhdHRzXG4gICAqIEBwYXJhbSB7SW50ZXJwb2xhdGlvbn0gc3RhdGljUGFyYW1zLmludGVycG9sYXRpb24gSW50ZXJwb2xhdGlvbiBtZXRob2RcbiAgICovXG4gIGFzeW5jIGNvbmZpZ3VyZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgc3RhdGljUGFyYW1zOiBvYmplY3QgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxJT3V0cHV0TW9kZWxJbnRlcmZhY2U+IHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXG4gICAgaWYgKHN0YXRpY1BhcmFtcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIFBhcmFtZXRlcnMgbm90IHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCdtZW0tYWxsb2MnIGluIHN0YXRpY1BhcmFtcykge1xuICAgICAgdGhpcy5tZW1vcnlBbGxvY2F0aW9uID0gc3RhdGljUGFyYW1zWydtZW0tYWxsb2MnXSBhcyBudW1iZXI7XG4gICAgfVxuXG4gICAgaWYgKCdtZW0tZW5lcmd5JyBpbiBzdGF0aWNQYXJhbXMpIHtcbiAgICAgIHRoaXMubWVtb3J5RW5lcmd5ID0gc3RhdGljUGFyYW1zWydtZW0tZW5lcmd5J10gYXMgbnVtYmVyO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgdG90YWwgZW1pc3Npb25zIGZvciBhIGxpc3Qgb2YgaW5wdXRzLlxuICAgKlxuICAgKiBFYWNoIGlucHV0IHJlcXVpcmU6XG4gICAqIEBwYXJhbSB7T2JqZWN0W119IGlucHV0c1xuICAgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRzW10udGltZXN0YW1wIFJGQzMzMzkgdGltZXN0YW1wIHN0cmluZ1xuICAgKiBAcGFyYW0ge251bWJlcn0gaW5wdXRzW10ubWVtLXV0aWwgcGVyY2VudGFnZSBtZW0gdXNhZ2VcbiAgICovXG4gIGFzeW5jIGV4ZWN1dGUoaW5wdXRzOiBvYmplY3QgfCBvYmplY3RbXSB8IHVuZGVmaW5lZCk6IFByb21pc2U8YW55W10+IHtcbiAgICBpZiAoaW5wdXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgUGFyYW1ldGVycyBub3QgcHJvdmlkZWQnKTtcbiAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KGlucHV0cykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW5wdXRzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5wdXRzLm1hcCgoaW5wdXQ6IEtleVZhbHVlUGFpcikgPT4ge1xuICAgICAgdGhpcy5jb25maWd1cmUodGhpcy5uYW1lISwgaW5wdXQpO1xuICAgICAgaW5wdXRbJ2VuZXJneS1tZW1vcnknXSA9IHRoaXMuY2FsY3VsYXRlRW5lcmd5KGlucHV0KTtcblxuICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgbW9kZWwgaWRlbnRpZmllclxuICAgKi9cbiAgbW9kZWxJZGVudGlmaWVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEVNRU07XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgZW5lcmd5IGNvbnN1bXB0aW9uIGZvciBhIHNpbmdsZSBpbnB1dFxuICAgKiByZXF1aXJlc1xuICAgKlxuICAgKiBtZW0tdXRpbDogcmFtIHVzYWdlIGluIHBlcmNlbnRhZ2VcbiAgICogdGltZXN0YW1wOiBSRkMzMzM5IHRpbWVzdGFtcCBzdHJpbmdcbiAgICpcbiAgICogbXVsdGlwbGllcyBtZW1vcnkgdXNlZCAoR0IpIGJ5IGEgY29lZmZpY2llbnQgKHdoL0dCKSBhbmQgY29udmVydHMgdG8ga3doXG4gICAqL1xuICBwcml2YXRlIGNhbGN1bGF0ZUVuZXJneShpbnB1dDogS2V5VmFsdWVQYWlyKSB7XG4gICAgaWYgKCEoJ21lbS11dGlsJyBpbiBpbnB1dCkgfHwgISgndGltZXN0YW1wJyBpbiBpbnB1dCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1JlcXVpcmVkIFBhcmFtZXRlcnMgZHVyYXRpb24sY3B1LXV0aWwsdGltZXN0YW1wIG5vdCBwcm92aWRlZCBmb3IgaW5wdXQnXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1lbW9yeUFsbG9jYXRpb24gPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1JlcXVpcmVkIFBhcmFtZXRlcjogbWVtLWFsbG9jIG5vdCBwcm92aWRlZCBpbiBjb25maWd1cmUnXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1lbW9yeUVuZXJneSA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnUmVxdWlyZWQgUGFyYW1ldGVyOiBtZW0tZW5lcmd5IG5vdCBwcm92aWRlZCBpbiBjb25maWd1cmUnXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IG1lbV9hbGxvYyA9IHRoaXMubWVtb3J5QWxsb2NhdGlvbjtcbiAgICBjb25zdCBtZW1fdXRpbCA9IGlucHV0WydtZW0tdXRpbCddOyAvLyBjb252ZXJ0IGNwdSB1c2FnZSB0byBwZXJjZW50YWdlXG5cbiAgICBpZiAobWVtX3V0aWwgPCAwIHx8IG1lbV91dGlsID4gMTAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NwdSB1c2FnZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMTAwJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChtZW1fYWxsb2MgKiAobWVtX3V0aWwgLyAxMDApICogdGhpcy5tZW1vcnlFbmVyZ3kpIC8gMTAwMDtcbiAgfVxufVxuIl19
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { IOutputModelInterface } from '../interfaces';
|
|
2
|
-
export { KeyValuePair } from '../../types/common';
|
|
3
|
-
export declare class EshoppenModel implements IOutputModelInterface {
|
|
4
|
-
authParams: object | undefined;
|
|
5
|
-
modelType: 'energy-cpu' | 'energy-memory' | 'energy-network' | 'e-sum';
|
|
6
|
-
staticParams: object | undefined;
|
|
7
|
-
name: string | undefined;
|
|
8
|
-
authenticate(authParams: object): void;
|
|
9
|
-
execute(inputs: object | object[] | undefined): Promise<any[]>;
|
|
10
|
-
configure(name: string, staticParams: object | undefined): Promise<IOutputModelInterface>;
|
|
11
|
-
modelIdentifier(): string;
|
|
12
|
-
}
|
|
13
|
-
export declare class EshoppenCpuModel extends EshoppenModel {
|
|
14
|
-
constructor();
|
|
15
|
-
modelIdentifier(): string;
|
|
16
|
-
}
|
|
17
|
-
export declare class EshoppenMemModel extends EshoppenModel {
|
|
18
|
-
constructor();
|
|
19
|
-
modelIdentifier(): string;
|
|
20
|
-
}
|
|
21
|
-
export declare class EshoppenNetModel extends EshoppenModel {
|
|
22
|
-
constructor();
|
|
23
|
-
modelIdentifier(): string;
|
|
24
|
-
}
|