@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,58 +0,0 @@
|
|
|
1
|
-
import { IOutputModelInterface } from '../interfaces';
|
|
2
|
-
export declare class TeadsAWS implements IOutputModelInterface {
|
|
3
|
-
authParams: object | undefined;
|
|
4
|
-
name: string | undefined;
|
|
5
|
-
private computeInstances;
|
|
6
|
-
private instanceType;
|
|
7
|
-
private expectedLifespan;
|
|
8
|
-
private interpolation;
|
|
9
|
-
constructor();
|
|
10
|
-
/**
|
|
11
|
-
* Defined for compatibility. Not used in TEADS.
|
|
12
|
-
*/
|
|
13
|
-
authenticate(authParams: object): void;
|
|
14
|
-
/**
|
|
15
|
-
* Configures the TEADS Plugin for IEF
|
|
16
|
-
* @param {string} name name of the resource
|
|
17
|
-
* @param {Object} staticParams static parameters for the resource
|
|
18
|
-
* @param {string} staticParams.instance-type instance type from the list of supported instances
|
|
19
|
-
* @param {number} staticParams.expected-lifespan expected lifespan of the instance in years
|
|
20
|
-
* @param {Interpolation} staticParams.interpolation expected lifespan of the instance in years
|
|
21
|
-
*/
|
|
22
|
-
configure(name: string, staticParams?: object | undefined): Promise<IOutputModelInterface>;
|
|
23
|
-
/**
|
|
24
|
-
* Calculate the total emissions for a list of inputs
|
|
25
|
-
*
|
|
26
|
-
* Each input require:
|
|
27
|
-
* @param {Object[]} inputs ISO 8601 timestamp string
|
|
28
|
-
* @param {string} inputs[].timestamp ISO 8601 timestamp string
|
|
29
|
-
* @param {number} inputs[].duration input duration in seconds
|
|
30
|
-
* @param {number} inputs[].cpu-util percentage cpu usage
|
|
31
|
-
*/
|
|
32
|
-
execute(inputs: object | object[] | undefined): Promise<any[]>;
|
|
33
|
-
/**
|
|
34
|
-
* Returns model identifier
|
|
35
|
-
*/
|
|
36
|
-
modelIdentifier(): string;
|
|
37
|
-
/**
|
|
38
|
-
* Standardize the instance metrics for all the vendors
|
|
39
|
-
*
|
|
40
|
-
* Maps the instance metrics to a standard format (min, max, idle, 10%, 50%, 100%) for all the vendors
|
|
41
|
-
*/
|
|
42
|
-
standardizeInstanceMetrics(): void;
|
|
43
|
-
/**
|
|
44
|
-
* Calculates the energy consumption for a single input
|
|
45
|
-
* requires
|
|
46
|
-
*
|
|
47
|
-
* duration: duration of the input in seconds
|
|
48
|
-
* cpu-util: cpu usage in percentage
|
|
49
|
-
* timestamp: RFC3339 timestamp string
|
|
50
|
-
*
|
|
51
|
-
* Uses a spline method for AWS and linear interpolation for GCP and Azure
|
|
52
|
-
*/
|
|
53
|
-
private calculateEnergy;
|
|
54
|
-
/**
|
|
55
|
-
* Calculates the embodied emissions for a given input
|
|
56
|
-
*/
|
|
57
|
-
private embodiedEmissions;
|
|
58
|
-
}
|
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TeadsAWS = void 0;
|
|
4
|
-
const typescript_cubic_spline_1 = require("typescript-cubic-spline");
|
|
5
|
-
const AWS_INSTANCES = require("./aws-instances.json");
|
|
6
|
-
const AWS_EMBODIED = require("./aws-embodied.json");
|
|
7
|
-
const config_1 = require("../../config");
|
|
8
|
-
const common_1 = require("../../types/common");
|
|
9
|
-
const { MODEL_IDS } = config_1.CONFIG;
|
|
10
|
-
const { TEADS_AWS } = MODEL_IDS;
|
|
11
|
-
class TeadsAWS {
|
|
12
|
-
constructor() {
|
|
13
|
-
// compute instances grouped by the vendor with usage data
|
|
14
|
-
this.computeInstances = {};
|
|
15
|
-
// list of all the by Architecture
|
|
16
|
-
this.instanceType = '';
|
|
17
|
-
this.expectedLifespan = 4 * 365 * 24 * 3600;
|
|
18
|
-
this.interpolation = common_1.Interpolation.LINEAR;
|
|
19
|
-
this.standardizeInstanceMetrics();
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Defined for compatibility. Not used in TEADS.
|
|
23
|
-
*/
|
|
24
|
-
authenticate(authParams) {
|
|
25
|
-
this.authParams = authParams;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Configures the TEADS Plugin for IEF
|
|
29
|
-
* @param {string} name name of the resource
|
|
30
|
-
* @param {Object} staticParams static parameters for the resource
|
|
31
|
-
* @param {string} staticParams.instance-type instance type from the list of supported instances
|
|
32
|
-
* @param {number} staticParams.expected-lifespan expected lifespan of the instance in years
|
|
33
|
-
* @param {Interpolation} staticParams.interpolation expected lifespan of the instance in years
|
|
34
|
-
*/
|
|
35
|
-
async configure(name, staticParams = undefined) {
|
|
36
|
-
this.name = name;
|
|
37
|
-
if (staticParams === undefined) {
|
|
38
|
-
throw new Error('Required Parameters not provided');
|
|
39
|
-
}
|
|
40
|
-
if ('instance-type' in staticParams) {
|
|
41
|
-
const instanceType = staticParams['instance-type'];
|
|
42
|
-
if (instanceType in this.computeInstances) {
|
|
43
|
-
this.instanceType = instanceType;
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
throw new Error('Instance Type not supported');
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
else if (this.instanceType === '') {
|
|
50
|
-
throw new Error('Instance Type not provided');
|
|
51
|
-
}
|
|
52
|
-
if ('expected-lifespan' in staticParams) {
|
|
53
|
-
this.expectedLifespan = staticParams['expected-lifespan'];
|
|
54
|
-
}
|
|
55
|
-
if ('interpolation' in staticParams) {
|
|
56
|
-
this.interpolation = staticParams?.interpolation;
|
|
57
|
-
}
|
|
58
|
-
return this;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Calculate the total emissions for a list of inputs
|
|
62
|
-
*
|
|
63
|
-
* Each input require:
|
|
64
|
-
* @param {Object[]} inputs ISO 8601 timestamp string
|
|
65
|
-
* @param {string} inputs[].timestamp ISO 8601 timestamp string
|
|
66
|
-
* @param {number} inputs[].duration input duration in seconds
|
|
67
|
-
* @param {number} inputs[].cpu-util percentage cpu usage
|
|
68
|
-
*/
|
|
69
|
-
async execute(inputs) {
|
|
70
|
-
if (inputs === undefined) {
|
|
71
|
-
throw new Error('Required Parameters not provided');
|
|
72
|
-
}
|
|
73
|
-
if (!Array.isArray(inputs)) {
|
|
74
|
-
throw new Error('inputs should be an array');
|
|
75
|
-
}
|
|
76
|
-
if (this.instanceType === '') {
|
|
77
|
-
throw new Error('Configuration is incomplete');
|
|
78
|
-
}
|
|
79
|
-
return inputs.map((input) => {
|
|
80
|
-
this.configure(this.name, input);
|
|
81
|
-
const e = this.calculateEnergy(input);
|
|
82
|
-
const m = this.embodiedEmissions(input);
|
|
83
|
-
input['energy'] = e;
|
|
84
|
-
input['embodied-carbon'] = m;
|
|
85
|
-
return input;
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Returns model identifier
|
|
90
|
-
*/
|
|
91
|
-
modelIdentifier() {
|
|
92
|
-
return TEADS_AWS;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Standardize the instance metrics for all the vendors
|
|
96
|
-
*
|
|
97
|
-
* Maps the instance metrics to a standard format (min, max, idle, 10%, 50%, 100%) for all the vendors
|
|
98
|
-
*/
|
|
99
|
-
standardizeInstanceMetrics() {
|
|
100
|
-
AWS_INSTANCES.forEach((instance) => {
|
|
101
|
-
const cpus = parseInt(instance['Instance vCPU'], 10);
|
|
102
|
-
this.computeInstances[instance['Instance type']] = {
|
|
103
|
-
consumption: {
|
|
104
|
-
idle: parseFloat(instance['Instance @ Idle'].replace(',', '.')),
|
|
105
|
-
tenPercent: parseFloat(instance['Instance @ 10%'].replace(',', '.')),
|
|
106
|
-
fiftyPercent: parseFloat(instance['Instance @ 50%'].replace(',', '.')),
|
|
107
|
-
hundredPercent: parseFloat(instance['Instance @ 100%'].replace(',', '.')),
|
|
108
|
-
},
|
|
109
|
-
vCPUs: cpus,
|
|
110
|
-
maxvCPUs: parseInt(instance['Platform Total Number of vCPU'], 10),
|
|
111
|
-
name: instance['Instance type'],
|
|
112
|
-
};
|
|
113
|
-
});
|
|
114
|
-
AWS_EMBODIED.forEach((instance) => {
|
|
115
|
-
this.computeInstances[instance['type']].embodiedEmission =
|
|
116
|
-
instance['total'];
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Calculates the energy consumption for a single input
|
|
121
|
-
* requires
|
|
122
|
-
*
|
|
123
|
-
* duration: duration of the input in seconds
|
|
124
|
-
* cpu-util: cpu usage in percentage
|
|
125
|
-
* timestamp: RFC3339 timestamp string
|
|
126
|
-
*
|
|
127
|
-
* Uses a spline method for AWS and linear interpolation for GCP and Azure
|
|
128
|
-
*/
|
|
129
|
-
calculateEnergy(input) {
|
|
130
|
-
if (!('duration' in input) ||
|
|
131
|
-
!('cpu-util' in input) ||
|
|
132
|
-
!('timestamp' in input)) {
|
|
133
|
-
throw new Error('Required Parameters duration,cpu-util,timestamp not provided for input');
|
|
134
|
-
}
|
|
135
|
-
const duration = input['duration']; // Duration is in seconds.
|
|
136
|
-
const cpu = input['cpu-util']; // Convert cpu usage to percentage.
|
|
137
|
-
const x = [0, 10, 50, 100]; // Get the wattage for the instance type.
|
|
138
|
-
const y = [
|
|
139
|
-
this.computeInstances[this.instanceType].consumption.idle ?? 0,
|
|
140
|
-
this.computeInstances[this.instanceType].consumption.tenPercent ?? 0,
|
|
141
|
-
this.computeInstances[this.instanceType].consumption.fiftyPercent ?? 0,
|
|
142
|
-
this.computeInstances[this.instanceType].consumption.hundredPercent ?? 0,
|
|
143
|
-
];
|
|
144
|
-
const spline = new typescript_cubic_spline_1.default(x, y);
|
|
145
|
-
let wattage = 0.0;
|
|
146
|
-
if (this.interpolation === common_1.Interpolation.SPLINE) {
|
|
147
|
-
wattage = spline.at(cpu);
|
|
148
|
-
}
|
|
149
|
-
else if (this.interpolation === common_1.Interpolation.LINEAR) {
|
|
150
|
-
// base rate is from which level of cpu linear interpolation is applied at
|
|
151
|
-
let base_rate = 0;
|
|
152
|
-
let base_cpu = 0;
|
|
153
|
-
let ratio = 0;
|
|
154
|
-
// find the base rate and ratio
|
|
155
|
-
for (let i = 0; i < x.length; i++) {
|
|
156
|
-
if (cpu === x[i]) {
|
|
157
|
-
base_rate = y[i];
|
|
158
|
-
base_cpu = x[i];
|
|
159
|
-
break;
|
|
160
|
-
}
|
|
161
|
-
else if (cpu > x[i] && cpu < x[i + 1]) {
|
|
162
|
-
base_rate = y[i];
|
|
163
|
-
base_cpu = x[i];
|
|
164
|
-
ratio = (y[i + 1] - y[i]) / (x[i + 1] - x[i]);
|
|
165
|
-
break;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
// sum of base_rate + (cpu - base_cpu) * ratio = total rate of cpu usage
|
|
169
|
-
wattage = base_rate + (cpu - base_cpu) * ratio;
|
|
170
|
-
}
|
|
171
|
-
// duration is in seconds
|
|
172
|
-
// wattage is in watts
|
|
173
|
-
// eg: 30W x 300s = 9000 J
|
|
174
|
-
// 1 Wh = 3600 J
|
|
175
|
-
// 9000 J / 3600 = 2.5 Wh
|
|
176
|
-
// J / 3600 = Wh
|
|
177
|
-
// 2.5 Wh / 1000 = 0.0025 kWh
|
|
178
|
-
// Wh / 1000 = kWh
|
|
179
|
-
// (wattage * duration) / (seconds in an hour) / 1000 = kWh
|
|
180
|
-
return (wattage * duration) / 3600 / 1000;
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Calculates the embodied emissions for a given input
|
|
184
|
-
*/
|
|
185
|
-
embodiedEmissions(input) {
|
|
186
|
-
// duration
|
|
187
|
-
const durationInHours = input['duration'] / 3600;
|
|
188
|
-
// M = TE * (TR/EL) * (RR/TR)
|
|
189
|
-
// Where:
|
|
190
|
-
// TE = Total Embodied Emissions, the sum of Life Cycle Assessment(LCA) emissions for all hardware components
|
|
191
|
-
// TR = Time Reserved, the length of time the hardware is reserved for use by the software
|
|
192
|
-
// EL = Expected Lifespan, the anticipated time that the equipment will be installed
|
|
193
|
-
// RR = Resources Reserved, the number of resources reserved for use by the software.
|
|
194
|
-
// TR = Total Resources, the total number of resources available.
|
|
195
|
-
const totalEmissions = this.computeInstances[this.instanceType].embodiedEmission ?? 0;
|
|
196
|
-
const timeReserved = durationInHours;
|
|
197
|
-
const expectedLifespan = this.expectedLifespan / 3600;
|
|
198
|
-
const reservedResources = this.computeInstances[this.instanceType].vCPUs ?? 1.0;
|
|
199
|
-
const totalResources = this.computeInstances[this.instanceType].maxVCPUs ?? 1.0;
|
|
200
|
-
// Multiply totalEmissions by 1000 to convert from kgCO2e to gCO2e
|
|
201
|
-
return (totalEmissions *
|
|
202
|
-
1000 *
|
|
203
|
-
(timeReserved / expectedLifespan) *
|
|
204
|
-
(reservedResources / totalResources));
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
exports.TeadsAWS = TeadsAWS;
|
|
208
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RlYWRzLWF3cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBNkM7QUFFN0Msc0RBQXNEO0FBQ3RELG9EQUFvRDtBQUlwRCx5Q0FBb0M7QUFFcEMsK0NBQStEO0FBRS9ELE1BQU0sRUFBQyxTQUFTLEVBQUMsR0FBRyxlQUFNLENBQUM7QUFDM0IsTUFBTSxFQUFDLFNBQVMsRUFBQyxHQUFHLFNBQVMsQ0FBQztBQUU5QixNQUFhLFFBQVE7SUFhbkI7UUFWQSwwREFBMEQ7UUFDbEQscUJBQWdCLEdBRXBCLEVBQUUsQ0FBQztRQUVQLGtDQUFrQztRQUMxQixpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUNsQixxQkFBZ0IsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDdkMsa0JBQWEsR0FBRyxzQkFBYSxDQUFDLE1BQU0sQ0FBQztRQUczQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZLENBQUMsVUFBa0I7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUNiLElBQVksRUFDWixlQUFtQyxTQUFTO1FBRTVDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRWpCLElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRTtZQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7U0FDckQ7UUFFRCxJQUFJLGVBQWUsSUFBSSxZQUFZLEVBQUU7WUFDbkMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLGVBQWUsQ0FBVyxDQUFDO1lBQzdELElBQUksWUFBWSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDekMsSUFBSSxD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QUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLElBQUksR0FBRyxDQUFDO1FBQzNELGtFQUFrRTtRQUNsRSxPQUFPLENBQ0wsY0FBYztZQUNkLElBQUk7WUFDSixDQUFDLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQztZQUNqQyxDQUFDLGlCQUFpQixHQUFHLGNBQWMsQ0FBQyxDQUNyQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBdk9ELDRCQXVPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTcGxpbmUgZnJvbSAndHlwZXNjcmlwdC1jdWJpYy1zcGxpbmUnO1xuXG5pbXBvcnQgKiBhcyBBV1NfSU5TVEFOQ0VTIGZyb20gJy4vYXdzLWluc3RhbmNlcy5qc29uJztcbmltcG9ydCAqIGFzIEFXU19FTUJPRElFRCBmcm9tICcuL2F3cy1lbWJvZGllZC5qc29uJztcblxuaW1wb3J0IHtJT3V0cHV0TW9kZWxJbnRlcmZhY2V9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5pbXBvcnQge0NPTkZJR30gZnJvbSAnLi4vLi4vY29uZmlnJztcblxuaW1wb3J0IHtLZXlWYWx1ZVBhaXIsIEludGVycG9sYXRpb259IGZyb20gJy4uLy4uL3R5cGVzL2NvbW1vbic7XG5cbmNvbnN0IHtNT0RFTF9JRFN9ID0gQ09ORklHO1xuY29uc3Qge1RFQURTX0FXU30gPSBNT0RFTF9JRFM7XG5cbmV4cG9ydCBjbGFzcyBUZWFkc0FXUyBpbXBsZW1lbnRzIElPdXRwdXRNb2RlbEludGVyZmFjZSB7XG4gIGF1dGhQYXJhbXM6IG9iamVjdCB8IHVuZGVmaW5lZDsgLy8gRGVmaW5lZCBmb3IgY29tcGF0aWJpbGl0eS4gTm90IHVzZWQgaW4gVEVBRFMuXG4gIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDsgLy8gbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2VcbiAgLy8gY29tcHV0ZSBpbnN0YW5jZXMgZ3JvdXBlZCBieSB0aGUgdmVuZG9yIHdpdGggdXNhZ2UgZGF0YVxuICBwcml2YXRlIGNvbXB1dGVJbnN0YW5jZXM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBLZXlWYWx1ZVBhaXI7XG4gIH0gPSB7fTtcblxuICAvLyBsaXN0IG9mIGFsbCB0aGUgYnkgQXJjaGl0ZWN0dXJlXG4gIHByaXZhdGUgaW5zdGFuY2VUeXBlID0gJyc7XG4gIHByaXZhdGUgZXhwZWN0ZWRMaWZlc3BhbiA9IDQgKiAzNjUgKiAyNCAqIDM2MDA7XG4gIHByaXZhdGUgaW50ZXJwb2xhdGlvbiA9IEludGVycG9sYXRpb24uTElORUFSO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc3RhbmRhcmRpemVJbnN0YW5jZU1ldHJpY3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVkIGZvciBjb21wYXRpYmlsaXR5LiBOb3QgdXNlZCBpbiBURUFEUy5cbiAgICovXG4gIGF1dGhlbnRpY2F0ZShhdXRoUGFyYW1zOiBvYmplY3QpOiB2b2lkIHtcbiAgICB0aGlzLmF1dGhQYXJhbXMgPSBhdXRoUGFyYW1zO1xuICB9XG5cbiAgLyoqXG4gICAqICBDb25maWd1cmVzIHRoZSBURUFEUyBQbHVnaW4gZm9yIElFRlxuICAgKiAgQHBhcmFtIHtzdHJpbmd9IG5hbWUgbmFtZSBvZiB0aGUgcmVzb3VyY2VcbiAgICogIEBwYXJhbSB7T2JqZWN0fSBzdGF0aWNQYXJhbXMgc3RhdGljIHBhcmFtZXRlcnMgZm9yIHRoZSByZXNvdXJjZVxuICAgKiAgQHBhcmFtIHtzdHJpbmd9IHN0YXRpY1BhcmFtcy5pbnN0YW5jZS10eXBlIGluc3RhbmNlIHR5cGUgZnJvbSB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgaW5zdGFuY2VzXG4gICAqICBAcGFyYW0ge251bWJlcn0gc3RhdGljUGFyYW1zLmV4cGVjdGVkLWxpZmVzcGFuIGV4cGVjdGVkIGxpZmVzcGFuIG9mIHRoZSBpbnN0YW5jZSBpbiB5ZWFyc1xuICAgKiAgQHBhcmFtIHtJbnRlcnBvbGF0aW9ufSBzdGF0aWNQYXJhbXMuaW50ZXJwb2xhdGlvbiBleHBlY3RlZCBsaWZlc3BhbiBvZiB0aGUgaW5zdGFuY2UgaW4geWVhcnNcbiAgICovXG4gIGFzeW5jIGNvbmZpZ3VyZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgc3RhdGljUGFyYW1zOiBvYmplY3QgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxJT3V0cHV0TW9kZWxJbnRlcmZhY2U+IHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuXG4gICAgaWYgKHN0YXRpY1BhcmFtcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIFBhcmFtZXRlcnMgbm90IHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCdpbnN0YW5jZS10eXBlJyBpbiBzdGF0aWNQYXJhbXMpIHtcbiAgICAgIGNvbnN0IGluc3RhbmNlVHlwZSA9IHN0YXRpY1BhcmFtc1snaW5zdGFuY2UtdHlwZSddIGFzIHN0cmluZztcbiAgICAgIGlmIChpbnN0YW5jZVR5cGUgaW4gdGhpcy5jb21wdXRlSW5zdGFuY2VzKSB7XG4gICAgICAgIHRoaXMuaW5zdGFuY2VUeXBlID0gaW5zdGFuY2VUeXBlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnN0YW5jZSBUeXBlIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuaW5zdGFuY2VUeXBlID09PSAnJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnN0YW5jZSBUeXBlIG5vdCBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIGlmICgnZXhwZWN0ZWQtbGlmZXNwYW4nIGluIHN0YXRpY1BhcmFtcykge1xuICAgICAgdGhpcy5leHBlY3RlZExpZmVzcGFuID0gc3RhdGljUGFyYW1zWydleHBlY3RlZC1saWZlc3BhbiddIGFzIG51bWJlcjtcbiAgICB9XG5cbiAgICBpZiAoJ2ludGVycG9sYXRpb24nIGluIHN0YXRpY1BhcmFtcykge1xuICAgICAgdGhpcy5pbnRlcnBvbGF0aW9uID0gc3RhdGljUGFyYW1zPy5pbnRlcnBvbGF0aW9uIGFzIEludGVycG9sYXRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSB0b3RhbCBlbWlzc2lvbnMgZm9yIGEgbGlzdCBvZiBpbnB1dHNcbiAgICpcbiAgICogRWFjaCBpbnB1dCByZXF1aXJlOlxuICAgKiAgQHBhcmFtIHtPYmplY3RbXX0gaW5wdXRzICBJU08gODYwMSB0aW1lc3RhbXAgc3RyaW5nXG4gICAqICBAcGFyYW0ge3N0cmluZ30gaW5wdXRzW10udGltZXN0YW1wIElTTyA4NjAxIHRpbWVzdGFtcCBzdHJpbmdcbiAgICogIEBwYXJhbSB7bnVtYmVyfSBpbnB1dHNbXS5kdXJhdGlvbiBpbnB1dCBkdXJhdGlvbiBpbiBzZWNvbmRzXG4gICAqICBAcGFyYW0ge251bWJlcn0gaW5wdXRzW10uY3B1LXV0aWwgcGVyY2VudGFnZSBjcHUgdXNhZ2VcbiAgICovXG4gIGFzeW5jIGV4ZWN1dGUoaW5wdXRzOiBvYmplY3QgfCBvYmplY3RbXSB8IHVuZGVmaW5lZCk6IFByb21pc2U8YW55W10+IHtcbiAgICBpZiAoaW5wdXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgUGFyYW1ldGVycyBub3QgcHJvdmlkZWQnKTtcbiAgICB9XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGlucHV0cykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW5wdXRzIHNob3VsZCBiZSBhbiBhcnJheScpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluc3RhbmNlVHlwZSA9PT0gJycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29uZmlndXJhdGlvbiBpcyBpbmNvbXBsZXRlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlucHV0cy5tYXAoKGlucHV0OiBLZXlWYWx1ZVBhaXIpID0+IHtcbiAgICAgIHRoaXMuY29uZmlndXJlKHRoaXMubmFtZSEsIGlucHV0KTtcbiAgICAgIGNvbnN0IGUgPSB0aGlzLmNhbGN1bGF0ZUVuZXJneShpbnB1dCk7XG4gICAgICBjb25zdCBtID0gdGhpcy5lbWJvZGllZEVtaXNzaW9ucyhpbnB1dCk7XG4gICAgICBpbnB1dFsnZW5lcmd5J10gPSBlO1xuICAgICAgaW5wdXRbJ2VtYm9kaWVkLWNhcmJvbiddID0gbTtcbiAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIG1vZGVsIGlkZW50aWZpZXJcbiAgICovXG4gIG1vZGVsSWRlbnRpZmllcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBURUFEU19BV1M7XG4gIH1cblxuICAvKipcbiAgICogU3RhbmRhcmRpemUgdGhlIGluc3RhbmNlIG1ldHJpY3MgZm9yIGFsbCB0aGUgdmVuZG9yc1xuICAgKlxuICAgKiBNYXBzIHRoZSBpbnN0YW5jZSBtZXRyaWNzIHRvIGEgc3RhbmRhcmQgZm9ybWF0IChtaW4sIG1heCwgaWRsZSwgMTAlLCA1MCUsIDEwMCUpIGZvciBhbGwgdGhlIHZlbmRvcnNcbiAgICovXG4gIHN0YW5kYXJkaXplSW5zdGFuY2VNZXRyaWNzKCkge1xuICAgIEFXU19JTlNUQU5DRVMuZm9yRWFjaCgoaW5zdGFuY2U6IEtleVZhbHVlUGFpcikgPT4ge1xuICAgICAgY29uc3QgY3B1cyA9IHBhcnNlSW50KGluc3RhbmNlWydJbnN0YW5jZSB2Q1BVJ10sIDEwKTtcbiAgICAgIHRoaXMuY29tcHV0ZUluc3RhbmNlc1tpbnN0YW5jZVsnSW5zdGFuY2UgdHlwZSddXSA9IHtcbiAgICAgICAgY29uc3VtcHRpb246IHtcbiAgICAgICAgICBpZGxlOiBwYXJzZUZsb2F0KGluc3RhbmNlWydJbnN0YW5jZSBAIElkbGUnXS5yZXBsYWNlKCcsJywgJy4nKSksXG4gICAgICAgICAgdGVuUGVyY2VudDogcGFyc2VGbG9hdChpbnN0YW5jZVsnSW5zdGFuY2UgQCAxMCUnXS5yZXBsYWNlKCcsJywgJy4nKSksXG4gICAgICAgICAgZmlmdHlQZXJjZW50OiBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgaW5zdGFuY2VbJ0luc3RhbmNlIEAgNTAlJ10ucmVwbGFjZSgnLCcsICcuJylcbiAgICAgICAgICApLFxuICAgICAgICAgIGh1bmRyZWRQZXJjZW50OiBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgaW5zdGFuY2VbJ0luc3RhbmNlIEAgMTAwJSddLnJlcGxhY2UoJywnLCAnLicpXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgdkNQVXM6IGNwdXMsXG4gICAgICAgIG1heHZDUFVzOiBwYXJzZUludChpbnN0YW5jZVsnUGxhdGZvcm0gVG90YWwgTnVtYmVyIG9mIHZDUFUnXSwgMTApLFxuICAgICAgICBuYW1lOiBpbnN0YW5jZVsnSW5zdGFuY2UgdHlwZSddLFxuICAgICAgfSBhcyBLZXlWYWx1ZVBhaXI7XG4gICAgfSk7XG4gICAgQVdTX0VNQk9ESUVELmZvckVhY2goKGluc3RhbmNlOiBLZXlWYWx1ZVBhaXIpID0+IHtcbiAgICAgIHRoaXMuY29tcHV0ZUluc3RhbmNlc1tpbnN0YW5jZVsndHlwZSddXS5lbWJvZGllZEVtaXNzaW9uID1cbiAgICAgICAgaW5zdGFuY2VbJ3RvdGFsJ107XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgZW5lcmd5IGNvbnN1bXB0aW9uIGZvciBhIHNpbmdsZSBpbnB1dFxuICAgKiByZXF1aXJlc1xuICAgKlxuICAgKiBkdXJhdGlvbjogZHVyYXRpb24gb2YgdGhlIGlucHV0IGluIHNlY29uZHNcbiAgICogY3B1LXV0aWw6IGNwdSB1c2FnZSBpbiBwZXJjZW50YWdlXG4gICAqIHRpbWVzdGFtcDogUkZDMzMzOSB0aW1lc3RhbXAgc3RyaW5nXG4gICAqXG4gICAqIFVzZXMgYSBzcGxpbmUgbWV0aG9kIGZvciBBV1MgYW5kIGxpbmVhciBpbnRlcnBvbGF0aW9uIGZvciBHQ1AgYW5kIEF6dXJlXG4gICAqL1xuICBwcml2YXRlIGNhbGN1bGF0ZUVuZXJneShpbnB1dDogS2V5VmFsdWVQYWlyKSB7XG4gICAgaWYgKFxuICAgICAgISgnZHVyYXRpb24nIGluIGlucHV0KSB8fFxuICAgICAgISgnY3B1LXV0aWwnIGluIGlucHV0KSB8fFxuICAgICAgISgndGltZXN0YW1wJyBpbiBpbnB1dClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1JlcXVpcmVkIFBhcmFtZXRlcnMgZHVyYXRpb24sY3B1LXV0aWwsdGltZXN0YW1wIG5vdCBwcm92aWRlZCBmb3IgaW5wdXQnXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGR1cmF0aW9uID0gaW5wdXRbJ2R1cmF0aW9uJ107IC8vIER1cmF0aW9uIGlzIGluIHNlY29uZHMuXG4gICAgY29uc3QgY3B1ID0gaW5wdXRbJ2NwdS11dGlsJ107IC8vIENvbnZlcnQgY3B1IHVzYWdlIHRvIHBlcmNlbnRhZ2UuXG5cbiAgICBjb25zdCB4ID0gWzAsIDEwLCA1MCwgMTAwXTsgLy8gR2V0IHRoZSB3YXR0YWdlIGZvciB0aGUgaW5zdGFuY2UgdHlwZS5cbiAgICBjb25zdCB5OiBudW1iZXJbXSA9IFtcbiAgICAgIHRoaXMuY29tcHV0ZUluc3RhbmNlc1t0aGlzLmluc3RhbmNlVHlwZV0uY29uc3VtcHRpb24uaWRsZSA/PyAwLFxuICAgICAgdGhpcy5jb21wdXRlSW5zdGFuY2VzW3RoaXMuaW5zdGFuY2VUeXBlXS5jb25zdW1wdGlvbi50ZW5QZXJjZW50ID8/IDAsXG4gICAgICB0aGlzLmNvbXB1dGVJbnN0YW5jZXNbdGhpcy5pbnN0YW5jZVR5cGVdLmNvbnN1bXB0aW9uLmZpZnR5UGVyY2VudCA/PyAwLFxuICAgICAgdGhpcy5jb21wdXRlSW5zdGFuY2VzW3RoaXMuaW5zdGFuY2VUeXBlXS5jb25zdW1wdGlvbi5odW5kcmVkUGVyY2VudCA/PyAwLFxuICAgIF07XG5cbiAgICBjb25zdCBzcGxpbmUgPSBuZXcgU3BsaW5lKHgsIHkpO1xuXG4gICAgbGV0IHdhdHRhZ2UgPSAwLjA7XG4gICAgaWYgKHRoaXMuaW50ZXJwb2xhdGlvbiA9PT0gSW50ZXJwb2xhdGlvbi5TUExJTkUpIHtcbiAgICAgIHdhdHRhZ2UgPSBzcGxpbmUuYXQoY3B1KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW50ZXJwb2xhdGlvbiA9PT0gSW50ZXJwb2xhdGlvbi5MSU5FQVIpIHtcbiAgICAgIC8vIGJhc2UgcmF0ZSBpcyBmcm9tIHdoaWNoIGxldmVsIG9mIGNwdSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBpcyBhcHBsaWVkIGF0XG4gICAgICBsZXQgYmFzZV9yYXRlID0gMDtcbiAgICAgIGxldCBiYXNlX2NwdSA9IDA7XG4gICAgICBsZXQgcmF0aW8gPSAwO1xuICAgICAgLy8gZmluZCB0aGUgYmFzZSByYXRlIGFuZCByYXRpb1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChjcHUgPT09IHhbaV0pIHtcbiAgICAgICAgICBiYXNlX3JhdGUgPSB5W2ldO1xuICAgICAgICAgIGJhc2VfY3B1ID0geFtpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmIChjcHUgPiB4W2ldICYmIGNwdSA8IHhbaSArIDFdKSB7XG4gICAgICAgICAgYmFzZV9yYXRlID0geVtpXTtcbiAgICAgICAgICBiYXNlX2NwdSA9IHhbaV07XG4gICAgICAgICAgcmF0aW8gPSAoeVtpICsgMV0gLSB5W2ldKSAvICh4W2kgKyAxXSAtIHhbaV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBzdW0gb2YgYmFzZV9yYXRlICsgKGNwdSAtIGJhc2VfY3B1KSAqIHJhdGlvID0gdG90YWwgcmF0ZSBvZiBjcHUgdXNhZ2VcbiAgICAgIHdhdHRhZ2UgPSBiYXNlX3JhdGUgKyAoY3B1IC0gYmFzZV9jcHUpICogcmF0aW87XG4gICAgfVxuICAgIC8vICBkdXJhdGlvbiBpcyBpbiBzZWNvbmRzXG4gICAgLy8gIHdhdHRhZ2UgaXMgaW4gd2F0dHNcbiAgICAvLyAgZWc6IDMwVyB4IDMwMHMgPSA5MDAwIEpcbiAgICAvLyAgMSBXaCA9IDM2MDAgSlxuICAgIC8vICA5MDAwIEogLyAzNjAwID0gMi41IFdoXG4gICAgLy8gIEogLyAzNjAwID0gV2hcbiAgICAvLyAgMi41IFdoIC8gMTAwMCA9IDAuMDAyNSBrV2hcbiAgICAvLyAgV2ggLyAxMDAwID0ga1doXG4gICAgLy8gKHdhdHRhZ2UgKiBkdXJhdGlvbikgLyAoc2Vjb25kcyBpbiBhbiBob3VyKSAvIDEwMDAgPSBrV2hcbiAgICByZXR1cm4gKHdhdHRhZ2UgKiBkdXJhdGlvbikgLyAzNjAwIC8gMTAwMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBlbWJvZGllZCBlbWlzc2lvbnMgZm9yIGEgZ2l2ZW4gaW5wdXRcbiAgICovXG4gIHByaXZhdGUgZW1ib2RpZWRFbWlzc2lvbnMoaW5wdXQ6IEtleVZhbHVlUGFpcik6IG51bWJlciB7XG4gICAgLy8gZHVyYXRpb25cbiAgICBjb25zdCBkdXJhdGlvbkluSG91cnMgPSBpbnB1dFsnZHVyYXRpb24nXSAvIDM2MDA7XG4gICAgLy8gTSA9IFRFICogKFRSL0VMKSAqIChSUi9UUilcbiAgICAvLyBXaGVyZTpcbiAgICAvLyBURSA9IFRvdGFsIEVtYm9kaWVkIEVtaXNzaW9ucywgdGhlIHN1bSBvZiBMaWZlIEN5Y2xlIEFzc2Vzc21lbnQoTENBKSBlbWlzc2lvbnMgZm9yIGFsbCBoYXJkd2FyZSBjb21wb25lbnRzXG4gICAgLy8gVFIgPSBUaW1lIFJlc2VydmVkLCB0aGUgbGVuZ3RoIG9mIHRpbWUgdGhlIGhhcmR3YXJlIGlzIHJlc2VydmVkIGZvciB1c2UgYnkgdGhlIHNvZnR3YXJlXG4gICAgLy8gRUwgPSBFeHBlY3RlZCBMaWZlc3BhbiwgdGhlIGFudGljaXBhdGVkIHRpbWUgdGhhdCB0aGUgZXF1aXBtZW50IHdpbGwgYmUgaW5zdGFsbGVkXG4gICAgLy8gUlIgPSBSZXNvdXJjZXMgUmVzZXJ2ZWQsIHRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIHJlc2VydmVkIGZvciB1c2UgYnkgdGhlIHNvZnR3YXJlLlxuICAgIC8vIFRSID0gVG90YWwgUmVzb3VyY2VzLCB0aGUgdG90YWwgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUuXG4gICAgY29uc3QgdG90YWxFbWlzc2lvbnMgPVxuICAgICAgdGhpcy5jb21wdXRlSW5zdGFuY2VzW3RoaXMuaW5zdGFuY2VUeXBlXS5lbWJvZGllZEVtaXNzaW9uID8/IDA7XG4gICAgY29uc3QgdGltZVJlc2VydmVkID0gZHVyYXRpb25JbkhvdXJzO1xuICAgIGNvbnN0IGV4cGVjdGVkTGlmZXNwYW4gPSB0aGlzLmV4cGVjdGVkTGlmZXNwYW4gLyAzNjAwO1xuICAgIGNvbnN0IHJlc2VydmVkUmVzb3VyY2VzID1cbiAgICAgIHRoaXMuY29tcHV0ZUluc3RhbmNlc1t0aGlzLmluc3RhbmNlVHlwZV0udkNQVXMgPz8gMS4wO1xuICAgIGNvbnN0IHRvdGFsUmVzb3VyY2VzID1cbiAgICAgIHRoaXMuY29tcHV0ZUluc3RhbmNlc1t0aGlzLmluc3RhbmNlVHlwZV0ubWF4VkNQVXMgPz8gMS4wO1xuICAgIC8vIE11bHRpcGx5IHRvdGFsRW1pc3Npb25zIGJ5IDEwMDAgdG8gY29udmVydCBmcm9tIGtnQ08yZSB0byBnQ08yZVxuICAgIHJldHVybiAoXG4gICAgICB0b3RhbEVtaXNzaW9ucyAqXG4gICAgICAxMDAwICpcbiAgICAgICh0aW1lUmVzZXJ2ZWQgLyBleHBlY3RlZExpZmVzcGFuKSAqXG4gICAgICAocmVzZXJ2ZWRSZXNvdXJjZXMgLyB0b3RhbFJlc291cmNlcylcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { IOutputModelInterface } from '../interfaces';
|
|
2
|
-
import { Interpolation } from '../../types/common';
|
|
3
|
-
export declare class TeadsCurveModel implements IOutputModelInterface {
|
|
4
|
-
authParams: object | undefined;
|
|
5
|
-
name: string | undefined;
|
|
6
|
-
tdp: number;
|
|
7
|
-
curve: number[];
|
|
8
|
-
points: number[];
|
|
9
|
-
spline: any;
|
|
10
|
-
interpolation: Interpolation;
|
|
11
|
-
/**
|
|
12
|
-
* Defined for compatibility. Not used in TEADS.
|
|
13
|
-
*/
|
|
14
|
-
authenticate(authParams: object): void;
|
|
15
|
-
/**
|
|
16
|
-
* Configures the TEADS Plugin for IEF
|
|
17
|
-
* @param {string} name name of the resource
|
|
18
|
-
* @param {Object} staticParams static parameters for the resource
|
|
19
|
-
* @param {number} staticParams.tdp Thermal Design Power in Watts
|
|
20
|
-
* @param {Interpolation} staticParams.interpolation Interpolation method
|
|
21
|
-
*/
|
|
22
|
-
configure(name: string, staticParams?: object | undefined): Promise<IOutputModelInterface>;
|
|
23
|
-
/**
|
|
24
|
-
* Calculate the total emissions for a list of inputs
|
|
25
|
-
*
|
|
26
|
-
* Each input require:
|
|
27
|
-
* @param {Object[]} inputs
|
|
28
|
-
* @param {string} inputs[].timestamp RFC3339 timestamp string
|
|
29
|
-
* @param {number} inputs[].duration input duration in seconds
|
|
30
|
-
* @param {number} inputs[].cpu-util percentage cpu usage
|
|
31
|
-
*/
|
|
32
|
-
execute(inputs: object | object[] | undefined): Promise<any[]>;
|
|
33
|
-
/**
|
|
34
|
-
* Returns model identifier
|
|
35
|
-
*/
|
|
36
|
-
modelIdentifier(): string;
|
|
37
|
-
/**
|
|
38
|
-
* Calculates the energy consumption for a single input
|
|
39
|
-
* requires
|
|
40
|
-
*
|
|
41
|
-
* duration: duration of the input in seconds
|
|
42
|
-
* cpu-util: cpu usage in percentage
|
|
43
|
-
* timestamp: RFC3339 timestamp string
|
|
44
|
-
*
|
|
45
|
-
* Uses a spline method on the teads cpu wattage data
|
|
46
|
-
*/
|
|
47
|
-
private calculateEnergy;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* For JSII.
|
|
51
|
-
*/
|
|
52
|
-
export { KeyValuePair, Interpolation } from '../../types/common';
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Interpolation = exports.TeadsCurveModel = void 0;
|
|
4
|
-
const typescript_cubic_spline_1 = require("typescript-cubic-spline");
|
|
5
|
-
const config_1 = require("../../config");
|
|
6
|
-
const common_1 = require("../../types/common");
|
|
7
|
-
const { MODEL_IDS } = config_1.CONFIG;
|
|
8
|
-
const { TEADS_CURVE } = MODEL_IDS;
|
|
9
|
-
class TeadsCurveModel {
|
|
10
|
-
constructor() {
|
|
11
|
-
this.tdp = 0; // `tdp` of the chip being measured.
|
|
12
|
-
this.curve = [0.12, 0.32, 0.75, 1.02]; // Default power curve provided by the Teads Team.
|
|
13
|
-
this.points = [0, 10, 50, 100]; // Default percentage points.
|
|
14
|
-
this.spline = new typescript_cubic_spline_1.default(this.points, this.curve); // Spline interpolation of the power curve.
|
|
15
|
-
this.interpolation = common_1.Interpolation.SPLINE; // Interpolation method.
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Defined for compatibility. Not used in TEADS.
|
|
19
|
-
*/
|
|
20
|
-
authenticate(authParams) {
|
|
21
|
-
this.authParams = authParams;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Configures the TEADS Plugin for IEF
|
|
25
|
-
* @param {string} name name of the resource
|
|
26
|
-
* @param {Object} staticParams static parameters for the resource
|
|
27
|
-
* @param {number} staticParams.tdp Thermal Design Power in Watts
|
|
28
|
-
* @param {Interpolation} staticParams.interpolation Interpolation method
|
|
29
|
-
*/
|
|
30
|
-
async configure(name, staticParams = undefined) {
|
|
31
|
-
this.name = name;
|
|
32
|
-
if (staticParams === undefined) {
|
|
33
|
-
throw new Error('Required Parameters not provided');
|
|
34
|
-
}
|
|
35
|
-
if ('thermal-design-power' in staticParams) {
|
|
36
|
-
this.tdp = staticParams['thermal-design-power'];
|
|
37
|
-
}
|
|
38
|
-
// if ('curve' in staticParams && 'points' in staticParams) {
|
|
39
|
-
// this.curve = staticParams?.curve as number[];
|
|
40
|
-
// this.points = staticParams?.points as number[];
|
|
41
|
-
// if (this.curve.length !== this.points.length) {
|
|
42
|
-
// throw new Error(
|
|
43
|
-
// 'Number of points and curve values must be the same length'
|
|
44
|
-
// );
|
|
45
|
-
// }
|
|
46
|
-
// this.spline = new Spline(this.points, this.curve);
|
|
47
|
-
// }
|
|
48
|
-
if ('interpolation' in staticParams) {
|
|
49
|
-
this.interpolation = staticParams?.interpolation;
|
|
50
|
-
}
|
|
51
|
-
return this;
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Calculate the total emissions for a list of inputs
|
|
55
|
-
*
|
|
56
|
-
* Each input require:
|
|
57
|
-
* @param {Object[]} inputs
|
|
58
|
-
* @param {string} inputs[].timestamp RFC3339 timestamp string
|
|
59
|
-
* @param {number} inputs[].duration input duration in seconds
|
|
60
|
-
* @param {number} inputs[].cpu-util percentage cpu usage
|
|
61
|
-
*/
|
|
62
|
-
async execute(inputs) {
|
|
63
|
-
if (inputs === undefined) {
|
|
64
|
-
throw new Error('Required Parameters not provided');
|
|
65
|
-
}
|
|
66
|
-
else if (!Array.isArray(inputs)) {
|
|
67
|
-
throw new Error('inputs must be an array');
|
|
68
|
-
}
|
|
69
|
-
return inputs.map((input) => {
|
|
70
|
-
this.configure(this.name, input);
|
|
71
|
-
input['energy-cpu'] = this.calculateEnergy(input);
|
|
72
|
-
return input;
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Returns model identifier
|
|
77
|
-
*/
|
|
78
|
-
modelIdentifier() {
|
|
79
|
-
return TEADS_CURVE;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Calculates the energy consumption for a single input
|
|
83
|
-
* requires
|
|
84
|
-
*
|
|
85
|
-
* duration: duration of the input in seconds
|
|
86
|
-
* cpu-util: cpu usage in percentage
|
|
87
|
-
* timestamp: RFC3339 timestamp string
|
|
88
|
-
*
|
|
89
|
-
* Uses a spline method on the teads cpu wattage data
|
|
90
|
-
*/
|
|
91
|
-
calculateEnergy(input) {
|
|
92
|
-
if (!('duration' in input) ||
|
|
93
|
-
!('cpu-util' in input) ||
|
|
94
|
-
!('timestamp' in input)) {
|
|
95
|
-
throw new Error('Required Parameters duration,cpu-util,timestamp not provided for input');
|
|
96
|
-
}
|
|
97
|
-
// duration is in seconds
|
|
98
|
-
const duration = input['duration'];
|
|
99
|
-
// convert cpu usage to percentage
|
|
100
|
-
const cpu = input['cpu-util'];
|
|
101
|
-
if (cpu < 0 || cpu > 100) {
|
|
102
|
-
throw new Error('cpu usage must be between 0 and 100');
|
|
103
|
-
}
|
|
104
|
-
let tdp = this.tdp;
|
|
105
|
-
if ('thermal-design-power' in input) {
|
|
106
|
-
tdp = input['thermal-design-power'];
|
|
107
|
-
}
|
|
108
|
-
if (tdp === 0) {
|
|
109
|
-
throw new Error('`thermal-design-power` not provided. Can not compute energy.');
|
|
110
|
-
}
|
|
111
|
-
let wattage = 0.0;
|
|
112
|
-
if (this.interpolation === common_1.Interpolation.SPLINE) {
|
|
113
|
-
wattage = this.spline.at(cpu) * tdp;
|
|
114
|
-
}
|
|
115
|
-
else if (this.interpolation === common_1.Interpolation.LINEAR) {
|
|
116
|
-
const x = this.points;
|
|
117
|
-
const y = this.curve;
|
|
118
|
-
// base rate is from which level of cpu linear interpolation is applied at
|
|
119
|
-
let base_rate = 0;
|
|
120
|
-
let base_cpu = 0;
|
|
121
|
-
let ratio = 0;
|
|
122
|
-
// find the base rate and ratio
|
|
123
|
-
for (let i = 0; i < x.length; i++) {
|
|
124
|
-
if (cpu === x[i]) {
|
|
125
|
-
base_rate = y[i];
|
|
126
|
-
base_cpu = x[i];
|
|
127
|
-
break;
|
|
128
|
-
}
|
|
129
|
-
else if (cpu > x[i] && cpu < x[i + 1]) {
|
|
130
|
-
base_rate = y[i];
|
|
131
|
-
base_cpu = x[i];
|
|
132
|
-
ratio = (y[i + 1] - y[i]) / (x[i + 1] - x[i]);
|
|
133
|
-
break;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
// sum of base_rate + (cpu - base_cpu) * ratio = total rate of cpu usage
|
|
137
|
-
// total rate * tdp = wattage
|
|
138
|
-
wattage = (base_rate + (cpu - base_cpu) * ratio) * tdp;
|
|
139
|
-
}
|
|
140
|
-
// duration is in seconds
|
|
141
|
-
// wattage is in watts
|
|
142
|
-
// eg: 30W x 300s = 9000 J
|
|
143
|
-
// 1 Wh = 3600 J
|
|
144
|
-
// 9000 J / 3600 = 2.5 Wh
|
|
145
|
-
// J / 3600 = Wh
|
|
146
|
-
// 2.5 Wh / 1000 = 0.0025 kWh
|
|
147
|
-
// Wh / 1000 = kWh
|
|
148
|
-
// (wattage * duration) / (seconds in an hour) / 1000 = kWh
|
|
149
|
-
return (wattage * duration) / 3600 / 1000;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
exports.TeadsCurveModel = TeadsCurveModel;
|
|
153
|
-
/**
|
|
154
|
-
* For JSII.
|
|
155
|
-
*/
|
|
156
|
-
var common_2 = require("../../types/common");
|
|
157
|
-
Object.defineProperty(exports, "Interpolation", { enumerable: true, get: function () { return common_2.Interpolation; } });
|
|
158
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RlYWRzLWN1cnZlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUE2QztBQUk3Qyx5Q0FBb0M7QUFFcEMsK0NBQStEO0FBRS9ELE1BQU0sRUFBQyxTQUFTLEVBQUMsR0FBRyxlQUFNLENBQUM7QUFDM0IsTUFBTSxFQUFDLFdBQVcsRUFBQyxHQUFHLFNBQVMsQ0FBQztBQUVoQyxNQUFhLGVBQWU7SUFBNUI7UUFHRSxRQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsb0NBQW9DO1FBQzdDLFVBQUssR0FBYSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsa0RBQWtEO1FBQzlGLFdBQU0sR0FBYSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsNkJBQTZCO1FBQ2xFLFdBQU0sR0FBUSxJQUFJLGlDQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQywyQ0FBMkM7UUFDOUYsa0JBQWEsR0FBa0Isc0JBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyx3QkFBd0I7SUE0Si9FLENBQUM7SUExSkM7O09BRUc7SUFDSCxZQUFZLENBQUMsVUFBa0I7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxTQUFTLENBQ2IsSUFBWSxFQUNaLGVBQW1DLFNBQVM7UUFFNUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFFakIsSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztTQUNyRDtRQUVELElBQUksc0JBQXNCLElBQUksWUFBWSxFQUFF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QUFHLElBQUksQ0FBQztJQUM1QyxDQUFDO0NBQ0Y7QUFuS0QsMENBbUtDO0FBRUQ7O0dBRUc7QUFDSCw2Q0FBK0Q7QUFBekMsdUdBQUEsYUFBYSxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFNwbGluZSBmcm9tICd0eXBlc2NyaXB0LWN1YmljLXNwbGluZSc7XG5cbmltcG9ydCB7SU91dHB1dE1vZGVsSW50ZXJmYWNlfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuaW1wb3J0IHtDT05GSUd9IGZyb20gJy4uLy4uL2NvbmZpZyc7XG5cbmltcG9ydCB7S2V5VmFsdWVQYWlyLCBJbnRlcnBvbGF0aW9ufSBmcm9tICcuLi8uLi90eXBlcy9jb21tb24nO1xuXG5jb25zdCB7TU9ERUxfSURTfSA9IENPTkZJRztcbmNvbnN0IHtURUFEU19DVVJWRX0gPSBNT0RFTF9JRFM7XG5cbmV4cG9ydCBjbGFzcyBUZWFkc0N1cnZlTW9kZWwgaW1wbGVtZW50cyBJT3V0cHV0TW9kZWxJbnRlcmZhY2Uge1xuICBhdXRoUGFyYW1zOiBvYmplY3QgfCB1bmRlZmluZWQ7IC8vIERlZmluZWQgZm9yIGNvbXBhdGliaWxpdHkuIE5vdCB1c2VkIGluIFRFQURTLlxuICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7IC8vIE5hbWUgb2YgdGhlIGRhdGEgc291cmNlLlxuICB0ZHAgPSAwOyAvLyBgdGRwYCBvZiB0aGUgY2hpcCBiZWluZyBtZWFzdXJlZC5cbiAgY3VydmU6IG51bWJlcltdID0gWzAuMTIsIDAuMzIsIDAuNzUsIDEuMDJdOyAvLyBEZWZhdWx0IHBvd2VyIGN1cnZlIHByb3ZpZGVkIGJ5IHRoZSBUZWFkcyBUZWFtLlxuICBwb2ludHM6IG51bWJlcltdID0gWzAsIDEwLCA1MCwgMTAwXTsgLy8gRGVmYXVsdCBwZXJjZW50YWdlIHBvaW50cy5cbiAgc3BsaW5lOiBhbnkgPSBuZXcgU3BsaW5lKHRoaXMucG9pbnRzLCB0aGlzLmN1cnZlKTsgLy8gU3BsaW5lIGludGVycG9sYXRpb24gb2YgdGhlIHBvd2VyIGN1cnZlLlxuICBpbnRlcnBvbGF0aW9uOiBJbnRlcnBvbGF0aW9uID0gSW50ZXJwb2xhdGlvbi5TUExJTkU7IC8vIEludGVycG9sYXRpb24gbWV0aG9kLlxuXG4gIC8qKlxuICAgKiBEZWZpbmVkIGZvciBjb21wYXRpYmlsaXR5LiBOb3QgdXNlZCBpbiBURUFEUy5cbiAgICovXG4gIGF1dGhlbnRpY2F0ZShhdXRoUGFyYW1zOiBvYmplY3QpOiB2b2lkIHtcbiAgICB0aGlzLmF1dGhQYXJhbXMgPSBhdXRoUGFyYW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZXMgdGhlIFRFQURTIFBsdWdpbiBmb3IgSUVGXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIHJlc291cmNlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0aWNQYXJhbXMgc3RhdGljIHBhcmFtZXRlcnMgZm9yIHRoZSByZXNvdXJjZVxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhdGljUGFyYW1zLnRkcCBUaGVybWFsIERlc2lnbiBQb3dlciBpbiBXYXR0c1xuICAgKiBAcGFyYW0ge0ludGVycG9sYXRpb259IHN0YXRpY1BhcmFtcy5pbnRlcnBvbGF0aW9uIEludGVycG9sYXRpb24gbWV0aG9kXG4gICAqL1xuICBhc3luYyBjb25maWd1cmUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHN0YXRpY1BhcmFtczogb2JqZWN0IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG4gICk6IFByb21pc2U8SU91dHB1dE1vZGVsSW50ZXJmYWNlPiB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcblxuICAgIGlmIChzdGF0aWNQYXJhbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBQYXJhbWV0ZXJzIG5vdCBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIGlmICgndGhlcm1hbC1kZXNpZ24tcG93ZXInIGluIHN0YXRpY1BhcmFtcykge1xuICAgICAgdGhpcy50ZHAgPSBzdGF0aWNQYXJhbXNbJ3RoZXJtYWwtZGVzaWduLXBvd2VyJ10gYXMgbnVtYmVyO1xuICAgIH1cblxuICAgIC8vIGlmICgnY3VydmUnIGluIHN0YXRpY1BhcmFtcyAmJiAncG9pbnRzJyBpbiBzdGF0aWNQYXJhbXMpIHtcbiAgICAvLyAgIHRoaXMuY3VydmUgPSBzdGF0aWNQYXJhbXM/LmN1cnZlIGFzIG51bWJlcltdO1xuICAgIC8vICAgdGhpcy5wb2ludHMgPSBzdGF0aWNQYXJhbXM/LnBvaW50cyBhcyBudW1iZXJbXTtcbiAgICAvLyAgIGlmICh0aGlzLmN1cnZlLmxlbmd0aCAhPT0gdGhpcy5wb2ludHMubGVuZ3RoKSB7XG4gICAgLy8gICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAvLyAgICAgICAnTnVtYmVyIG9mIHBvaW50cyBhbmQgY3VydmUgdmFsdWVzIG11c3QgYmUgdGhlIHNhbWUgbGVuZ3RoJ1xuICAgIC8vICAgICApO1xuICAgIC8vICAgfVxuICAgIC8vICAgdGhpcy5zcGxpbmUgPSBuZXcgU3BsaW5lKHRoaXMucG9pbnRzLCB0aGlzLmN1cnZlKTtcbiAgICAvLyB9XG5cbiAgICBpZiAoJ2ludGVycG9sYXRpb24nIGluIHN0YXRpY1BhcmFtcykge1xuICAgICAgdGhpcy5pbnRlcnBvbGF0aW9uID0gc3RhdGljUGFyYW1zPy5pbnRlcnBvbGF0aW9uIGFzIEludGVycG9sYXRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSB0b3RhbCBlbWlzc2lvbnMgZm9yIGEgbGlzdCBvZiBpbnB1dHNcbiAgICpcbiAgICogRWFjaCBpbnB1dCByZXF1aXJlOlxuICAgKiBAcGFyYW0ge09iamVjdFtdfSBpbnB1dHNcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlucHV0c1tdLnRpbWVzdGFtcCBSRkMzMzM5IHRpbWVzdGFtcCBzdHJpbmdcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlucHV0c1tdLmR1cmF0aW9uIGlucHV0IGR1cmF0aW9uIGluIHNlY29uZHNcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlucHV0c1tdLmNwdS11dGlsIHBlcmNlbnRhZ2UgY3B1IHVzYWdlXG4gICAqL1xuICBhc3luYyBleGVjdXRlKGlucHV0czogb2JqZWN0IHwgb2JqZWN0W10gfCB1bmRlZmluZWQpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgaWYgKGlucHV0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIFBhcmFtZXRlcnMgbm90IHByb3ZpZGVkJyk7XG4gICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShpbnB1dHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lucHV0cyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgfVxuICAgIHJldHVybiBpbnB1dHMubWFwKChpbnB1dDogS2V5VmFsdWVQYWlyKSA9PiB7XG4gICAgICB0aGlzLmNvbmZpZ3VyZSh0aGlzLm5hbWUhLCBpbnB1dCk7XG4gICAgICBpbnB1dFsnZW5lcmd5LWNwdSddID0gdGhpcy5jYWxjdWxhdGVFbmVyZ3koaW5wdXQpO1xuICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgbW9kZWwgaWRlbnRpZmllclxuICAgKi9cbiAgbW9kZWxJZGVudGlmaWVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRFQURTX0NVUlZFO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIGVuZXJneSBjb25zdW1wdGlvbiBmb3IgYSBzaW5nbGUgaW5wdXRcbiAgICogcmVxdWlyZXNcbiAgICpcbiAgICogZHVyYXRpb246IGR1cmF0aW9uIG9mIHRoZSBpbnB1dCBpbiBzZWNvbmRzXG4gICAqIGNwdS11dGlsOiBjcHUgdXNhZ2UgaW4gcGVyY2VudGFnZVxuICAgKiB0aW1lc3RhbXA6IFJGQzMzMzkgdGltZXN0YW1wIHN0cmluZ1xuICAgKlxuICAgKiBVc2VzIGEgc3BsaW5lIG1ldGhvZCBvbiB0aGUgdGVhZHMgY3B1IHdhdHRhZ2UgZGF0YVxuICAgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVFbmVyZ3koaW5wdXQ6IEtleVZhbHVlUGFpcikge1xuICAgIGlmIChcbiAgICAgICEoJ2R1cmF0aW9uJyBpbiBpbnB1dCkgfHxcbiAgICAgICEoJ2NwdS11dGlsJyBpbiBpbnB1dCkgfHxcbiAgICAgICEoJ3RpbWVzdGFtcCcgaW4gaW5wdXQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdSZXF1aXJlZCBQYXJhbWV0ZXJzIGR1cmF0aW9uLGNwdS11dGlsLHRpbWVzdGFtcCBub3QgcHJvdmlkZWQgZm9yIGlucHV0J1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyAgICBkdXJhdGlvbiBpcyBpbiBzZWNvbmRzXG4gICAgY29uc3QgZHVyYXRpb24gPSBpbnB1dFsnZHVyYXRpb24nXTtcblxuICAgIC8vICAgIGNvbnZlcnQgY3B1IHVzYWdlIHRvIHBlcmNlbnRhZ2VcbiAgICBjb25zdCBjcHUgPSBpbnB1dFsnY3B1LXV0aWwnXTtcbiAgICBpZiAoY3B1IDwgMCB8fCBjcHUgPiAxMDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3B1IHVzYWdlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxMDAnKTtcbiAgICB9XG5cbiAgICBsZXQgdGRwID0gdGhpcy50ZHA7XG5cbiAgICBpZiAoJ3RoZXJtYWwtZGVzaWduLXBvd2VyJyBpbiBpbnB1dCkge1xuICAgICAgdGRwID0gaW5wdXRbJ3RoZXJtYWwtZGVzaWduLXBvd2VyJ10gYXMgbnVtYmVyO1xuICAgIH1cbiAgICBpZiAodGRwID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdgdGhlcm1hbC1kZXNpZ24tcG93ZXJgIG5vdCBwcm92aWRlZC4gQ2FuIG5vdCBjb21wdXRlIGVuZXJneS4nXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCB3YXR0YWdlID0gMC4wO1xuICAgIGlmICh0aGlzLmludGVycG9sYXRpb24gPT09IEludGVycG9sYXRpb24uU1BMSU5FKSB7XG4gICAgICB3YXR0YWdlID0gdGhpcy5zcGxpbmUuYXQoY3B1KSAqIHRkcDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW50ZXJwb2xhdGlvbiA9PT0gSW50ZXJwb2xhdGlvbi5MSU5FQVIpIHtcbiAgICAgIGNvbnN0IHggPSB0aGlzLnBvaW50cztcbiAgICAgIGNvbnN0IHkgPSB0aGlzLmN1cnZlO1xuICAgICAgLy8gYmFzZSByYXRlIGlzIGZyb20gd2hpY2ggbGV2ZWwgb2YgY3B1IGxpbmVhciBpbnRlcnBvbGF0aW9uIGlzIGFwcGxpZWQgYXRcbiAgICAgIGxldCBiYXNlX3JhdGUgPSAwO1xuICAgICAgbGV0IGJhc2VfY3B1ID0gMDtcbiAgICAgIGxldCByYXRpbyA9IDA7XG4gICAgICAvLyBmaW5kIHRoZSBiYXNlIHJhdGUgYW5kIHJhdGlvXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGNwdSA9PT0geFtpXSkge1xuICAgICAgICAgIGJhc2VfcmF0ZSA9IHlbaV07XG4gICAgICAgICAgYmFzZV9jcHUgPSB4W2ldO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKGNwdSA+IHhbaV0gJiYgY3B1IDwgeFtpICsgMV0pIHtcbiAgICAgICAgICBiYXNlX3JhdGUgPSB5W2ldO1xuICAgICAgICAgIGJhc2VfY3B1ID0geFtpXTtcbiAgICAgICAgICByYXRpbyA9ICh5W2kgKyAxXSAtIHlbaV0pIC8gKHhbaSArIDFdIC0geFtpXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHN1bSBvZiBiYXNlX3JhdGUgKyAoY3B1IC0gYmFzZV9jcHUpICogcmF0aW8gPSB0b3RhbCByYXRlIG9mIGNwdSB1c2FnZVxuICAgICAgLy8gdG90YWwgcmF0ZSAqIHRkcCA9IHdhdHRhZ2VcbiAgICAgIHdhdHRhZ2UgPSAoYmFzZV9yYXRlICsgKGNwdSAtIGJhc2VfY3B1KSAqIHJhdGlvKSAqIHRkcDtcbiAgICB9XG4gICAgLy8gIGR1cmF0aW9uIGlzIGluIHNlY29uZHNcbiAgICAvLyAgd2F0dGFnZSBpcyBpbiB3YXR0c1xuICAgIC8vICBlZzogMzBXIHggMzAwcyA9IDkwMDAgSlxuICAgIC8vICAxIFdoID0gMzYwMCBKXG4gICAgLy8gIDkwMDAgSiAvIDM2MDAgPSAyLjUgV2hcbiAgICAvLyAgSiAvIDM2MDAgPSBXaFxuICAgIC8vICAyLjUgV2ggLyAxMDAwID0gMC4wMDI1IGtXaFxuICAgIC8vICBXaCAvIDEwMDAgPSBrV2hcbiAgICAvLyAod2F0dGFnZSAqIGR1cmF0aW9uKSAvIChzZWNvbmRzIGluIGFuIGhvdXIpIC8gMTAwMCA9IGtXaFxuICAgIHJldHVybiAod2F0dGFnZSAqIGR1cmF0aW9uKSAvIDM2MDAgLyAxMDAwO1xuICB9XG59XG5cbi8qKlxuICogRm9yIEpTSUkuXG4gKi9cbmV4cG9ydCB7S2V5VmFsdWVQYWlyLCBJbnRlcnBvbGF0aW9ufSBmcm9tICcuLi8uLi90eXBlcy9jb21tb24nO1xuIl19
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { IOutputModelInterface } from '../interfaces';
|
|
2
|
-
import { KeyValuePair } from '../../types/common';
|
|
3
|
-
export declare class WattTimeGridEmissions implements IOutputModelInterface {
|
|
4
|
-
authParams: object | undefined;
|
|
5
|
-
token: string;
|
|
6
|
-
staticParams: object | undefined;
|
|
7
|
-
name: string | undefined;
|
|
8
|
-
baseUrl: string;
|
|
9
|
-
authenticate(authParams: object): Promise<void>;
|
|
10
|
-
execute(inputs: object | object[] | undefined): Promise<any[]>;
|
|
11
|
-
private getWattTimeDataForDuration;
|
|
12
|
-
private validateinputs;
|
|
13
|
-
private getLatitudeLongitudeFrominput;
|
|
14
|
-
private determineinputStartEnd;
|
|
15
|
-
fetchData(input: KeyValuePair): Promise<KeyValuePair[]>;
|
|
16
|
-
configure(name: string, staticParams: object | undefined): Promise<IOutputModelInterface>;
|
|
17
|
-
modelIdentifier(): string;
|
|
18
|
-
}
|