@grnsft/if 0.0.2
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/.devcontainer/devcontainer.json +38 -0
- package/.editorconfig +8 -0
- package/.env.example +9 -0
- package/.eslintignore +4 -0
- package/.eslintrc.json +8 -0
- package/.github/ISSUE_TEMPLATE/agenda.md +36 -0
- package/.github/ISSUE_TEMPLATE/blank-issue.md +10 -0
- package/.github/ISSUE_TEMPLATE/feedback.md +42 -0
- package/.github/ISSUE_TEMPLATE/model-plugin.md +63 -0
- package/.github/ISSUE_TEMPLATE/user-story.md +10 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +21 -0
- package/.github/workflows/nodejs-ci.yml +34 -0
- package/.gitmodules +3 -0
- package/.prettierrc.js +3 -0
- package/CONTRIBUTING.md +194 -0
- package/LICENSE +21 -0
- package/Makefile +16 -0
- package/README.md +67 -0
- package/build/__mocks__/azure/index.d.ts +11 -0
- package/build/__mocks__/azure/index.js +132 -0
- package/build/__mocks__/boavizta/countries.json +138 -0
- package/build/__mocks__/boavizta/instance_types.json +625 -0
- package/build/__mocks__/boavizta/providers.json +1 -0
- package/build/__mocks__/fs/index.d.ts +3 -0
- package/build/__mocks__/fs/index.js +56 -0
- package/build/__mocks__/model-universe/index.d.ts +33 -0
- package/build/__mocks__/model-universe/index.js +68 -0
- package/build/__mocks__/watt-time/data.json +119 -0
- package/build/__tests__/integration/ompl/index.test.d.ts +1 -0
- package/build/__tests__/integration/ompl/index.test.js +61 -0
- package/build/__tests__/unit/lib/azure-importer/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/azure-importer/index.test.js +152 -0
- package/build/__tests__/unit/lib/boavizta/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/boavizta/index.test.js +579 -0
- package/build/__tests__/unit/lib/case-studies/aveva.test.d.ts +1 -0
- package/build/__tests__/unit/lib/case-studies/aveva.test.js +36 -0
- package/build/__tests__/unit/lib/case-studies/emem.test.d.ts +1 -0
- package/build/__tests__/unit/lib/case-studies/emem.test.js +108 -0
- package/build/__tests__/unit/lib/case-studies/eshoppen.test.d.ts +1 -0
- package/build/__tests__/unit/lib/case-studies/eshoppen.test.js +53 -0
- package/build/__tests__/unit/lib/case-studies/sci-accenture.test.d.ts +1 -0
- package/build/__tests__/unit/lib/case-studies/sci-accenture.test.js +23 -0
- package/build/__tests__/unit/lib/ccf/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/ccf/index.test.js +223 -0
- package/build/__tests__/unit/lib/cloud-instance-metadata/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/cloud-instance-metadata/index.test.js +73 -0
- package/build/__tests__/unit/lib/sci/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/sci/index.test.js +106 -0
- package/build/__tests__/unit/lib/sci-e/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/sci-e/index.test.js +30 -0
- package/build/__tests__/unit/lib/sci-m/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/sci-m/index.test.js +58 -0
- package/build/__tests__/unit/lib/sci-o/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/sci-o/index.test.js +42 -0
- package/build/__tests__/unit/lib/shell-imp/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/shell-imp/index.test.js +21 -0
- package/build/__tests__/unit/lib/tdp-finder/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/tdp-finder/index.test.js +62 -0
- package/build/__tests__/unit/lib/teads-aws/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/teads-aws/index.test.js +170 -0
- package/build/__tests__/unit/lib/teads-curve/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/teads-curve/index.test.js +146 -0
- package/build/__tests__/unit/lib/watt-time/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/watt-time/index.test.js +106 -0
- package/build/__tests__/unit/util/args.test.d.ts +1 -0
- package/build/__tests__/unit/util/args.test.js +92 -0
- package/build/__tests__/unit/util/models-universe.test.d.ts +1 -0
- package/build/__tests__/unit/util/models-universe.test.js +211 -0
- package/build/__tests__/unit/util/observatory.test.d.ts +1 -0
- package/build/__tests__/unit/util/observatory.test.js +91 -0
- package/build/__tests__/unit/util/supercomputer.test.d.ts +1 -0
- package/build/__tests__/unit/util/supercomputer.test.js +231 -0
- package/build/__tests__/unit/util/yaml.test.d.ts +1 -0
- package/build/__tests__/unit/util/yaml.test.js +59 -0
- package/build/config/config.d.ts +32 -0
- package/build/config/config.js +74 -0
- package/build/config/index.d.ts +2 -0
- package/build/config/index.js +8 -0
- package/build/config/strings.d.ts +14 -0
- package/build/config/strings.js +30 -0
- package/build/index.d.ts +1 -0
- package/build/index.js +46 -0
- package/build/lib/azure-importer/index.d.ts +55 -0
- package/build/lib/azure-importer/index.js +314 -0
- package/build/lib/boavizta/index.d.ts +53 -0
- package/build/lib/boavizta/index.js +254 -0
- package/build/lib/case-studies/aveva-model.d.ts +29 -0
- package/build/lib/case-studies/aveva-model.js +53 -0
- package/build/lib/case-studies/emem-model.d.ts +42 -0
- package/build/lib/case-studies/emem-model.js +93 -0
- package/build/lib/case-studies/eshoppen-model.d.ts +24 -0
- package/build/lib/case-studies/eshoppen-model.js +123 -0
- package/build/lib/case-studies/index.d.ts +4 -0
- package/build/lib/case-studies/index.js +21 -0
- package/build/lib/case-studies/sci-accenture-model.d.ts +10 -0
- package/build/lib/case-studies/sci-accenture-model.js +37 -0
- package/build/lib/ccf/aws-embodied.json +5591 -0
- package/build/lib/ccf/aws-instances.json +21116 -0
- package/build/lib/ccf/aws-use.json +79 -0
- package/build/lib/ccf/azure-embodied.json +6547 -0
- package/build/lib/ccf/azure-instances.json +8332 -0
- package/build/lib/ccf/azure-use.json +58 -0
- package/build/lib/ccf/gcp-embodied.json +3049 -0
- package/build/lib/ccf/gcp-instances.json +3880 -0
- package/build/lib/ccf/gcp-use.json +58 -0
- package/build/lib/ccf/index.d.ts +63 -0
- package/build/lib/ccf/index.js +338 -0
- package/build/lib/cloud-instance-metadata/aws-instances.json +1 -0
- package/build/lib/cloud-instance-metadata/azure-instances.json +1 -0
- package/build/lib/cloud-instance-metadata/index.d.ts +15 -0
- package/build/lib/cloud-instance-metadata/index.js +104 -0
- package/build/lib/index.d.ts +15 -0
- package/build/lib/index.js +32 -0
- package/build/lib/interfaces/ccf.d.ts +19 -0
- package/build/lib/interfaces/ccf.js +3 -0
- package/build/lib/interfaces/index.d.ts +7 -0
- package/build/lib/interfaces/index.js +18 -0
- package/build/lib/sci/index.d.ts +13 -0
- package/build/lib/sci/index.js +131 -0
- package/build/lib/sci-e/index.d.ts +38 -0
- package/build/lib/sci-e/index.js +85 -0
- package/build/lib/sci-m/index.d.ts +10 -0
- package/build/lib/sci-m/index.js +124 -0
- package/build/lib/sci-o/index.d.ts +17 -0
- package/build/lib/sci-o/index.js +52 -0
- package/build/lib/shell-imp/index.d.ts +32 -0
- package/build/lib/shell-imp/index.js +82 -0
- package/build/lib/tdp-finder/index.d.ts +19 -0
- package/build/lib/tdp-finder/index.js +98 -0
- package/build/lib/teads-aws/aws-embodied.json +1 -0
- package/build/lib/teads-aws/aws-instances.json +1 -0
- package/build/lib/teads-aws/index.d.ts +58 -0
- package/build/lib/teads-aws/index.js +208 -0
- package/build/lib/teads-curve/index.d.ts +52 -0
- package/build/lib/teads-curve/index.js +158 -0
- package/build/lib/watt-time/index.d.ts +18 -0
- package/build/lib/watt-time/index.js +204 -0
- package/build/types/azure-importer.d.ts +29 -0
- package/build/types/azure-importer.js +3 -0
- package/build/types/boavizta.d.ts +7 -0
- package/build/types/boavizta.js +3 -0
- package/build/types/common.d.ts +7 -0
- package/build/types/common.js +9 -0
- package/build/types/impl.d.ts +40 -0
- package/build/types/impl.js +3 -0
- package/build/types/models-universe.d.ts +24 -0
- package/build/types/models-universe.js +3 -0
- package/build/types/process-args.d.ts +7 -0
- package/build/types/process-args.js +3 -0
- package/build/types/supercomputer.d.ts +4 -0
- package/build/types/supercomputer.js +3 -0
- package/build/util/args.d.ts +8 -0
- package/build/util/args.js +48 -0
- package/build/util/errors.d.ts +6 -0
- package/build/util/errors.js +22 -0
- package/build/util/helpers.d.ts +4 -0
- package/build/util/helpers.js +18 -0
- package/build/util/models-universe.d.ts +28 -0
- package/build/util/models-universe.js +95 -0
- package/build/util/observatory.d.ts +20 -0
- package/build/util/observatory.js +31 -0
- package/build/util/supercomputer.d.ts +30 -0
- package/build/util/supercomputer.js +109 -0
- package/build/util/validations.d.ts +25 -0
- package/build/util/validations.js +52 -0
- package/build/util/yaml.d.ts +13 -0
- package/build/util/yaml.js +36 -0
- package/coverage/clover.xml +1172 -0
- package/coverage/coverage-final.json +27 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/config/config.ts.html +310 -0
- package/coverage/lcov-report/config/index.html +146 -0
- package/coverage/lcov-report/config/index.ts.html +91 -0
- package/coverage/lcov-report/config/strings.ts.html +118 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +341 -0
- package/coverage/lcov-report/lib/boavizta/index.html +116 -0
- package/coverage/lcov-report/lib/boavizta/index.ts.html +1171 -0
- package/coverage/lcov-report/lib/case-studies/aveva-model.ts.html +277 -0
- package/coverage/lcov-report/lib/case-studies/emem-model.ts.html +439 -0
- package/coverage/lcov-report/lib/case-studies/eshoppen-model.ts.html +550 -0
- package/coverage/lcov-report/lib/case-studies/index.html +176 -0
- package/coverage/lcov-report/lib/case-studies/index.ts.html +97 -0
- package/coverage/lcov-report/lib/case-studies/sci-accenture-model.ts.html +232 -0
- package/coverage/lcov-report/lib/ccf/index.html +116 -0
- package/coverage/lcov-report/lib/ccf/index.ts.html +1339 -0
- package/coverage/lcov-report/lib/cloud-instance-metadata/index.html +116 -0
- package/coverage/lcov-report/lib/cloud-instance-metadata/index.ts.html +370 -0
- package/coverage/lcov-report/lib/index.html +116 -0
- package/coverage/lcov-report/lib/index.ts.html +121 -0
- package/coverage/lcov-report/lib/sci/index.html +116 -0
- package/coverage/lcov-report/lib/sci/index.ts.html +571 -0
- package/coverage/lcov-report/lib/sci-e/index.html +116 -0
- package/coverage/lcov-report/lib/sci-e/index.ts.html +403 -0
- package/coverage/lcov-report/lib/sci-m/index.html +116 -0
- package/coverage/lcov-report/lib/sci-m/index.ts.html +487 -0
- package/coverage/lcov-report/lib/sci-o/index.html +116 -0
- package/coverage/lcov-report/lib/sci-o/index.ts.html +265 -0
- package/coverage/lcov-report/lib/shell-imp/index.html +116 -0
- package/coverage/lcov-report/lib/shell-imp/index.ts.html +376 -0
- package/coverage/lcov-report/lib/teads-aws/index.html +116 -0
- package/coverage/lcov-report/lib/teads-aws/index.ts.html +823 -0
- package/coverage/lcov-report/lib/teads-curve/index.html +116 -0
- package/coverage/lcov-report/lib/teads-curve/index.ts.html +625 -0
- package/coverage/lcov-report/lib/watt-time/index.html +116 -0
- package/coverage/lcov-report/lib/watt-time/index.ts.html +829 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +196 -0
- package/coverage/lcov-report/types/common.ts.html +109 -0
- package/coverage/lcov-report/types/index.html +116 -0
- package/coverage/lcov-report/util/args.ts.html +244 -0
- package/coverage/lcov-report/util/index.html +176 -0
- package/coverage/lcov-report/util/models-universe.ts.html +679 -0
- package/coverage/lcov-report/util/observatory.ts.html +229 -0
- package/coverage/lcov-report/util/supercomputer.ts.html +466 -0
- package/coverage/lcov-report/util/yaml.ts.html +193 -0
- package/coverage/lcov.info +2094 -0
- package/docs/implementations/tdp-finder.md +36 -0
- package/examples/impls/case-studies/accenture.yml +155 -0
- package/examples/impls/case-studies/aveva.yaml +48 -0
- package/examples/impls/case-studies/azure-yassine.yaml +67 -0
- package/examples/impls/case-studies/boavizta.yml +26 -0
- package/examples/impls/case-studies/dow_msft.yml +173 -0
- package/examples/impls/case-studies/farm-insights.yaml +35 -0
- package/examples/impls/case-studies/gsf-website.yaml +93 -0
- package/examples/impls/case-studies/msft-eshoppen.yaml +162 -0
- package/examples/impls/case-studies/msft-green-ai.yaml +58 -0
- package/examples/impls/case-studies/ntt-data-on-premise.yaml +201 -0
- package/examples/impls/tdp-finder-test.yml +19 -0
- package/examples/impls/test/azure.yml +26 -0
- package/examples/impls/test/ccf.yml +19 -0
- package/examples/impls/test/complex-pipeline.yml +67 -0
- package/examples/impls/test/if-demo.yml +51 -0
- package/examples/impls/test/metadata.yml +20 -0
- package/examples/impls/test/nesting.yml +65 -0
- package/examples/impls/test/sci-e.yml +21 -0
- package/examples/impls/test/sci-m.yml +24 -0
- package/examples/impls/test/sci-o.yml +28 -0
- package/examples/impls/test/sci.yml +27 -0
- package/examples/impls/test/shell.yml +18 -0
- package/examples/impls/test/toto.yaml +22 -0
- package/examples/ompls/azure.yml +145 -0
- package/examples/ompls/ccf.yml +27 -0
- package/examples/ompls/complex-pipeline.yml +105 -0
- package/examples/ompls/full-sci.yml +64 -0
- package/examples/ompls/if-demo.yml +493 -0
- package/examples/ompls/metadata.yml +29 -0
- package/examples/ompls/nesting.yml +107 -0
- package/examples/ompls/sci-e.yml +23 -0
- package/examples/ompls/sci-m.yml +33 -0
- package/examples/ompls/sci-o.yml +29 -0
- package/examples/ompls/sci.yml +36 -0
- package/examples/ompls/shell.yml +23 -0
- package/jest.config.js +14 -0
- package/package.json +71 -0
- package/scripts/impact-test.sh +12 -0
- package/src/__mocks__/boavizta/countries.json +138 -0
- package/src/__mocks__/boavizta/instance_types.json +625 -0
- package/src/__mocks__/boavizta/providers.json +1 -0
- package/src/__mocks__/watt-time/data.json +119 -0
- package/src/config/units.yaml +125 -0
- package/src/lib/ccf/aws-embodied.json +5591 -0
- package/src/lib/ccf/aws-instances.json +21116 -0
- package/src/lib/ccf/aws-use.json +79 -0
- package/src/lib/ccf/azure-embodied.json +6547 -0
- package/src/lib/ccf/azure-instances.json +8332 -0
- package/src/lib/ccf/azure-use.json +58 -0
- package/src/lib/ccf/gcp-embodied.json +3049 -0
- package/src/lib/ccf/gcp-instances.json +3880 -0
- package/src/lib/ccf/gcp-use.json +58 -0
- package/src/lib/cloud-instance-metadata/aws-instances.json +1 -0
- package/src/lib/cloud-instance-metadata/azure-instances.json +1 -0
- package/src/lib/shell-imp/sampler +30 -0
- package/src/lib/tdp-finder/README.md +7 -0
- package/src/lib/tdp-finder/boavizta_data.csv +1768 -0
- package/src/lib/tdp-finder/data.csv +4460 -0
- package/src/lib/tdp-finder/data2.csv +2162 -0
- package/src/lib/teads-aws/aws-embodied.json +1 -0
- package/src/lib/teads-aws/aws-instances.json +1 -0
- package/tsconfig.test.json +39 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/yarn-error.log +5854 -0
|
@@ -0,0 +1,579 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const globals_1 = require("@jest/globals");
|
|
4
|
+
const index_1 = require("../../../../lib/boavizta/index");
|
|
5
|
+
const axios_1 = require("axios");
|
|
6
|
+
const PROVIDERS = require("../../../../__mocks__/boavizta/providers.json");
|
|
7
|
+
const COUNTRIES = require("../../../../__mocks__/boavizta/countries.json");
|
|
8
|
+
const INSTANCE_TYPES = require("../../../../__mocks__/boavizta/instance_types.json");
|
|
9
|
+
async function axiosGet(url) {
|
|
10
|
+
switch (url) {
|
|
11
|
+
case 'https://api.boavizta.org/v1/cloud/instance/all_providers':
|
|
12
|
+
return { data: PROVIDERS };
|
|
13
|
+
case 'https://api.boavizta.org/v1/utils/country_code':
|
|
14
|
+
return Promise.resolve({ data: COUNTRIES });
|
|
15
|
+
case 'https://api.boavizta.org/v1/cloud/instance/all_instances?provider=aws':
|
|
16
|
+
return Promise.resolve({
|
|
17
|
+
data: INSTANCE_TYPES['aws'],
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return Promise.resolve({});
|
|
21
|
+
}
|
|
22
|
+
globals_1.jest.mock('axios');
|
|
23
|
+
const mockAxios = axios_1.default;
|
|
24
|
+
// Mock out all top level functions, such as get, put, delete and post:
|
|
25
|
+
mockAxios.get.mockImplementation(axiosGet);
|
|
26
|
+
mockAxios.post.mockImplementation((url) => {
|
|
27
|
+
switch (url) {
|
|
28
|
+
case 'https://api.boavizta.org/v1/component/cpu?verbose=false&duration=1':
|
|
29
|
+
return Promise.resolve({
|
|
30
|
+
data: {
|
|
31
|
+
outputs: {
|
|
32
|
+
gwp: {
|
|
33
|
+
embedded: {
|
|
34
|
+
value: 0.0008,
|
|
35
|
+
min: 0.0004155,
|
|
36
|
+
max: 0.003113,
|
|
37
|
+
warnings: ['End of life is not included in the calculation'],
|
|
38
|
+
},
|
|
39
|
+
use: { value: 0.06743, min: 0.06743, max: 0.06743 },
|
|
40
|
+
unit: 'kgCO2eq',
|
|
41
|
+
description: 'Total climate change',
|
|
42
|
+
},
|
|
43
|
+
adp: {
|
|
44
|
+
embedded: {
|
|
45
|
+
value: 7.764e-7,
|
|
46
|
+
min: 7.763e-7,
|
|
47
|
+
max: 7.771e-7,
|
|
48
|
+
warnings: ['End of life is not included in the calculation'],
|
|
49
|
+
},
|
|
50
|
+
use: { value: 1.796e-8, min: 1.796e-8, max: 1.796e-8 },
|
|
51
|
+
unit: 'kgSbeq',
|
|
52
|
+
description: 'Use of minerals and fossil ressources',
|
|
53
|
+
},
|
|
54
|
+
pe: {
|
|
55
|
+
embedded: {
|
|
56
|
+
value: 0.012,
|
|
57
|
+
min: 0.006847,
|
|
58
|
+
max: 0.04314,
|
|
59
|
+
warnings: ['End of life is not included in the calculation'],
|
|
60
|
+
},
|
|
61
|
+
use: { value: 2.07, min: 2.07, max: 2.07 },
|
|
62
|
+
unit: 'MJ',
|
|
63
|
+
description: 'Consumption of primary energy',
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
case 'https://api.boavizta.org/v1/component/cpu?verbose=true&duration=2':
|
|
69
|
+
return Promise.resolve({
|
|
70
|
+
data: {
|
|
71
|
+
outputs: {
|
|
72
|
+
gwp: {
|
|
73
|
+
embedded: {
|
|
74
|
+
value: 0.0016,
|
|
75
|
+
min: 0.000831,
|
|
76
|
+
max: 0.006226,
|
|
77
|
+
warnings: ['End of life is not included in the calculation'],
|
|
78
|
+
},
|
|
79
|
+
use: { value: 0.1924, min: 0.1924, max: 0.1924 },
|
|
80
|
+
unit: 'kgCO2eq',
|
|
81
|
+
description: 'Total climate change',
|
|
82
|
+
},
|
|
83
|
+
adp: {
|
|
84
|
+
embedded: {
|
|
85
|
+
value: 0.000001553,
|
|
86
|
+
min: 0.000001553,
|
|
87
|
+
max: 0.000001554,
|
|
88
|
+
warnings: ['End of life is not included in the calculation'],
|
|
89
|
+
},
|
|
90
|
+
use: { value: 5.126e-8, min: 5.126e-8, max: 5.126e-8 },
|
|
91
|
+
unit: 'kgSbeq',
|
|
92
|
+
description: 'Use of minerals and fossil ressources',
|
|
93
|
+
},
|
|
94
|
+
pe: {
|
|
95
|
+
embedded: {
|
|
96
|
+
value: 0.023,
|
|
97
|
+
min: 0.01369,
|
|
98
|
+
max: 0.08627,
|
|
99
|
+
warnings: ['End of life is not included in the calculation'],
|
|
100
|
+
},
|
|
101
|
+
use: { value: 5.907, min: 5.907, max: 5.907 },
|
|
102
|
+
unit: 'MJ',
|
|
103
|
+
description: 'Consumption of primary energy',
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
verbose: {
|
|
107
|
+
outputs: {
|
|
108
|
+
gwp: {
|
|
109
|
+
embedded: {
|
|
110
|
+
value: 0.0016,
|
|
111
|
+
min: 0.000831,
|
|
112
|
+
max: 0.006226,
|
|
113
|
+
warnings: [
|
|
114
|
+
'End of life is not included in the calculation',
|
|
115
|
+
],
|
|
116
|
+
},
|
|
117
|
+
use: { value: 0.1924, min: 0.1924, max: 0.1924 },
|
|
118
|
+
unit: 'kgCO2eq',
|
|
119
|
+
description: 'Total climate change',
|
|
120
|
+
},
|
|
121
|
+
adp: {
|
|
122
|
+
embedded: {
|
|
123
|
+
value: 0.000001553,
|
|
124
|
+
min: 0.000001553,
|
|
125
|
+
max: 0.000001554,
|
|
126
|
+
warnings: [
|
|
127
|
+
'End of life is not included in the calculation',
|
|
128
|
+
],
|
|
129
|
+
},
|
|
130
|
+
use: { value: 5.126e-8, min: 5.126e-8, max: 5.126e-8 },
|
|
131
|
+
unit: 'kgSbeq',
|
|
132
|
+
description: 'Use of minerals and fossil ressources',
|
|
133
|
+
},
|
|
134
|
+
pe: {
|
|
135
|
+
embedded: {
|
|
136
|
+
value: 0.023,
|
|
137
|
+
min: 0.01369,
|
|
138
|
+
max: 0.08627,
|
|
139
|
+
warnings: [
|
|
140
|
+
'End of life is not included in the calculation',
|
|
141
|
+
],
|
|
142
|
+
},
|
|
143
|
+
use: { value: 5.907, min: 5.907, max: 5.907 },
|
|
144
|
+
unit: 'MJ',
|
|
145
|
+
description: 'Consumption of primary energy',
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
units: { value: 1, status: 'ARCHETYPE', min: 1, max: 1 },
|
|
149
|
+
die_size: {
|
|
150
|
+
value: 521,
|
|
151
|
+
status: 'COMPLETED',
|
|
152
|
+
unit: 'mm2',
|
|
153
|
+
source: 'Average value for all families',
|
|
154
|
+
min: 41.2,
|
|
155
|
+
max: 3640,
|
|
156
|
+
},
|
|
157
|
+
duration: { value: 2, unit: 'hours' },
|
|
158
|
+
avg_power: {
|
|
159
|
+
value: 260.05,
|
|
160
|
+
status: 'COMPLETED',
|
|
161
|
+
unit: 'W',
|
|
162
|
+
min: 260.05,
|
|
163
|
+
max: 260.05,
|
|
164
|
+
},
|
|
165
|
+
time_workload: { value: 100, status: 'INPUT', unit: '%' },
|
|
166
|
+
usage_location: {
|
|
167
|
+
value: 'USA',
|
|
168
|
+
status: 'INPUT',
|
|
169
|
+
unit: 'CodSP3 - NCS Country Codes - NATO',
|
|
170
|
+
},
|
|
171
|
+
use_time_ratio: {
|
|
172
|
+
value: 1,
|
|
173
|
+
status: 'ARCHETYPE',
|
|
174
|
+
unit: '/1',
|
|
175
|
+
min: 1,
|
|
176
|
+
max: 1,
|
|
177
|
+
},
|
|
178
|
+
hours_life_time: {
|
|
179
|
+
value: 26280,
|
|
180
|
+
status: 'ARCHETYPE',
|
|
181
|
+
unit: 'hours',
|
|
182
|
+
min: 26280,
|
|
183
|
+
max: 26280,
|
|
184
|
+
},
|
|
185
|
+
params: {
|
|
186
|
+
value: { a: 171.2, b: 0.0354, c: 36.89, d: -10.13 },
|
|
187
|
+
status: 'ARCHETYPE',
|
|
188
|
+
},
|
|
189
|
+
gwp_factor: {
|
|
190
|
+
value: 0.37,
|
|
191
|
+
status: 'COMPLETED',
|
|
192
|
+
unit: 'kg CO2eq/kWh',
|
|
193
|
+
source: 'https://ember-climate.org/data/data-explorer',
|
|
194
|
+
min: 0.37,
|
|
195
|
+
max: 0.37,
|
|
196
|
+
},
|
|
197
|
+
adp_factor: {
|
|
198
|
+
value: 9.85548e-8,
|
|
199
|
+
status: 'COMPLETED',
|
|
200
|
+
unit: 'kg Sbeq/kWh',
|
|
201
|
+
source: 'ADEME Base outputS ®',
|
|
202
|
+
min: 9.85548e-8,
|
|
203
|
+
max: 9.85548e-8,
|
|
204
|
+
},
|
|
205
|
+
pe_factor: {
|
|
206
|
+
value: 11.358,
|
|
207
|
+
status: 'COMPLETED',
|
|
208
|
+
unit: 'MJ/kWh',
|
|
209
|
+
source: 'ADPf / (1-%renewable_energy)',
|
|
210
|
+
min: 11.358,
|
|
211
|
+
max: 11.358,
|
|
212
|
+
},
|
|
213
|
+
},
|
|
214
|
+
},
|
|
215
|
+
});
|
|
216
|
+
case 'https://api.boavizta.org/v1/cloud/instance?verbose=false&duration=0.004166666666666667':
|
|
217
|
+
return Promise.resolve({
|
|
218
|
+
data: {
|
|
219
|
+
outputs: {
|
|
220
|
+
gwp: {
|
|
221
|
+
embedded: {
|
|
222
|
+
value: 0.0016,
|
|
223
|
+
min: 0.000831,
|
|
224
|
+
max: 0.006226,
|
|
225
|
+
warnings: ['End of life is not included in the calculation'],
|
|
226
|
+
},
|
|
227
|
+
use: { value: 0.1924, min: 0.1924, max: 0.1924 },
|
|
228
|
+
unit: 'kgCO2eq',
|
|
229
|
+
description: 'Total climate change',
|
|
230
|
+
},
|
|
231
|
+
adp: {
|
|
232
|
+
embedded: {
|
|
233
|
+
value: 0.000001553,
|
|
234
|
+
min: 0.000001553,
|
|
235
|
+
max: 0.000001554,
|
|
236
|
+
warnings: ['End of life is not included in the calculation'],
|
|
237
|
+
},
|
|
238
|
+
use: { value: 5.126e-8, min: 5.126e-8, max: 5.126e-8 },
|
|
239
|
+
unit: 'kgSbeq',
|
|
240
|
+
description: 'Use of minerals and fossil ressources',
|
|
241
|
+
},
|
|
242
|
+
pe: {
|
|
243
|
+
embedded: {
|
|
244
|
+
value: 0.023,
|
|
245
|
+
min: 0.01369,
|
|
246
|
+
max: 0.08627,
|
|
247
|
+
warnings: ['End of life is not included in the calculation'],
|
|
248
|
+
},
|
|
249
|
+
use: { value: 5.907, min: 5.907, max: 5.907 },
|
|
250
|
+
unit: 'MJ',
|
|
251
|
+
description: 'Consumption of primary energy',
|
|
252
|
+
},
|
|
253
|
+
},
|
|
254
|
+
verbose: {
|
|
255
|
+
outputs: {
|
|
256
|
+
gwp: {
|
|
257
|
+
embedded: {
|
|
258
|
+
value: 0.0016,
|
|
259
|
+
min: 0.000831,
|
|
260
|
+
max: 0.006226,
|
|
261
|
+
warnings: [
|
|
262
|
+
'End of life is not included in the calculation',
|
|
263
|
+
],
|
|
264
|
+
},
|
|
265
|
+
use: { value: 0.1924, min: 0.1924, max: 0.1924 },
|
|
266
|
+
unit: 'kgCO2eq',
|
|
267
|
+
description: 'Total climate change',
|
|
268
|
+
},
|
|
269
|
+
adp: {
|
|
270
|
+
embedded: {
|
|
271
|
+
value: 0.000001553,
|
|
272
|
+
min: 0.000001553,
|
|
273
|
+
max: 0.000001554,
|
|
274
|
+
warnings: [
|
|
275
|
+
'End of life is not included in the calculation',
|
|
276
|
+
],
|
|
277
|
+
},
|
|
278
|
+
use: { value: 5.126e-8, min: 5.126e-8, max: 5.126e-8 },
|
|
279
|
+
unit: 'kgSbeq',
|
|
280
|
+
description: 'Use of minerals and fossil ressources',
|
|
281
|
+
},
|
|
282
|
+
pe: {
|
|
283
|
+
embedded: {
|
|
284
|
+
value: 0.023,
|
|
285
|
+
min: 0.01369,
|
|
286
|
+
max: 0.08627,
|
|
287
|
+
warnings: [
|
|
288
|
+
'End of life is not included in the calculation',
|
|
289
|
+
],
|
|
290
|
+
},
|
|
291
|
+
use: { value: 5.907, min: 5.907, max: 5.907 },
|
|
292
|
+
unit: 'MJ',
|
|
293
|
+
description: 'Consumption of primary energy',
|
|
294
|
+
},
|
|
295
|
+
},
|
|
296
|
+
units: { value: 1, status: 'ARCHETYPE', min: 1, max: 1 },
|
|
297
|
+
die_size: {
|
|
298
|
+
value: 521,
|
|
299
|
+
status: 'COMPLETED',
|
|
300
|
+
unit: 'mm2',
|
|
301
|
+
source: 'Average value for all families',
|
|
302
|
+
min: 41.2,
|
|
303
|
+
max: 3640,
|
|
304
|
+
},
|
|
305
|
+
duration: { value: 2, unit: 'hours' },
|
|
306
|
+
avg_power: {
|
|
307
|
+
value: 260.05,
|
|
308
|
+
status: 'COMPLETED',
|
|
309
|
+
unit: 'W',
|
|
310
|
+
min: 260.05,
|
|
311
|
+
max: 260.05,
|
|
312
|
+
},
|
|
313
|
+
time_workload: { value: 100, status: 'INPUT', unit: '%' },
|
|
314
|
+
usage_location: {
|
|
315
|
+
value: 'USA',
|
|
316
|
+
status: 'INPUT',
|
|
317
|
+
unit: 'CodSP3 - NCS Country Codes - NATO',
|
|
318
|
+
},
|
|
319
|
+
use_time_ratio: {
|
|
320
|
+
value: 1,
|
|
321
|
+
status: 'ARCHETYPE',
|
|
322
|
+
unit: '/1',
|
|
323
|
+
min: 1,
|
|
324
|
+
max: 1,
|
|
325
|
+
},
|
|
326
|
+
hours_life_time: {
|
|
327
|
+
value: 26280,
|
|
328
|
+
status: 'ARCHETYPE',
|
|
329
|
+
unit: 'hours',
|
|
330
|
+
min: 26280,
|
|
331
|
+
max: 26280,
|
|
332
|
+
},
|
|
333
|
+
params: {
|
|
334
|
+
value: { a: 171.2, b: 0.0354, c: 36.89, d: -10.13 },
|
|
335
|
+
status: 'ARCHETYPE',
|
|
336
|
+
},
|
|
337
|
+
gwp_factor: {
|
|
338
|
+
value: 0.37,
|
|
339
|
+
status: 'COMPLETED',
|
|
340
|
+
unit: 'kg CO2eq/kWh',
|
|
341
|
+
source: 'https://ember-climate.org/data/data-explorer',
|
|
342
|
+
min: 0.37,
|
|
343
|
+
max: 0.37,
|
|
344
|
+
},
|
|
345
|
+
adp_factor: {
|
|
346
|
+
value: 9.85548e-8,
|
|
347
|
+
status: 'COMPLETED',
|
|
348
|
+
unit: 'kg Sbeq/kWh',
|
|
349
|
+
source: 'ADEME Base outputS ®',
|
|
350
|
+
min: 9.85548e-8,
|
|
351
|
+
max: 9.85548e-8,
|
|
352
|
+
},
|
|
353
|
+
pe_factor: {
|
|
354
|
+
value: 11.358,
|
|
355
|
+
status: 'COMPLETED',
|
|
356
|
+
unit: 'MJ/kWh',
|
|
357
|
+
source: 'ADPf / (1-%renewable_energy)',
|
|
358
|
+
min: 11.358,
|
|
359
|
+
max: 11.358,
|
|
360
|
+
},
|
|
361
|
+
},
|
|
362
|
+
},
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
return Promise.resolve({});
|
|
366
|
+
});
|
|
367
|
+
globals_1.jest.setTimeout(30000);
|
|
368
|
+
(0, globals_1.describe)('cpu:configure test', () => {
|
|
369
|
+
(0, globals_1.test)('initialize wrong params should throw error', async () => {
|
|
370
|
+
const outputModel = new index_1.BoaviztaCpuOutputModel();
|
|
371
|
+
await (0, globals_1.expect)(outputModel.configure('test', { allocation: 'wrong' })).rejects.toThrowError();
|
|
372
|
+
(0, globals_1.expect)(outputModel.name).toBe('test');
|
|
373
|
+
});
|
|
374
|
+
(0, globals_1.test)('initialize without params throws error for parameter and call execute without params throws error for input', async () => {
|
|
375
|
+
const outputModel = new index_1.BoaviztaCpuOutputModel();
|
|
376
|
+
const outputModelConfigFail = new index_1.BoaviztaCpuOutputModel();
|
|
377
|
+
(0, globals_1.expect)(outputModel.modelIdentifier()).toBe('org.boavizta.cpu.sci');
|
|
378
|
+
await (0, globals_1.expect)(outputModel.authenticate({})).resolves.toBe(undefined);
|
|
379
|
+
await (0, globals_1.expect)(outputModelConfigFail.execute([
|
|
380
|
+
{
|
|
381
|
+
timestamp: '2021-01-01T00:00:00Z',
|
|
382
|
+
duration: 3600,
|
|
383
|
+
'cpu-util': 50,
|
|
384
|
+
},
|
|
385
|
+
])).rejects.toThrowError();
|
|
386
|
+
await (0, globals_1.expect)(outputModel.configure('test')).rejects.toThrow(Error('Improper configure: Missing processor parameter'));
|
|
387
|
+
await (0, globals_1.expect)(outputModel.configure('test', {
|
|
388
|
+
'physical-processor': 'Intel Xeon Gold 6138f',
|
|
389
|
+
})).rejects.toThrow(Error('Improper configure: Missing core-units parameter'));
|
|
390
|
+
await (0, globals_1.expect)(outputModel.configure('test', {
|
|
391
|
+
'physical-processor': 'Intel Xeon Gold 6138f',
|
|
392
|
+
'core-units': 24,
|
|
393
|
+
'expected-lifespan': 4 * 365 * 24 * 60 * 60,
|
|
394
|
+
})).resolves.toBeInstanceOf(index_1.BoaviztaCpuOutputModel);
|
|
395
|
+
(0, globals_1.expect)(outputModel.name).toBe('test');
|
|
396
|
+
// not providing inputs will throw a missing inputs error
|
|
397
|
+
await (0, globals_1.expect)(outputModel.execute()).rejects.toStrictEqual(Error('Parameter Not Given: invalid inputs parameter. Expecting an array of inputs'));
|
|
398
|
+
// improper inputs will throw an invalid inputs error
|
|
399
|
+
await (0, globals_1.expect)(outputModel.execute([{ invalid: 'input' }])).rejects.toStrictEqual(Error('Invalid Input: Invalid inputs parameter'));
|
|
400
|
+
});
|
|
401
|
+
});
|
|
402
|
+
(0, globals_1.describe)('cpu:initialize with params', () => {
|
|
403
|
+
(0, globals_1.test)('initialize with params and call multiple usages in IMPL format', async () => {
|
|
404
|
+
const outputModel = new index_1.BoaviztaCpuOutputModel();
|
|
405
|
+
await (0, globals_1.expect)(outputModel.configure('test', {
|
|
406
|
+
'physical-processor': 'Intel Xeon Gold 6138f',
|
|
407
|
+
'core-units': 24,
|
|
408
|
+
location: 'USA',
|
|
409
|
+
})).resolves.toBeInstanceOf(index_1.BoaviztaCpuOutputModel);
|
|
410
|
+
(0, globals_1.expect)(outputModel.name).toBe('test');
|
|
411
|
+
// configure without static params will cause improper configure error
|
|
412
|
+
await (0, globals_1.expect)(outputModel.execute([
|
|
413
|
+
{
|
|
414
|
+
timestamp: '2021-01-01T00:00:00Z',
|
|
415
|
+
duration: 3600,
|
|
416
|
+
'cpu-util': 50,
|
|
417
|
+
},
|
|
418
|
+
])).resolves.toStrictEqual([
|
|
419
|
+
{
|
|
420
|
+
'embodied-carbon': 0.8,
|
|
421
|
+
'e-cpu': 0.575,
|
|
422
|
+
},
|
|
423
|
+
]);
|
|
424
|
+
});
|
|
425
|
+
(0, globals_1.test)('initialize with params and call multiple usages in IMPL format:verbose', async () => {
|
|
426
|
+
const outputModel = new index_1.BoaviztaCpuOutputModel();
|
|
427
|
+
await (0, globals_1.expect)(outputModel.configure('test', {
|
|
428
|
+
'physical-processor': 'Intel Xeon Gold 6138f',
|
|
429
|
+
'core-units': 24,
|
|
430
|
+
location: 'USA',
|
|
431
|
+
verbose: true,
|
|
432
|
+
})).resolves.toBeInstanceOf(index_1.BoaviztaCpuOutputModel);
|
|
433
|
+
(0, globals_1.expect)(outputModel.name).toBe('test');
|
|
434
|
+
// configure without static params will cause improper configure error
|
|
435
|
+
await (0, globals_1.expect)(outputModel.execute([
|
|
436
|
+
{
|
|
437
|
+
timestamp: '2021-01-01T00:00:00Z',
|
|
438
|
+
duration: 7200,
|
|
439
|
+
'cpu-util': 100,
|
|
440
|
+
},
|
|
441
|
+
])).resolves.toStrictEqual([
|
|
442
|
+
{
|
|
443
|
+
'embodied-carbon': 1.6,
|
|
444
|
+
'e-cpu': 1.6408333333333334,
|
|
445
|
+
},
|
|
446
|
+
]);
|
|
447
|
+
});
|
|
448
|
+
});
|
|
449
|
+
(0, globals_1.describe)('cloud:initialize with params', () => {
|
|
450
|
+
(0, globals_1.test)('initialize with params and call usage in RAW Format', async () => {
|
|
451
|
+
const outputModel = new index_1.BoaviztaCloudOutputModel();
|
|
452
|
+
(0, globals_1.expect)(outputModel.modelIdentifier()).toBe('org.boavizta.cloud.sci');
|
|
453
|
+
await (0, globals_1.expect)(outputModel.validateLocation({ location: 'SomethingFail' })).rejects.toThrowError();
|
|
454
|
+
await (0, globals_1.expect)(outputModel.validateInstanceType({ 'instance-type': 'SomethingFail' })).rejects.toThrowError();
|
|
455
|
+
await (0, globals_1.expect)(outputModel.validateProvider({ provider: 'SomethingFail' })).rejects.toThrowError();
|
|
456
|
+
await (0, globals_1.expect)(outputModel.configure('test', {
|
|
457
|
+
'instance-type': 't2.micro',
|
|
458
|
+
location: 'USA',
|
|
459
|
+
'expected-lifespan': 4 * 365 * 24 * 60 * 60,
|
|
460
|
+
provider: 'aws',
|
|
461
|
+
verbose: false,
|
|
462
|
+
})).resolves.toBeInstanceOf(index_1.BoaviztaCloudOutputModel);
|
|
463
|
+
await (0, globals_1.expect)(outputModel.configure('test', {
|
|
464
|
+
'instance-type': 't2.micro',
|
|
465
|
+
location: 'USA',
|
|
466
|
+
'expected-lifespan': 4 * 365 * 24 * 60 * 60,
|
|
467
|
+
provider: 'aws',
|
|
468
|
+
verbose: 'false',
|
|
469
|
+
})).resolves.toBeInstanceOf(index_1.BoaviztaCloudOutputModel);
|
|
470
|
+
await (0, globals_1.expect)(outputModel.configure('test', {
|
|
471
|
+
'instance-type': 't2.micro',
|
|
472
|
+
location: 'USA',
|
|
473
|
+
'expected-lifespan': 4 * 365 * 24 * 60 * 60,
|
|
474
|
+
provider: 'aws',
|
|
475
|
+
verbose: 0,
|
|
476
|
+
})).resolves.toBeInstanceOf(index_1.BoaviztaCloudOutputModel);
|
|
477
|
+
(0, globals_1.expect)(outputModel.name).toBe('test');
|
|
478
|
+
// configure without static params will cause improper configure error
|
|
479
|
+
});
|
|
480
|
+
(0, globals_1.test)("correct 'instance-type': initialize with params and call usage in IMPL Format", async () => {
|
|
481
|
+
const outputModel = new index_1.BoaviztaCloudOutputModel();
|
|
482
|
+
await (0, globals_1.expect)(outputModel.configure('test', {
|
|
483
|
+
'instance-type': 't2.micro',
|
|
484
|
+
location: 'USA',
|
|
485
|
+
})).rejects.toThrowError();
|
|
486
|
+
await (0, globals_1.expect)(outputModel.configure('test', {
|
|
487
|
+
provider: 'aws',
|
|
488
|
+
location: 'USA',
|
|
489
|
+
})).rejects.toThrowError();
|
|
490
|
+
await (0, globals_1.expect)(outputModel.configure('test', {
|
|
491
|
+
'instance-type': 't2.micro',
|
|
492
|
+
location: 'USA',
|
|
493
|
+
provider: 'aws',
|
|
494
|
+
})).resolves.toBeInstanceOf(index_1.BoaviztaCloudOutputModel);
|
|
495
|
+
(0, globals_1.expect)(outputModel.name).toBe('test');
|
|
496
|
+
// mockAxios.get.mockResolvedValue({data: {}});
|
|
497
|
+
await (0, globals_1.expect)(outputModel.execute([
|
|
498
|
+
{
|
|
499
|
+
timestamp: '2021-01-01T00:00:00Z',
|
|
500
|
+
duration: 15,
|
|
501
|
+
'cpu-util': 34,
|
|
502
|
+
},
|
|
503
|
+
])).resolves.toStrictEqual([
|
|
504
|
+
{
|
|
505
|
+
'embodied-carbon': 1.6,
|
|
506
|
+
energy: 1.6408333333333334,
|
|
507
|
+
},
|
|
508
|
+
]);
|
|
509
|
+
});
|
|
510
|
+
(0, globals_1.test)('wrong "instance-type": initialize with params and call usage in IMPL Format throws error', async () => {
|
|
511
|
+
const outputModel = new index_1.BoaviztaCloudOutputModel();
|
|
512
|
+
await (0, globals_1.expect)(outputModel.configure('test', {
|
|
513
|
+
'instance-type': 't5.micro',
|
|
514
|
+
location: 'USA',
|
|
515
|
+
provider: 'aws',
|
|
516
|
+
})).rejects.toThrowError();
|
|
517
|
+
(0, globals_1.expect)(outputModel.name).toBe('test');
|
|
518
|
+
// configure without static params will cause improper configure error
|
|
519
|
+
await (0, globals_1.expect)(outputModel.execute([
|
|
520
|
+
{
|
|
521
|
+
timestamp: '2021-01-01T00:00:00Z',
|
|
522
|
+
duration: 15,
|
|
523
|
+
'cpu-util': 34,
|
|
524
|
+
},
|
|
525
|
+
{
|
|
526
|
+
timestamp: '2021-01-01T00:00:15Z',
|
|
527
|
+
duration: 15,
|
|
528
|
+
'cpu-util': 12,
|
|
529
|
+
},
|
|
530
|
+
{
|
|
531
|
+
timestamp: '2021-01-01T00:00:30Z',
|
|
532
|
+
duration: 15,
|
|
533
|
+
'cpu-util': 1,
|
|
534
|
+
},
|
|
535
|
+
{
|
|
536
|
+
timestamp: '2021-01-01T00:00:45Z',
|
|
537
|
+
duration: 15,
|
|
538
|
+
'cpu-util': 78,
|
|
539
|
+
},
|
|
540
|
+
])).rejects.toThrowError();
|
|
541
|
+
});
|
|
542
|
+
(0, globals_1.test)('without "instance-type": initialize with params and call usage in IMPL Format throws error', async () => {
|
|
543
|
+
const outputModel = new index_1.BoaviztaCloudOutputModel();
|
|
544
|
+
await (0, globals_1.expect)(outputModel.configure('test', {
|
|
545
|
+
location: 'USA',
|
|
546
|
+
provider: 'aws',
|
|
547
|
+
})).rejects.toStrictEqual(Error("Improper configure: Missing 'instance-type' parameter"));
|
|
548
|
+
await (0, globals_1.expect)(outputModel.configure('test', {
|
|
549
|
+
location: 'USAF',
|
|
550
|
+
provider: 'aws',
|
|
551
|
+
'instance-type': 't2.micro',
|
|
552
|
+
})).rejects.toThrowError();
|
|
553
|
+
(0, globals_1.expect)(outputModel.name).toBe('test');
|
|
554
|
+
// configure without static params will cause improper configure error
|
|
555
|
+
await (0, globals_1.expect)(outputModel.execute([
|
|
556
|
+
{
|
|
557
|
+
timestamp: '2021-01-01T00:00:00Z',
|
|
558
|
+
duration: 15,
|
|
559
|
+
'cpu-util': 34,
|
|
560
|
+
},
|
|
561
|
+
{
|
|
562
|
+
timestamp: '2021-01-01T00:00:15Z',
|
|
563
|
+
duration: 15,
|
|
564
|
+
'cpu-util': 12,
|
|
565
|
+
},
|
|
566
|
+
{
|
|
567
|
+
timestamp: '2021-01-01T00:00:30Z',
|
|
568
|
+
duration: 15,
|
|
569
|
+
'cpu-util': 1,
|
|
570
|
+
},
|
|
571
|
+
{
|
|
572
|
+
timestamp: '2021-01-01T00:00:45Z',
|
|
573
|
+
duration: 15,
|
|
574
|
+
'cpu-util': 78,
|
|
575
|
+
},
|
|
576
|
+
])).rejects.toStrictEqual(Error('Improper configure: Missing configuration parameters'));
|
|
577
|
+
});
|
|
578
|
+
});
|
|
579
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9fX3Rlc3RzX18vdW5pdC9saWIvYm9hdml6dGEvaW5kZXgudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDJDQUEyRDtBQUMzRCwwREFHd0M7QUFDeEMsaUNBQTJDO0FBQzNDLDJFQUEyRTtBQUMzRSwyRUFBMkU7QUFDM0UscUZBQXFGO0FBRXJGLEtBQUssVUFBVSxRQUFRLENBQ3JCLEdBQVc7SUFFWCxRQUFRLEdBQUcsRUFBRTtRQUNYLEtBQUssMERBQTBEO1lBQzdELE9BQU8sRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFNLENBQUM7UUFDaEMsS0FBSyxnREFBZ0Q7WUFDbkQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUMsSUFBSSxFQUFFLFNBQVMsRUFBTSxDQUFDLENBQUM7UUFDakQsS0FBSyx1RUFBdUU7WUFDMUUsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDO2dCQUNyQixJQUFJLEVBQUUsY0FBYyxDQUFDLEtBQUssQ0FBQzthQUN2QixDQUFDLENBQUM7S0FDWDtJQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFPLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQsY0FBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNuQixNQUFNLFNBQVMsR0FBRyxlQUFrQyxDQUFDO0FBQ3JELHVFQUF1RTtBQUN2RSxTQUFTLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzNDLFNBQVMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQy9CLENBQXFDLEdBQVcsRUFBYyxFQUFFO0lBQzlELFFBQVEsR0FBRyxFQUFFO1FBQ1gsS0FBSyxvRUFBb0U7WUFDdkUsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDO2dCQUNyQixJQUFJLEVBQUU7b0JBQ0osT0FBTyxFQUFFO3dCQUNQLEdBQUcsRUFB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akMsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osVUFBVSxFQUFFLEVBQUU7YUFDZjtTQUNGLENBQUMsQ0FDSCxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQ3JCLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUM5RCxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZGVzY3JpYmUsIGV4cGVjdCwgamVzdCwgdGVzdH0gZnJvbSAnQGplc3QvZ2xvYmFscyc7XG5pbXBvcnQge1xuICBCb2F2aXp0YUNsb3VkT3V0cHV0TW9kZWwsXG4gIEJvYXZpenRhQ3B1T3V0cHV0TW9kZWwsXG59IGZyb20gJy4uLy4uLy4uLy4uL2xpYi9ib2F2aXp0YS9pbmRleCc7XG5pbXBvcnQgYXhpb3MsIHtBeGlvc1Jlc3BvbnNlfSBmcm9tICdheGlvcyc7XG5pbXBvcnQgKiBhcyBQUk9WSURFUlMgZnJvbSAnLi4vLi4vLi4vLi4vX19tb2Nrc19fL2JvYXZpenRhL3Byb3ZpZGVycy5qc29uJztcbmltcG9ydCAqIGFzIENPVU5UUklFUyBmcm9tICcuLi8uLi8uLi8uLi9fX21vY2tzX18vYm9hdml6dGEvY291bnRyaWVzLmpzb24nO1xuaW1wb3J0ICogYXMgSU5TVEFOQ0VfVFlQRVMgZnJvbSAnLi4vLi4vLi4vLi4vX19tb2Nrc19fL2JvYXZpenRhL2luc3RhbmNlX3R5cGVzLmpzb24nO1xuXG5hc3luYyBmdW5jdGlvbiBheGlvc0dldDxUID0gYW55LCBSID0gQXhpb3NSZXNwb25zZTxULCBhbnk+PihcbiAgdXJsOiBzdHJpbmdcbik6IFByb21pc2U8Uj4ge1xuICBzd2l0Y2ggKHVybCkge1xuICAgIGNhc2UgJ2h0dHBzOi8vYXBpLmJvYXZpenRhLm9yZy92MS9jbG91ZC9pbnN0YW5jZS9hbGxfcHJvdmlkZXJzJzpcbiAgICAgIHJldHVybiB7ZGF0YTogUFJPVklERVJTfSBhcyBSO1xuICAgIGNhc2UgJ2h0dHBzOi8vYXBpLmJvYXZpenRhLm9yZy92MS91dGlscy9jb3VudHJ5X2NvZGUnOlxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7ZGF0YTogQ09VTlRSSUVTfSBhcyBSKTtcbiAgICBjYXNlICdodHRwczovL2FwaS5ib2F2aXp0YS5vcmcvdjEvY2xvdWQvaW5zdGFuY2UvYWxsX2luc3RhbmNlcz9wcm92aWRlcj1hd3MnOlxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgIGRhdGE6IElOU1RBTkNFX1RZUEVTWydhd3MnXSxcbiAgICAgIH0gYXMgUik7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSBhcyBSKTtcbn1cblxuamVzdC5tb2NrKCdheGlvcycpO1xuY29uc3QgbW9ja0F4aW9zID0gYXhpb3MgYXMgamVzdC5Nb2NrZWQ8dHlwZW9mIGF4aW9zPjtcbi8vIE1vY2sgb3V0IGFsbCB0b3AgbGV2ZWwgZnVuY3Rpb25zLCBzdWNoIGFzIGdldCwgcHV0LCBkZWxldGUgYW5kIHBvc3Q6XG5tb2NrQXhpb3MuZ2V0Lm1vY2tJbXBsZW1lbnRhdGlvbihheGlvc0dldCk7XG5tb2NrQXhpb3MucG9zdC5tb2NrSW1wbGVtZW50YXRpb24oXG4gIDxUID0gYW55LCBSID0gQXhpb3NSZXNwb25zZTxULCBhbnk+Pih1cmw6IHN0cmluZyk6IFByb21pc2U8Uj4gPT4ge1xuICAgIHN3aXRjaCAodXJsKSB7XG4gICAgICBjYXNlICdodHRwczovL2FwaS5ib2F2aXp0YS5vcmcvdjEvY29tcG9uZW50L2NwdT92ZXJib3NlPWZhbHNlJmR1cmF0aW9uPTEnOlxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBvdXRwdXRzOiB7XG4gICAgICAgICAgICAgIGd3cDoge1xuICAgICAgICAgICAgICAgIGVtYmVkZGVkOiB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZTogMC4wMDA4LFxuICAgICAgICAgICAgICAgICAgbWluOiAwLjAwMDQxNTUsXG4gICAgICAgICAgICAgICAgICBtYXg6IDAuMDAzMTEzLFxuICAgICAgICAgICAgICAgICAgd2FybmluZ3M6IFsnRW5kIG9mIGxpZmUgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBjYWxjdWxhdGlvbiddLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdXNlOiB7dmFsdWU6IDAuMDY3NDMsIG1pbjogMC4wNjc0MywgbWF4OiAwLjA2NzQzfSxcbiAgICAgICAgICAgICAgICB1bml0OiAna2dDTzJlcScsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUb3RhbCBjbGltYXRlIGNoYW5nZScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGFkcDoge1xuICAgICAgICAgICAgICAgIGVtYmVkZGVkOiB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZTogNy43NjRlLTcsXG4gICAgICAgICAgICAgICAgICBtaW46IDcuNzYzZS03LFxuICAgICAgICAgICAgICAgICAgbWF4OiA3Ljc3MWUtNyxcbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdzOiBbJ0VuZCBvZiBsaWZlIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgY2FsY3VsYXRpb24nXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHVzZToge3ZhbHVlOiAxLjc5NmUtOCwgbWluOiAxLjc5NmUtOCwgbWF4OiAxLjc5NmUtOH0sXG4gICAgICAgICAgICAgICAgdW5pdDogJ2tnU2JlcScsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVc2Ugb2YgbWluZXJhbHMgYW5kIGZvc3NpbCByZXNzb3VyY2VzJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgcGU6IHtcbiAgICAgICAgICAgICAgICBlbWJlZGRlZDoge1xuICAgICAgICAgICAgICAgICAgdmFsdWU6IDAuMDEyLFxuICAgICAgICAgICAgICAgICAgbWluOiAwLjAwNjg0NyxcbiAgICAgICAgICAgICAgICAgIG1heDogMC4wNDMxNCxcbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdzOiBbJ0VuZCBvZiBsaWZlIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgY2FsY3VsYXRpb24nXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHVzZToge3ZhbHVlOiAyLjA3LCBtaW46IDIuMDcsIG1heDogMi4wN30sXG4gICAgICAgICAgICAgICAgdW5pdDogJ01KJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0NvbnN1bXB0aW9uIG9mIHByaW1hcnkgZW5lcmd5JyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBSKTtcbiAgICAgIGNhc2UgJ2h0dHBzOi8vYXBpLmJvYXZpenRhLm9yZy92MS9jb21wb25lbnQvY3B1P3ZlcmJvc2U9dHJ1ZSZkdXJhdGlvbj0yJzpcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgb3V0cHV0czoge1xuICAgICAgICAgICAgICBnd3A6IHtcbiAgICAgICAgICAgICAgICBlbWJlZGRlZDoge1xuICAgICAgICAgICAgICAgICAgdmFsdWU6IDAuMDAxNixcbiAgICAgICAgICAgICAgICAgIG1pbjogMC4wMDA4MzEsXG4gICAgICAgICAgICAgICAgICBtYXg6IDAuMDA2MjI2LFxuICAgICAgICAgICAgICAgICAgd2FybmluZ3M6IFsnRW5kIG9mIGxpZmUgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBjYWxjdWxhdGlvbiddLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdXNlOiB7dmFsdWU6IDAuMTkyNCwgbWluOiAwLjE5MjQsIG1heDogMC4xOTI0fSxcbiAgICAgICAgICAgICAgICB1bml0OiAna2dDTzJlcScsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUb3RhbCBjbGltYXRlIGNoYW5nZScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGFkcDoge1xuICAgICAgICAgICAgICAgIGVtYmVkZGVkOiB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZTogMC4wMDAwMDE1NTMsXG4gICAgICAgICAgICAgICAgICBtaW46IDAuMDAwMDAxNTUzLFxuICAgICAgICAgICAgICAgICAgbWF4OiAwLjAwMDAwMTU1NCxcbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdzOiBbJ0VuZCBvZiBsaWZlIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgY2FsY3VsYXRpb24nXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHVzZToge3ZhbHVlOiA1LjEyNmUtOCwgbWluOiA1LjEyNmUtOCwgbWF4OiA1LjEyNmUtOH0sXG4gICAgICAgICAgICAgICAgdW5pdDogJ2tnU2JlcScsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVc2Ugb2YgbWluZXJhbHMgYW5kIGZvc3NpbCByZXNzb3VyY2VzJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgcGU6IHtcbiAgICAgICAgICAgICAgICBlbWJlZGRlZDoge1xuICAgICAgICAgICAgICAgICAgdmFsdWU6IDAuMDIzLFxuICAgICAgICAgICAgICAgICAgbWluOiAwLjAxMzY5LFxuICAgICAgICAgICAgICAgICAgbWF4OiAwLjA4NjI3LFxuICAgICAgICAgICAgICAgICAgd2FybmluZ3M6IFsnRW5kIG9mIGxpZmUgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBjYWxjdWxhdGlvbiddLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdXNlOiB7dmFsdWU6IDUuOTA3LCBtaW46IDUuOTA3LCBtYXg6IDUuOTA3fSxcbiAgICAgICAgICAgICAgICB1bml0OiAnTUonLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQ29uc3VtcHRpb24gb2YgcHJpbWFyeSBlbmVyZ3knLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcmJvc2U6IHtcbiAgICAgICAgICAgICAgb3V0cHV0czoge1xuICAgICAgICAgICAgICAgIGd3cDoge1xuICAgICAgICAgICAgICAgICAgZW1iZWRkZWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDAuMDAxNixcbiAgICAgICAgICAgICAgICAgICAgbWluOiAwLjAwMDgzMSxcbiAgICAgICAgICAgICAgICAgICAgbWF4OiAwLjAwNjIyNixcbiAgICAgICAgICAgICAgICAgICAgd2FybmluZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAnRW5kIG9mIGxpZmUgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBjYWxjdWxhdGlvbicsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgdXNlOiB7dmFsdWU6IDAuMTkyNCwgbWluOiAwLjE5MjQsIG1heDogMC4xOTI0fSxcbiAgICAgICAgICAgICAgICAgIHVuaXQ6ICdrZ0NPMmVxJyxcbiAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVG90YWwgY2xpbWF0ZSBjaGFuZ2UnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYWRwOiB7XG4gICAgICAgICAgICAgICAgICBlbWJlZGRlZDoge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogMC4wMDAwMDE1NTMsXG4gICAgICAgICAgICAgICAgICAgIG1pbjogMC4wMDAwMDE1NTMsXG4gICAgICAgICAgICAgICAgICAgIG1heDogMC4wMDAwMDE1NTQsXG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgJ0VuZCBvZiBsaWZlIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgY2FsY3VsYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHVzZToge3ZhbHVlOiA1LjEyNmUtOCwgbWluOiA1LjEyNmUtOCwgbWF4OiA1LjEyNmUtOH0sXG4gICAgICAgICAgICAgICAgICB1bml0OiAna2dTYmVxJyxcbiAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlIG9mIG1pbmVyYWxzIGFuZCBmb3NzaWwgcmVzc291cmNlcycsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwZToge1xuICAgICAgICAgICAgICAgICAgZW1iZWRkZWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDAuMDIzLFxuICAgICAgICAgICAgICAgICAgICBtaW46IDAuMDEzNjksXG4gICAgICAgICAgICAgICAgICAgIG1heDogMC4wODYyNyxcbiAgICAgICAgICAgICAgICAgICAgd2FybmluZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAnRW5kIG9mIGxpZmUgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBjYWxjdWxhdGlvbicsXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgdXNlOiB7dmFsdWU6IDUuOTA3LCBtaW46IDUuOTA3LCBtYXg6IDUuOTA3fSxcbiAgICAgICAgICAgICAgICAgIHVuaXQ6ICdNSicsXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0NvbnN1bXB0aW9uIG9mIHByaW1hcnkgZW5lcmd5JyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB1bml0czoge3ZhbHVlOiAxLCBzdGF0dXM6ICdBUkNIRVRZUEUnLCBtaW46IDEsIG1heDogMX0sXG4gICAgICAgICAgICAgIGRpZV9zaXplOiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IDUyMSxcbiAgICAgICAgICAgICAgICBzdGF0dXM6ICdDT01QTEVURUQnLFxuICAgICAgICAgICAgICAgIHVuaXQ6ICdtbTInLFxuICAgICAgICAgICAgICAgIHNvdXJjZTogJ0F2ZXJhZ2UgdmFsdWUgZm9yIGFsbCBmYW1pbGllcycsXG4gICAgICAgICAgICAgICAgbWluOiA0MS4yLFxuICAgICAgICAgICAgICAgIG1heDogMzY0MCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZHVyYXRpb246IHt2YWx1ZTogMiwgdW5pdDogJ2hvdXJzJ30sXG4gICAgICAgICAgICAgIGF2Z19wb3dlcjoge1xuICAgICAgICAgICAgICAgIHZhbHVlOiAyNjAuMDUsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiAnQ09NUExFVEVEJyxcbiAgICAgICAgICAgICAgICB1bml0OiAnVycsXG4gICAgICAgICAgICAgICAgbWluOiAyNjAuMDUsXG4gICAgICAgICAgICAgICAgbWF4OiAyNjAuMDUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHRpbWVfd29ya2xvYWQ6IHt2YWx1ZTogMTAwLCBzdGF0dXM6ICdJTlBVVCcsIHVuaXQ6ICclJ30sXG4gICAgICAgICAgICAgIHVzYWdlX2xvY2F0aW9uOiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6ICdVU0EnLFxuICAgICAgICAgICAgICAgIHN0YXR1czogJ0lOUFVUJyxcbiAgICAgICAgICAgICAgICB1bml0OiAnQ29kU1AzIC0gTkNTIENvdW50cnkgQ29kZXMgLSBOQVRPJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdXNlX3RpbWVfcmF0aW86IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgICAgICAgICBzdGF0dXM6ICdBUkNIRVRZUEUnLFxuICAgICAgICAgICAgICAgIHVuaXQ6ICcvMScsXG4gICAgICAgICAgICAgICAgbWluOiAxLFxuICAgICAgICAgICAgICAgIG1heDogMSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaG91cnNfbGlmZV90aW1lOiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IDI2MjgwLFxuICAgICAgICAgICAgICAgIHN0YXR1czogJ0FSQ0hFVFlQRScsXG4gICAgICAgICAgICAgICAgdW5pdDogJ2hvdXJzJyxcbiAgICAgICAgICAgICAgICBtaW46IDI2MjgwLFxuICAgICAgICAgICAgICAgIG1heDogMjYyODAsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB7YTogMTcxLjIsIGI6IDAuMDM1NCwgYzogMzYuODksIGQ6IC0xMC4xM30sXG4gICAgICAgICAgICAgICAgc3RhdHVzOiAnQVJDSEVUWVBFJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZ3dwX2ZhY3Rvcjoge1xuICAgICAgICAgICAgICAgIHZhbHVlOiAwLjM3LFxuICAgICAgICAgICAgICAgIHN0YXR1czogJ0NPTVBMRVRFRCcsXG4gICAgICAgICAgICAgICAgdW5pdDogJ2tnIENPMmVxL2tXaCcsXG4gICAgICAgICAgICAgICAgc291cmNlOiAnaHR0cHM6Ly9lbWJlci1jbGltYXRlLm9yZy9kYXRhL2RhdGEtZXhwbG9yZXInLFxuICAgICAgICAgICAgICAgIG1pbjogMC4zNyxcbiAgICAgICAgICAgICAgICBtYXg6IDAuMzcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGFkcF9mYWN0b3I6IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogOS44NTU0OGUtOCxcbiAgICAgICAgICAgICAgICBzdGF0dXM6ICdDT01QTEVURUQnLFxuICAgICAgICAgICAgICAgIHVuaXQ6ICdrZyBTYmVxL2tXaCcsXG4gICAgICAgICAgICAgICAgc291cmNlOiAnQURFTUUgQmFzZSBvdXRwdXRTIMKuJyxcbiAgICAgICAgICAgICAgICBtaW46IDkuODU1NDhlLTgsXG4gICAgICAgICAgICAgICAgbWF4OiA5Ljg1NTQ4ZS04LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBwZV9mYWN0b3I6IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogMTEuMzU4LFxuICAgICAgICAgICAgICAgIHN0YXR1czogJ0NPTVBMRVRFRCcsXG4gICAgICAgICAgICAgICAgdW5pdDogJ01KL2tXaCcsXG4gICAgICAgICAgICAgICAgc291cmNlOiAnQURQZiAvICgxLSVyZW5ld2FibGVfZW5lcmd5KScsXG4gICAgICAgICAgICAgICAgbWluOiAxMS4zNTgsXG4gICAgICAgICAgICAgICAgbWF4OiAxMS4zNTgsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgUik7XG4gICAgICBjYXNlICdodHRwczovL2FwaS5ib2F2aXp0YS5vcmcvdjEvY2xvdWQvaW5zdGFuY2U/dmVyYm9zZT1mYWxzZSZkdXJhdGlvbj0wLjAwNDE2NjY2NjY2NjY2NjY2Nyc6XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIG91dHB1dHM6IHtcbiAgICAgICAgICAgICAgZ3dwOiB7XG4gICAgICAgICAgICAgICAgZW1iZWRkZWQ6IHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiAwLjAwMTYsXG4gICAgICAgICAgICAgICAgICBtaW46IDAuMDAwODMxLFxuICAgICAgICAgICAgICAgICAgbWF4OiAwLjAwNjIyNixcbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdzOiBbJ0VuZCBvZiBsaWZlIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgY2FsY3VsYXRpb24nXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHVzZToge3ZhbHVlOiAwLjE5MjQsIG1pbjogMC4xOTI0LCBtYXg6IDAuMTkyNH0sXG4gICAgICAgICAgICAgICAgdW5pdDogJ2tnQ08yZXEnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVG90YWwgY2xpbWF0ZSBjaGFuZ2UnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBhZHA6IHtcbiAgICAgICAgICAgICAgICBlbWJlZGRlZDoge1xuICAgICAgICAgICAgICAgICAgdmFsdWU6IDAuMDAwMDAxNTUzLFxuICAgICAgICAgICAgICAgICAgbWluOiAwLjAwMDAwMTU1MyxcbiAgICAgICAgICAgICAgICAgIG1heDogMC4wMDAwMDE1NTQsXG4gICAgICAgICAgICAgICAgICB3YXJuaW5nczogWydFbmQgb2YgbGlmZSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGNhbGN1bGF0aW9uJ10sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB1c2U6IHt2YWx1ZTogNS4xMjZlLTgsIG1pbjogNS4xMjZlLTgsIG1heDogNS4xMjZlLTh9LFxuICAgICAgICAgICAgICAgIHVuaXQ6ICdrZ1NiZXEnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlIG9mIG1pbmVyYWxzIGFuZCBmb3NzaWwgcmVzc291cmNlcycsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHBlOiB7XG4gICAgICAgICAgICAgICAgZW1iZWRkZWQ6IHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiAwLjAyMyxcbiAgICAgICAgICAgICAgICAgIG1pbjogMC4wMTM2OSxcbiAgICAgICAgICAgICAgICAgIG1heDogMC4wODYyNyxcbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdzOiBbJ0VuZCBvZiBsaWZlIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgY2FsY3VsYXRpb24nXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHVzZToge3ZhbHVlOiA1LjkwNywgbWluOiA1LjkwNywgbWF4OiA1LjkwN30sXG4gICAgICAgICAgICAgICAgdW5pdDogJ01KJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0NvbnN1bXB0aW9uIG9mIHByaW1hcnkgZW5lcmd5JyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJib3NlOiB7XG4gICAgICAgICAgICAgIG91dHB1dHM6IHtcbiAgICAgICAgICAgICAgICBnd3A6IHtcbiAgICAgICAgICAgICAgICAgIGVtYmVkZGVkOiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAwLjAwMTYsXG4gICAgICAgICAgICAgICAgICAgIG1pbjogMC4wMDA4MzEsXG4gICAgICAgICAgICAgICAgICAgIG1heDogMC4wMDYyMjYsXG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgJ0VuZCBvZiBsaWZlIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgY2FsY3VsYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHVzZToge3ZhbHVlOiAwLjE5MjQsIG1pbjogMC4xOTI0LCBtYXg6IDAuMTkyNH0sXG4gICAgICAgICAgICAgICAgICB1bml0OiAna2dDTzJlcScsXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RvdGFsIGNsaW1hdGUgY2hhbmdlJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFkcDoge1xuICAgICAgICAgICAgICAgICAgZW1iZWRkZWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDAuMDAwMDAxNTUzLFxuICAgICAgICAgICAgICAgICAgICBtaW46IDAuMDAwMDAxNTUzLFxuICAgICAgICAgICAgICAgICAgICBtYXg6IDAuMDAwMDAxNTU0LFxuICAgICAgICAgICAgICAgICAgICB3YXJuaW5nczogW1xuICAgICAgICAgICAgICAgICAgICAgICdFbmQgb2YgbGlmZSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGNhbGN1bGF0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB1c2U6IHt2YWx1ZTogNS4xMjZlLTgsIG1pbjogNS4xMjZlLTgsIG1heDogNS4xMjZlLTh9LFxuICAgICAgICAgICAgICAgICAgdW5pdDogJ2tnU2JlcScsXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1VzZSBvZiBtaW5lcmFscyBhbmQgZm9zc2lsIHJlc3NvdXJjZXMnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcGU6IHtcbiAgICAgICAgICAgICAgICAgIGVtYmVkZGVkOiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAwLjAyMyxcbiAgICAgICAgICAgICAgICAgICAgbWluOiAwLjAxMzY5LFxuICAgICAgICAgICAgICAgICAgICBtYXg6IDAuMDg2MjcsXG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgJ0VuZCBvZiBsaWZlIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgY2FsY3VsYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHVzZToge3ZhbHVlOiA1LjkwNywgbWluOiA1LjkwNywgbWF4OiA1LjkwN30sXG4gICAgICAgICAgICAgICAgICB1bml0OiAnTUonLFxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdDb25zdW1wdGlvbiBvZiBwcmltYXJ5IGVuZXJneScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdW5pdHM6IHt2YWx1ZTogMSwgc3RhdHVzOiAnQVJDSEVUWVBFJywgbWluOiAxLCBtYXg6IDF9LFxuICAgICAgICAgICAgICBkaWVfc2l6ZToge1xuICAgICAgICAgICAgICAgIHZhbHVlOiA1MjEsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiAnQ09NUExFVEVEJyxcbiAgICAgICAgICAgICAgICB1bml0OiAnbW0yJyxcbiAgICAgICAgICAgICAgICBzb3VyY2U6ICdBdmVyYWdlIHZhbHVlIGZvciBhbGwgZmFtaWxpZXMnLFxuICAgICAgICAgICAgICAgIG1pbjogNDEuMixcbiAgICAgICAgICAgICAgICBtYXg6IDM2NDAsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiB7dmFsdWU6IDIsIHVuaXQ6ICdob3Vycyd9LFxuICAgICAgICAgICAgICBhdmdfcG93ZXI6IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogMjYwLjA1LFxuICAgICAgICAgICAgICAgIHN0YXR1czogJ0NPTVBMRVRFRCcsXG4gICAgICAgICAgICAgICAgdW5pdDogJ1cnLFxuICAgICAgICAgICAgICAgIG1pbjogMjYwLjA1LFxuICAgICAgICAgICAgICAgIG1heDogMjYwLjA1LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0aW1lX3dvcmtsb2FkOiB7dmFsdWU6IDEwMCwgc3RhdHVzOiAnSU5QVVQnLCB1bml0OiAnJSd9LFxuICAgICAgICAgICAgICB1c2FnZV9sb2NhdGlvbjoge1xuICAgICAgICAgICAgICAgIHZhbHVlOiAnVVNBJyxcbiAgICAgICAgICAgICAgICBzdGF0dXM6ICdJTlBVVCcsXG4gICAgICAgICAgICAgICAgdW5pdDogJ0NvZFNQMyAtIE5DUyBDb3VudHJ5IENvZGVzIC0gTkFUTycsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHVzZV90aW1lX3JhdGlvOiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiAnQVJDSEVUWVBFJyxcbiAgICAgICAgICAgICAgICB1bml0OiAnLzEnLFxuICAgICAgICAgICAgICAgIG1pbjogMSxcbiAgICAgICAgICAgICAgICBtYXg6IDEsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGhvdXJzX2xpZmVfdGltZToge1xuICAgICAgICAgICAgICAgIHZhbHVlOiAyNjI4MCxcbiAgICAgICAgICAgICAgICBzdGF0dXM6ICdBUkNIRVRZUEUnLFxuICAgICAgICAgICAgICAgIHVuaXQ6ICdob3VycycsXG4gICAgICAgICAgICAgICAgbWluOiAyNjI4MCxcbiAgICAgICAgICAgICAgICBtYXg6IDI2MjgwLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICB2YWx1ZToge2E6IDE3MS4yLCBiOiAwLjAzNTQsIGM6IDM2Ljg5LCBkOiAtMTAuMTN9LFxuICAgICAgICAgICAgICAgIHN0YXR1czogJ0FSQ0hFVFlQRScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGd3cF9mYWN0b3I6IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogMC4zNyxcbiAgICAgICAgICAgICAgICBzdGF0dXM6ICdDT01QTEVURUQnLFxuICAgICAgICAgICAgICAgIHVuaXQ6ICdrZyBDTzJlcS9rV2gnLFxuICAgICAgICAgICAgICAgIHNvdXJjZTogJ2h0dHBzOi8vZW1iZXItY2xpbWF0ZS5vcmcvZGF0YS9kYXRhLWV4cGxvcmVyJyxcbiAgICAgICAgICAgICAgICBtaW46IDAuMzcsXG4gICAgICAgICAgICAgICAgbWF4OiAwLjM3LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBhZHBfZmFjdG9yOiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IDkuODU1NDhlLTgsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiAnQ09NUExFVEVEJyxcbiAgICAgICAgICAgICAgICB1bml0OiAna2cgU2JlcS9rV2gnLFxuICAgICAgICAgICAgICAgIHNvdXJjZTogJ0FERU1FIEJhc2Ugb3V0cHV0UyDCricsXG4gICAgICAgICAgICAgICAgbWluOiA5Ljg1NTQ4ZS04LFxuICAgICAgICAgICAgICAgIG1heDogOS44NTU0OGUtOCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgcGVfZmFjdG9yOiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IDExLjM1OCxcbiAgICAgICAgICAgICAgICBzdGF0dXM6ICdDT01QTEVURUQnLFxuICAgICAgICAgICAgICAgIHVuaXQ6ICdNSi9rV2gnLFxuICAgICAgICAgICAgICAgIHNvdXJjZTogJ0FEUGYgLyAoMS0lcmVuZXdhYmxlX2VuZXJneSknLFxuICAgICAgICAgICAgICAgIG1pbjogMTEuMzU4LFxuICAgICAgICAgICAgICAgIG1heDogMTEuMzU4LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9IGFzIFIpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9IGFzIFIpO1xuICB9XG4pO1xuamVzdC5zZXRUaW1lb3V0KDMwMDAwKTtcbmRlc2NyaWJlKCdjcHU6Y29uZmlndXJlIHRlc3QnLCAoKSA9PiB7XG4gIHRlc3QoJ2luaXRpYWxpemUgd3JvbmcgcGFyYW1zIHNob3VsZCB0aHJvdyBlcnJvcicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvdXRwdXRNb2RlbCA9IG5ldyBCb2F2aXp0YUNwdU91dHB1dE1vZGVsKCk7XG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgb3V0cHV0TW9kZWwuY29uZmlndXJlKCd0ZXN0Jywge2FsbG9jYXRpb246ICd3cm9uZyd9KVxuICAgICkucmVqZWN0cy50b1Rocm93RXJyb3IoKTtcbiAgICBleHBlY3Qob3V0cHV0TW9kZWwubmFtZSkudG9CZSgndGVzdCcpO1xuICB9KTtcblxuICB0ZXN0KCdpbml0aWFsaXplIHdpdGhvdXQgcGFyYW1zIHRocm93cyBlcnJvciBmb3IgcGFyYW1ldGVyIGFuZCBjYWxsIGV4ZWN1dGUgd2l0aG91dCBwYXJhbXMgdGhyb3dzIGVycm9yIGZvciBpbnB1dCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvdXRwdXRNb2RlbCA9IG5ldyBCb2F2aXp0YUNwdU91dHB1dE1vZGVsKCk7XG4gICAgY29uc3Qgb3V0cHV0TW9kZWxDb25maWdGYWlsID0gbmV3IEJvYXZpenRhQ3B1T3V0cHV0TW9kZWwoKTtcbiAgICBleHBlY3Qob3V0cHV0TW9kZWwubW9kZWxJZGVudGlmaWVyKCkpLnRvQmUoJ29yZy5ib2F2aXp0YS5jcHUuc2NpJyk7XG4gICAgYXdhaXQgZXhwZWN0KG91dHB1dE1vZGVsLmF1dGhlbnRpY2F0ZSh7fSkpLnJlc29sdmVzLnRvQmUodW5kZWZpbmVkKTtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBvdXRwdXRNb2RlbENvbmZpZ0ZhaWwuZXhlY3V0ZShbXG4gICAgICAgIHtcbiAgICAgICAgICB0aW1lc3RhbXA6ICcyMDIxLTAxLTAxVDAwOjAwOjAwWicsXG4gICAgICAgICAgZHVyYXRpb246IDM2MDAsXG4gICAgICAgICAgJ2NwdS11dGlsJzogNTAsXG4gICAgICAgIH0sXG4gICAgICBdKVxuICAgICkucmVqZWN0cy50b1Rocm93RXJyb3IoKTtcblxuICAgIGF3YWl0IGV4cGVjdChvdXRwdXRNb2RlbC5jb25maWd1cmUoJ3Rlc3QnKSkucmVqZWN0cy50b1Rocm93KFxuICAgICAgRXJyb3IoJ0ltcHJvcGVyIGNvbmZpZ3VyZTogTWlzc2luZyBwcm9jZXNzb3IgcGFyYW1ldGVyJylcbiAgICApO1xuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIG91dHB1dE1vZGVsLmNvbmZpZ3VyZSgndGVzdCcsIHtcbiAgICAgICAgJ3BoeXNpY2FsLXByb2Nlc3Nvcic6ICdJbnRlbCBYZW9uIEdvbGQgNjEzOGYnLFxuICAgICAgfSlcbiAgICApLnJlamVjdHMudG9UaHJvdyhcbiAgICAgIEVycm9yKCdJbXByb3BlciBjb25maWd1cmU6IE1pc3NpbmcgY29yZS11bml0cyBwYXJhbWV0ZXInKVxuICAgICk7XG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgb3V0cHV0TW9kZWwuY29uZmlndXJlKCd0ZXN0Jywge1xuICAgICAgICAncGh5c2ljYWwtcHJvY2Vzc29yJzogJ0ludGVsIFhlb24gR29sZCA2MTM4ZicsXG4gICAgICAgICdjb3JlLXVuaXRzJzogMjQsXG4gICAgICAgICdleHBlY3RlZC1saWZlc3Bhbic6IDQgKiAzNjUgKiAyNCAqIDYwICogNjAsXG4gICAgICB9KVxuICAgICkucmVzb2x2ZXMudG9CZUluc3RhbmNlT2YoQm9hdml6dGFDcHVPdXRwdXRNb2RlbCk7XG4gICAgZXhwZWN0KG91dHB1dE1vZGVsLm5hbWUpLnRvQmUoJ3Rlc3QnKTtcbiAgICAvLyBub3QgcHJvdmlkaW5nIGlucHV0cyB3aWxsIHRocm93IGEgbWlzc2luZyBpbnB1dHMgZXJyb3JcbiAgICBhd2FpdCBleHBlY3Qob3V0cHV0TW9kZWwuZXhlY3V0ZSgpKS5yZWplY3RzLnRvU3RyaWN0RXF1YWwoXG4gICAgICBFcnJvcihcbiAgICAgICAgJ1BhcmFtZXRlciBOb3QgR2l2ZW46IGludmFsaWQgaW5wdXRzIHBhcmFtZXRlci4gRXhwZWN0aW5nIGFuIGFycmF5IG9mIGlucHV0cydcbiAgICAgIClcbiAgICApO1xuICAgIC8vIGltcHJvcGVyIGlucHV0cyB3aWxsIHRocm93IGFuIGludmFsaWQgaW5wdXRzIGVycm9yXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgb3V0cHV0TW9kZWwuZXhlY3V0ZShbe2ludmFsaWQ6ICdpbnB1dCd9XSlcbiAgICApLnJlamVjdHMudG9TdHJpY3RFcXVhbChFcnJvcignSW52YWxpZCBJbnB1dDogSW52YWxpZCBpbnB1dHMgcGFyYW1ldGVyJykpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnY3B1OmluaXRpYWxpemUgd2l0aCBwYXJhbXMnLCAoKSA9PiB7XG4gIHRlc3QoJ2luaXRpYWxpemUgd2l0aCBwYXJhbXMgYW5kIGNhbGwgbXVsdGlwbGUgdXNhZ2VzIGluIElNUEwgZm9ybWF0JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG91dHB1dE1vZGVsID0gbmV3IEJvYXZpenRhQ3B1T3V0cHV0TW9kZWwoKTtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBvdXRwdXRNb2RlbC5jb25maWd1cmUoJ3Rlc3QnLCB7XG4gICAgICAgICdwaHlzaWNhbC1wcm9jZXNzb3InOiAnSW50ZWwgWGVvbiBHb2xkIDYxMzhmJyxcbiAgICAgICAgJ2NvcmUtdW5pdHMnOiAyNCxcbiAgICAgICAgbG9jYXRpb246ICdVU0EnLFxuICAgICAgfSlcbiAgICApLnJlc29sdmVzLnRvQmVJbnN0YW5jZU9mKEJvYXZpenRhQ3B1T3V0cHV0TW9kZWwpO1xuICAgIGV4cGVjdChvdXRwdXRNb2RlbC5uYW1lKS50b0JlKCd0ZXN0Jyk7XG4gICAgLy8gY29uZmlndXJlIHdpdGhvdXQgc3RhdGljIHBhcmFtcyB3aWxsIGNhdXNlIGltcHJvcGVyIGNvbmZpZ3VyZSBlcnJvclxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIG91dHB1dE1vZGVsLmV4ZWN1dGUoW1xuICAgICAgICB7XG4gICAgICAgICAgdGltZXN0YW1wOiAnMjAyMS0wMS0wMVQwMDowMDowMFonLFxuICAgICAgICAgIGR1cmF0aW9uOiAzNjAwLFxuICAgICAgICAgICdjcHUtdXRpbCc6IDUwLFxuICAgICAgICB9LFxuICAgICAgXSlcbiAgICApLnJlc29sdmVzLnRvU3RyaWN0RXF1YWwoW1xuICAgICAge1xuICAgICAgICAnZW1ib2RpZWQtY2FyYm9uJzogMC44LFxuICAgICAgICAnZS1jcHUnOiAwLjU3NSxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH0pO1xuICB0ZXN0KCdpbml0aWFsaXplIHdpdGggcGFyYW1zIGFuZCBjYWxsIG11bHRpcGxlIHVzYWdlcyBpbiBJTVBMIGZvcm1hdDp2ZXJib3NlJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG91dHB1dE1vZGVsID0gbmV3IEJvYXZpenRhQ3B1T3V0cHV0TW9kZWwoKTtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBvdXRwdXRNb2RlbC5jb25maWd1cmUoJ3Rlc3QnLCB7XG4gICAgICAgICdwaHlzaWNhbC1wcm9jZXNzb3InOiAnSW50ZWwgWGVvbiBHb2xkIDYxMzhmJyxcbiAgICAgICAgJ2NvcmUtdW5pdHMnOiAyNCxcbiAgICAgICAgbG9jYXRpb246ICdVU0EnLFxuICAgICAgICB2ZXJib3NlOiB0cnVlLFxuICAgICAgfSlcbiAgICApLnJlc29sdmVzLnRvQmVJbnN0YW5jZU9mKEJvYXZpenRhQ3B1T3V0cHV0TW9kZWwpO1xuICAgIGV4cGVjdChvdXRwdXRNb2RlbC5uYW1lKS50b0JlKCd0ZXN0Jyk7XG4gICAgLy8gY29uZmlndXJlIHdpdGhvdXQgc3RhdGljIHBhcmFtcyB3aWxsIGNhdXNlIGltcHJvcGVyIGNvbmZpZ3VyZSBlcnJvclxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIG91dHB1dE1vZGVsLmV4ZWN1dGUoW1xuICAgICAgICB7XG4gICAgICAgICAgdGltZXN0YW1wOiAnMjAyMS0wMS0wMVQwMDowMDowMFonLFxuICAgICAgICAgIGR1cmF0aW9uOiA3MjAwLFxuICAgICAgICAgICdjcHUtdXRpbCc6IDEwMCxcbiAgICAgICAgfSxcbiAgICAgIF0pXG4gICAgKS5yZXNvbHZlcy50b1N0cmljdEVxdWFsKFtcbiAgICAgIHtcbiAgICAgICAgJ2VtYm9kaWVkLWNhcmJvbic6IDEuNixcbiAgICAgICAgJ2UtY3B1JzogMS42NDA4MzMzMzMzMzMzMzM0LFxuICAgICAgfSxcbiAgICBdKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2Nsb3VkOmluaXRpYWxpemUgd2l0aCBwYXJhbXMnLCAoKSA9PiB7XG4gIHRlc3QoJ2luaXRpYWxpemUgd2l0aCBwYXJhbXMgYW5kIGNhbGwgdXNhZ2UgaW4gUkFXIEZvcm1hdCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvdXRwdXRNb2RlbCA9IG5ldyBCb2F2aXp0YUNsb3VkT3V0cHV0TW9kZWwoKTtcbiAgICBleHBlY3Qob3V0cHV0TW9kZWwubW9kZWxJZGVudGlmaWVyKCkpLnRvQmUoJ29yZy5ib2F2aXp0YS5jbG91ZC5zY2knKTtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBvdXRwdXRNb2RlbC52YWxpZGF0ZUxvY2F0aW9uKHtsb2NhdGlvbjogJ1NvbWV0aGluZ0ZhaWwnfSlcbiAgICApLnJlamVjdHMudG9UaHJvd0Vycm9yKCk7XG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgb3V0cHV0TW9kZWwudmFsaWRhdGVJbnN0YW5jZVR5cGUoeydpbnN0YW5jZS10eXBlJzogJ1NvbWV0aGluZ0ZhaWwnfSlcbiAgICApLnJlamVjdHMudG9UaHJvd0Vycm9yKCk7XG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgb3V0cHV0TW9kZWwudmFsaWRhdGVQcm92aWRlcih7cHJvdmlkZXI6ICdTb21ldGhpbmdGYWlsJ30pXG4gICAgKS5yZWplY3RzLnRvVGhyb3dFcnJvcigpO1xuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIG91dHB1dE1vZGVsLmNvbmZpZ3VyZSgndGVzdCcsIHtcbiAgICAgICAgJ2luc3RhbmNlLXR5cGUnOiAndDIubWljcm8nLFxuICAgICAgICBsb2NhdGlvbjogJ1VTQScsXG4gICAgICAgICdleHBlY3RlZC1saWZlc3Bhbic6IDQgKiAzNjUgKiAyNCAqIDYwICogNjAsXG4gICAgICAgIHByb3ZpZGVyOiAnYXdzJyxcbiAgICAgICAgdmVyYm9zZTogZmFsc2UsXG4gICAgICB9KVxuICAgICkucmVzb2x2ZXMudG9CZUluc3RhbmNlT2YoQm9hdml6dGFDbG91ZE91dHB1dE1vZGVsKTtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBvdXRwdXRNb2RlbC5jb25maWd1cmUoJ3Rlc3QnLCB7XG4gICAgICAgICdpbnN0YW5jZS10eXBlJzogJ3QyLm1pY3JvJyxcbiAgICAgICAgbG9jYXRpb246ICdVU0EnLFxuICAgICAgICAnZXhwZWN0ZWQtbGlmZXNwYW4nOiA0ICogMzY1ICogMjQgKiA2MCAqIDYwLFxuICAgICAgICBwcm92aWRlcjogJ2F3cycsXG4gICAgICAgIHZlcmJvc2U6ICdmYWxzZScsXG4gICAgICB9KVxuICAgICkucmVzb2x2ZXMudG9CZUluc3RhbmNlT2YoQm9hdml6dGFDbG91ZE91dHB1dE1vZGVsKTtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBvdXRwdXRNb2RlbC5jb25maWd1cmUoJ3Rlc3QnLCB7XG4gICAgICAgICdpbnN0YW5jZS10eXBlJzogJ3QyLm1pY3JvJyxcbiAgICAgICAgbG9jYXRpb246ICdVU0EnLFxuICAgICAgICAnZXhwZWN0ZWQtbGlmZXNwYW4nOiA0ICogMzY1ICogMjQgKiA2MCAqIDYwLFxuICAgICAgICBwcm92aWRlcjogJ2F3cycsXG4gICAgICAgIHZlcmJvc2U6IDAsXG4gICAgICB9KVxuICAgICkucmVzb2x2ZXMudG9CZUluc3RhbmNlT2YoQm9hdml6dGFDbG91ZE91dHB1dE1vZGVsKTtcbiAgICBleHBlY3Qob3V0cHV0TW9kZWwubmFtZSkudG9CZSgndGVzdCcpO1xuICAgIC8vIGNvbmZpZ3VyZSB3aXRob3V0IHN0YXRpYyBwYXJhbXMgd2lsbCBjYXVzZSBpbXByb3BlciBjb25maWd1cmUgZXJyb3JcbiAgfSk7XG5cbiAgdGVzdChcImNvcnJlY3QgJ2luc3RhbmNlLXR5cGUnOiBpbml0aWFsaXplIHdpdGggcGFyYW1zIGFuZCBjYWxsIHVzYWdlIGluIElNUEwgRm9ybWF0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvdXRwdXRNb2RlbCA9IG5ldyBCb2F2aXp0YUNsb3VkT3V0cHV0TW9kZWwoKTtcblxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIG91dHB1dE1vZGVsLmNvbmZpZ3VyZSgndGVzdCcsIHtcbiAgICAgICAgJ2luc3RhbmNlLXR5cGUnOiAndDIubWljcm8nLFxuICAgICAgICBsb2NhdGlvbjogJ1VTQScsXG4gICAgICB9KVxuICAgICkucmVqZWN0cy50b1Rocm93RXJyb3IoKTtcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBvdXRwdXRNb2RlbC5jb25maWd1cmUoJ3Rlc3QnLCB7XG4gICAgICAgIHByb3ZpZGVyOiAnYXdzJyxcbiAgICAgICAgbG9jYXRpb246ICdVU0EnLFxuICAgICAgfSlcbiAgICApLnJlamVjdHMudG9UaHJvd0Vycm9yKCk7XG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgb3V0cHV0TW9kZWwuY29uZmlndXJlKCd0ZXN0Jywge1xuICAgICAgICAnaW5zdGFuY2UtdHlwZSc6ICd0Mi5taWNybycsXG4gICAgICAgIGxvY2F0aW9uOiAnVVNBJyxcbiAgICAgICAgcHJvdmlkZXI6ICdhd3MnLFxuICAgICAgfSlcbiAgICApLnJlc29sdmVzLnRvQmVJbnN0YW5jZU9mKEJvYXZpenRhQ2xvdWRPdXRwdXRNb2RlbCk7XG4gICAgZXhwZWN0KG91dHB1dE1vZGVsLm5hbWUpLnRvQmUoJ3Rlc3QnKTtcbiAgICAvLyBtb2NrQXhpb3MuZ2V0Lm1vY2tSZXNvbHZlZFZhbHVlKHtkYXRhOiB7fX0pO1xuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIG91dHB1dE1vZGVsLmV4ZWN1dGUoW1xuICAgICAgICB7XG4gICAgICAgICAgdGltZXN0YW1wOiAnMjAyMS0wMS0wMVQwMDowMDowMFonLFxuICAgICAgICAgIGR1cmF0aW9uOiAxNSxcbiAgICAgICAgICAnY3B1LXV0aWwnOiAzNCxcbiAgICAgICAgfSxcbiAgICAgIF0pXG4gICAgKS5yZXNvbHZlcy50b1N0cmljdEVxdWFsKFtcbiAgICAgIHtcbiAgICAgICAgJ2VtYm9kaWVkLWNhcmJvbic6IDEuNixcbiAgICAgICAgZW5lcmd5OiAxLjY0MDgzMzMzMzMzMzMzMzQsXG4gICAgICB9LFxuICAgIF0pO1xuICB9KTtcblxuICB0ZXN0KCd3cm9uZyBcImluc3RhbmNlLXR5cGVcIjogaW5pdGlhbGl6ZSB3aXRoIHBhcmFtcyBhbmQgY2FsbCB1c2FnZSBpbiBJTVBMIEZvcm1hdCB0aHJvd3MgZXJyb3InLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0TW9kZWwgPSBuZXcgQm9hdml6dGFDbG91ZE91dHB1dE1vZGVsKCk7XG5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBvdXRwdXRNb2RlbC5jb25maWd1cmUoJ3Rlc3QnLCB7XG4gICAgICAgICdpbnN0YW5jZS10eXBlJzogJ3Q1Lm1pY3JvJyxcbiAgICAgICAgbG9jYXRpb246ICdVU0EnLFxuICAgICAgICBwcm92aWRlcjogJ2F3cycsXG4gICAgICB9KVxuICAgICkucmVqZWN0cy50b1Rocm93RXJyb3IoKTtcbiAgICBleHBlY3Qob3V0cHV0TW9kZWwubmFtZSkudG9CZSgndGVzdCcpO1xuICAgIC8vIGNvbmZpZ3VyZSB3aXRob3V0IHN0YXRpYyBwYXJhbXMgd2lsbCBjYXVzZSBpbXByb3BlciBjb25maWd1cmUgZXJyb3JcbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBvdXRwdXRNb2RlbC5leGVjdXRlKFtcbiAgICAgICAge1xuICAgICAgICAgIHRpbWVzdGFtcDogJzIwMjEtMDEtMDFUMDA6MDA6MDBaJyxcbiAgICAgICAgICBkdXJhdGlvbjogMTUsXG4gICAgICAgICAgJ2NwdS11dGlsJzogMzQsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0aW1lc3RhbXA6ICcyMDIxLTAxLTAxVDAwOjAwOjE1WicsXG4gICAgICAgICAgZHVyYXRpb246IDE1LFxuICAgICAgICAgICdjcHUtdXRpbCc6IDEyLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGltZXN0YW1wOiAnMjAyMS0wMS0wMVQwMDowMDozMFonLFxuICAgICAgICAgIGR1cmF0aW9uOiAxNSxcbiAgICAgICAgICAnY3B1LXV0aWwnOiAxLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGltZXN0YW1wOiAnMjAyMS0wMS0wMVQwMDowMDo0NVonLFxuICAgICAgICAgIGR1cmF0aW9uOiAxNSxcbiAgICAgICAgICAnY3B1LXV0aWwnOiA3OCxcbiAgICAgICAgfSxcbiAgICAgIF0pXG4gICAgKS5yZWplY3RzLnRvVGhyb3dFcnJvcigpO1xuICB9KTtcblxuICB0ZXN0KCd3aXRob3V0IFwiaW5zdGFuY2UtdHlwZVwiOiBpbml0aWFsaXplIHdpdGggcGFyYW1zIGFuZCBjYWxsIHVzYWdlIGluIElNUEwgRm9ybWF0IHRocm93cyBlcnJvcicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvdXRwdXRNb2RlbCA9IG5ldyBCb2F2aXp0YUNsb3VkT3V0cHV0TW9kZWwoKTtcblxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIG91dHB1dE1vZGVsLmNvbmZpZ3VyZSgndGVzdCcsIHtcbiAgICAgICAgbG9jYXRpb246ICdVU0EnLFxuICAgICAgICBwcm92aWRlcjogJ2F3cycsXG4gICAgICB9KVxuICAgICkucmVqZWN0cy50b1N0cmljdEVxdWFsKFxuICAgICAgRXJyb3IoXCJJbXByb3BlciBjb25maWd1cmU6IE1pc3NpbmcgJ2luc3RhbmNlLXR5cGUnIHBhcmFtZXRlclwiKVxuICAgICk7XG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgb3V0cHV0TW9kZWwuY29uZmlndXJlKCd0ZXN0Jywge1xuICAgICAgICBsb2NhdGlvbjogJ1VTQUYnLFxuICAgICAgICBwcm92aWRlcjogJ2F3cycsXG4gICAgICAgICdpbnN0YW5jZS10eXBlJzogJ3QyLm1pY3JvJyxcbiAgICAgIH0pXG4gICAgKS5yZWplY3RzLnRvVGhyb3dFcnJvcigpO1xuICAgIGV4cGVjdChvdXRwdXRNb2RlbC5uYW1lKS50b0JlKCd0ZXN0Jyk7XG4gICAgLy8gY29uZmlndXJlIHdpdGhvdXQgc3RhdGljIHBhcmFtcyB3aWxsIGNhdXNlIGltcHJvcGVyIGNvbmZpZ3VyZSBlcnJvclxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIG91dHB1dE1vZGVsLmV4ZWN1dGUoW1xuICAgICAgICB7XG4gICAgICAgICAgdGltZXN0YW1wOiAnMjAyMS0wMS0wMVQwMDowMDowMFonLFxuICAgICAgICAgIGR1cmF0aW9uOiAxNSxcbiAgICAgICAgICAnY3B1LXV0aWwnOiAzNCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRpbWVzdGFtcDogJzIwMjEtMDEtMDFUMDA6MDA6MTVaJyxcbiAgICAgICAgICBkdXJhdGlvbjogMTUsXG4gICAgICAgICAgJ2NwdS11dGlsJzogMTIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0aW1lc3RhbXA6ICcyMDIxLTAxLTAxVDAwOjAwOjMwWicsXG4gICAgICAgICAgZHVyYXRpb246IDE1LFxuICAgICAgICAgICdjcHUtdXRpbCc6IDEsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0aW1lc3RhbXA6ICcyMDIxLTAxLTAxVDAwOjAwOjQ1WicsXG4gICAgICAgICAgZHVyYXRpb246IDE1LFxuICAgICAgICAgICdjcHUtdXRpbCc6IDc4LFxuICAgICAgICB9LFxuICAgICAgXSlcbiAgICApLnJlamVjdHMudG9TdHJpY3RFcXVhbChcbiAgICAgIEVycm9yKCdJbXByb3BlciBjb25maWd1cmU6IE1pc3NpbmcgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzJylcbiAgICApO1xuICB9KTtcbn0pO1xuIl19
|