@grnsft/if 0.0.5 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/.examples/ompls/azure.yml +205 -0
  2. package/.github/workflows/nodejs-ci.yml +0 -8
  3. package/README.md +48 -9
  4. package/build/config/config.d.ts +0 -23
  5. package/build/config/config.js +1 -24
  6. package/build/index.js +3 -4
  7. package/build/lib/models-universe.js +95 -0
  8. package/build/lib/observatory.js +31 -0
  9. package/build/lib/supercomputer.js +109 -0
  10. package/examples/impls/test/azure.yml +8 -8
  11. package/examples/impls/test/ccf.yml +5 -3
  12. package/examples/impls/test/if-demo.yml +19 -9
  13. package/examples/impls/test/metadata.yml +3 -2
  14. package/examples/impls/test/nesting.yml +10 -13
  15. package/examples/impls/test/sci-e.yml +1 -1
  16. package/examples/impls/test/sci-m.yml +2 -2
  17. package/examples/impls/test/sci-o.yml +2 -4
  18. package/examples/impls/test/sci.yml +1 -2
  19. package/examples/impls/test/shell.yml +2 -1
  20. package/examples/impls/{tdp-finder-test.yml → test/tdp-finder.yml} +8 -8
  21. package/examples/ompls/ccf.yml +3 -1
  22. package/examples/ompls/if-demo.yml +46 -22
  23. package/package.json +12 -5
  24. package/tsconfig.build.json +7 -0
  25. package/tsconfig.build.tsbuildinfo +1 -0
  26. package/build/__mocks__/azure/index.d.ts +0 -11
  27. package/build/__mocks__/azure/index.js +0 -132
  28. package/build/__mocks__/boavizta/countries.json +0 -138
  29. package/build/__mocks__/boavizta/instance_types.json +0 -625
  30. package/build/__mocks__/boavizta/providers.json +0 -1
  31. package/build/__mocks__/fs/index.d.ts +0 -3
  32. package/build/__mocks__/fs/index.js +0 -56
  33. package/build/__mocks__/model-universe/index.d.ts +0 -31
  34. package/build/__mocks__/model-universe/index.js +0 -64
  35. package/build/__mocks__/watt-time/data.json +0 -119
  36. package/build/__tests__/integration/ompl/index.test.d.ts +0 -1
  37. package/build/__tests__/integration/ompl/index.test.js +0 -61
  38. package/build/__tests__/unit/lib/azure-importer/index.test.d.ts +0 -1
  39. package/build/__tests__/unit/lib/azure-importer/index.test.js +0 -152
  40. package/build/__tests__/unit/lib/boavizta/index.test.d.ts +0 -1
  41. package/build/__tests__/unit/lib/boavizta/index.test.js +0 -579
  42. package/build/__tests__/unit/lib/case-studies/aveva.test.d.ts +0 -1
  43. package/build/__tests__/unit/lib/case-studies/aveva.test.js +0 -36
  44. package/build/__tests__/unit/lib/case-studies/emem.test.d.ts +0 -1
  45. package/build/__tests__/unit/lib/case-studies/emem.test.js +0 -108
  46. package/build/__tests__/unit/lib/case-studies/eshoppen.test.d.ts +0 -1
  47. package/build/__tests__/unit/lib/case-studies/eshoppen.test.js +0 -53
  48. package/build/__tests__/unit/lib/case-studies/sci-accenture.test.d.ts +0 -1
  49. package/build/__tests__/unit/lib/case-studies/sci-accenture.test.js +0 -23
  50. package/build/__tests__/unit/lib/ccf/index.test.d.ts +0 -1
  51. package/build/__tests__/unit/lib/ccf/index.test.js +0 -223
  52. package/build/__tests__/unit/lib/cloud-instance-metadata/index.test.d.ts +0 -1
  53. package/build/__tests__/unit/lib/cloud-instance-metadata/index.test.js +0 -73
  54. package/build/__tests__/unit/lib/sci/index.test.d.ts +0 -1
  55. package/build/__tests__/unit/lib/sci/index.test.js +0 -106
  56. package/build/__tests__/unit/lib/sci-e/index.test.d.ts +0 -1
  57. package/build/__tests__/unit/lib/sci-e/index.test.js +0 -30
  58. package/build/__tests__/unit/lib/sci-m/index.test.d.ts +0 -1
  59. package/build/__tests__/unit/lib/sci-m/index.test.js +0 -58
  60. package/build/__tests__/unit/lib/sci-o/index.test.d.ts +0 -1
  61. package/build/__tests__/unit/lib/sci-o/index.test.js +0 -42
  62. package/build/__tests__/unit/lib/shell-imp/index.test.d.ts +0 -1
  63. package/build/__tests__/unit/lib/shell-imp/index.test.js +0 -21
  64. package/build/__tests__/unit/lib/tdp-finder/index.test.d.ts +0 -1
  65. package/build/__tests__/unit/lib/tdp-finder/index.test.js +0 -62
  66. package/build/__tests__/unit/lib/teads-aws/index.test.d.ts +0 -1
  67. package/build/__tests__/unit/lib/teads-aws/index.test.js +0 -170
  68. package/build/__tests__/unit/lib/teads-curve/index.test.d.ts +0 -1
  69. package/build/__tests__/unit/lib/teads-curve/index.test.js +0 -146
  70. package/build/__tests__/unit/lib/watt-time/index.test.d.ts +0 -1
  71. package/build/__tests__/unit/lib/watt-time/index.test.js +0 -106
  72. package/build/__tests__/unit/util/args.test.d.ts +0 -1
  73. package/build/__tests__/unit/util/args.test.js +0 -92
  74. package/build/__tests__/unit/util/models-universe.test.d.ts +0 -1
  75. package/build/__tests__/unit/util/models-universe.test.js +0 -193
  76. package/build/__tests__/unit/util/observatory.test.d.ts +0 -1
  77. package/build/__tests__/unit/util/observatory.test.js +0 -99
  78. package/build/__tests__/unit/util/supercomputer.test.d.ts +0 -1
  79. package/build/__tests__/unit/util/supercomputer.test.js +0 -231
  80. package/build/__tests__/unit/util/yaml.test.d.ts +0 -1
  81. package/build/__tests__/unit/util/yaml.test.js +0 -59
  82. package/build/lib/azure-importer/index.d.ts +0 -55
  83. package/build/lib/azure-importer/index.js +0 -314
  84. package/build/lib/boavizta/index.d.ts +0 -53
  85. package/build/lib/boavizta/index.js +0 -254
  86. package/build/lib/case-studies/aveva-model.d.ts +0 -29
  87. package/build/lib/case-studies/aveva-model.js +0 -53
  88. package/build/lib/case-studies/emem-model.d.ts +0 -42
  89. package/build/lib/case-studies/emem-model.js +0 -93
  90. package/build/lib/case-studies/eshoppen-model.d.ts +0 -24
  91. package/build/lib/case-studies/eshoppen-model.js +0 -123
  92. package/build/lib/case-studies/index.d.ts +0 -4
  93. package/build/lib/case-studies/index.js +0 -21
  94. package/build/lib/case-studies/sci-accenture-model.d.ts +0 -10
  95. package/build/lib/case-studies/sci-accenture-model.js +0 -37
  96. package/build/lib/ccf/aws-embodied.json +0 -5591
  97. package/build/lib/ccf/aws-instances.json +0 -21116
  98. package/build/lib/ccf/aws-use.json +0 -79
  99. package/build/lib/ccf/azure-embodied.json +0 -6547
  100. package/build/lib/ccf/azure-instances.json +0 -8332
  101. package/build/lib/ccf/azure-use.json +0 -58
  102. package/build/lib/ccf/gcp-embodied.json +0 -3049
  103. package/build/lib/ccf/gcp-instances.json +0 -3880
  104. package/build/lib/ccf/gcp-use.json +0 -58
  105. package/build/lib/ccf/index.d.ts +0 -63
  106. package/build/lib/ccf/index.js +0 -338
  107. package/build/lib/cloud-instance-metadata/aws-instances.json +0 -1
  108. package/build/lib/cloud-instance-metadata/azure-instances.json +0 -1
  109. package/build/lib/cloud-instance-metadata/index.d.ts +0 -15
  110. package/build/lib/cloud-instance-metadata/index.js +0 -104
  111. package/build/lib/index.d.ts +0 -14
  112. package/build/lib/index.js +0 -32
  113. package/build/lib/interfaces/ccf.d.ts +0 -19
  114. package/build/lib/interfaces/ccf.js +0 -3
  115. package/build/lib/interfaces/index.d.ts +0 -7
  116. package/build/lib/interfaces/index.js +0 -18
  117. package/build/lib/sci/index.d.ts +0 -13
  118. package/build/lib/sci/index.js +0 -131
  119. package/build/lib/sci-e/index.d.ts +0 -38
  120. package/build/lib/sci-e/index.js +0 -85
  121. package/build/lib/sci-m/index.d.ts +0 -10
  122. package/build/lib/sci-m/index.js +0 -124
  123. package/build/lib/sci-o/index.d.ts +0 -17
  124. package/build/lib/sci-o/index.js +0 -52
  125. package/build/lib/shell-imp/index.d.ts +0 -32
  126. package/build/lib/shell-imp/index.js +0 -82
  127. package/build/lib/tdp-finder/index.d.ts +0 -19
  128. package/build/lib/tdp-finder/index.js +0 -98
  129. package/build/lib/teads-aws/aws-embodied.json +0 -1
  130. package/build/lib/teads-aws/aws-instances.json +0 -1
  131. package/build/lib/teads-aws/index.d.ts +0 -58
  132. package/build/lib/teads-aws/index.js +0 -208
  133. package/build/lib/teads-curve/index.d.ts +0 -52
  134. package/build/lib/teads-curve/index.js +0 -158
  135. package/build/lib/watt-time/index.d.ts +0 -18
  136. package/build/lib/watt-time/index.js +0 -204
  137. package/build/util/models-universe.js +0 -95
  138. package/build/util/observatory.js +0 -31
  139. package/build/util/supercomputer.js +0 -109
  140. package/docs/implementations/tdp-finder.md +0 -36
  141. package/examples/impls/test/complex-pipeline.yml +0 -67
  142. package/examples/impls/test/toto.yaml +0 -22
  143. package/tsconfig.tsbuildinfo +0 -1
  144. /package/build/{util → lib}/models-universe.d.ts +0 -0
  145. /package/build/{util → lib}/observatory.d.ts +0 -0
  146. /package/build/{util → lib}/supercomputer.d.ts +0 -0
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Supercomputer = void 0;
4
+ const observatory_1 = require("./observatory");
5
+ const errors_1 = require("../util/errors");
6
+ const config_1 = require("../config");
7
+ const { ImplValidationError } = errors_1.ERRORS;
8
+ const { STRUCTURE_MALFORMED } = config_1.STRINGS;
9
+ /**
10
+ * Computer for `impl` documents.
11
+ */
12
+ class Supercomputer {
13
+ constructor(impl, modelsHandbook) {
14
+ this.olderChild = { name: '', info: {} };
15
+ this.impl = impl;
16
+ this.modelsHandbook = modelsHandbook;
17
+ }
18
+ /**
19
+ * Flattens config entries.
20
+ */
21
+ flattenConfigValues(config) {
22
+ if (!config) {
23
+ return {};
24
+ }
25
+ const configModelNames = Object.keys(config);
26
+ const values = configModelNames.reduce((acc, name) => {
27
+ acc = {
28
+ ...acc,
29
+ ...config[name],
30
+ };
31
+ return acc;
32
+ }, {});
33
+ return values;
34
+ }
35
+ /**
36
+ * Adds config entries to each obsercation object passed.
37
+ */
38
+ enrichInputs(inputs, config, nestedConfig) {
39
+ const configValues = this.flattenConfigValues(config);
40
+ const nestedConfigValues = this.flattenConfigValues(nestedConfig);
41
+ return inputs.map((input) => ({
42
+ ...input,
43
+ ...configValues,
44
+ ...nestedConfigValues,
45
+ }));
46
+ }
47
+ /**
48
+ * If child is top level, then initializes `this.olderChild`.
49
+ * If `children` object contains `children` property, it means inputs are nested (calls compute again).
50
+ * Otherwise enriches inputs, passes them to Observatory.
51
+ * For each model from pipeline Observatory gathers inputs. Then results are stored.
52
+ */
53
+ async calculateOutputsForChild(childrenObject, params) {
54
+ const { childName, areChildrenNested } = params;
55
+ if (!areChildrenNested) {
56
+ this.olderChild = {
57
+ name: childName,
58
+ info: this.impl.graph.children[childName],
59
+ };
60
+ }
61
+ const { pipeline, inputs, config } = this.olderChild.info;
62
+ if ('children' in childrenObject[childName]) {
63
+ return this.compute(childrenObject[childName].children);
64
+ }
65
+ if (!('inputs' in childrenObject[childName])) {
66
+ throw new ImplValidationError(STRUCTURE_MALFORMED(childName));
67
+ }
68
+ const specificInputs = areChildrenNested
69
+ ? childrenObject[childName].inputs
70
+ : inputs;
71
+ const childrenConfig = childrenObject[childName].config || {};
72
+ const enrichedInputs = this.enrichInputs(specificInputs, config, childrenConfig);
73
+ const observatory = new observatory_1.Observatory(enrichedInputs);
74
+ for (const modelName of pipeline) {
75
+ const params = config && config[modelName];
76
+ const modelInstance = await this.modelsHandbook.getInitializedModel(modelName, params);
77
+ await observatory.doInvestigationsWith(modelInstance);
78
+ }
79
+ const outputs = observatory.getOutputs();
80
+ if (areChildrenNested) {
81
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
82
+ // @ts-ignore
83
+ this.impl.graph.children[this.olderChild.name].children[childName].outputs = observatory.getOutputs();
84
+ return;
85
+ }
86
+ this.impl.graph.children[this.olderChild.name].outputs = outputs;
87
+ return;
88
+ }
89
+ /**
90
+ * Checks if object is top level children or nested, then runs through all children and calculates outputs.
91
+ */
92
+ async compute(childrenObject) {
93
+ const implOrChildren = childrenObject || this.impl;
94
+ const areChildrenNested = !!childrenObject;
95
+ const children = areChildrenNested
96
+ ? implOrChildren
97
+ : implOrChildren.graph.children;
98
+ const childrenNames = Object.keys(children);
99
+ for (const childName of childrenNames) {
100
+ await this.calculateOutputsForChild(children, {
101
+ childName,
102
+ areChildrenNested,
103
+ });
104
+ }
105
+ return this.impl;
106
+ }
107
+ }
108
+ exports.Supercomputer = Supercomputer;
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwZXJjb21wdXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvc3VwZXJjb21wdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwrQ0FBMEM7QUFFMUMsMkNBQXNDO0FBRXRDLHNDQUFrQztBQUtsQyxNQUFNLEVBQUMsbUJBQW1CLEVBQUMsR0FBRyxlQUFNLENBQUM7QUFFckMsTUFBTSxFQUFDLG1CQUFtQixFQUFDLEdBQUcsZ0JBQU8sQ0FBQztBQUV0Qzs7R0FFRztBQUNILE1BQWEsYUFBYTtJQUt4QixZQUFZLElBQVUsRUFBRSxjQUE4QjtRQUo5QyxlQUFVLEdBQXFCLEVBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFDLENBQUM7UUFLMUQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssbUJBQW1CLENBQUMsTUFBYztRQUN4QyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QyxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFRLEVBQUUsSUFBWSxFQUFFLEVBQUU7WUFDaEUsR0FBRyxHQUFHO2dCQUNKLEdBQUcsR0FBRztnQkFDTixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7YUFDaEIsQ0FBQztZQUVGLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRVAsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssWUFBWSxDQUNsQixNQUFxQixFQUNyQixNQUFjLEVBQ2QsWUFBb0I7UUFFcEIsTUFBTSxZQUFZLEdBQUcs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QUFJLENBQUMsSUFBSSxDQUFDO1FBQ25ELE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDLGNBQWMsQ0FBQztRQUMzQyxNQUFNLFFBQVEsR0FBYSxpQkFBaUI7WUFDMUMsQ0FBQyxDQUFDLGNBQWM7WUFDaEIsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ2xDLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFNUMsS0FBSyxNQUFNLFNBQVMsSUFBSSxhQUFhLEVBQUU7WUFDckMsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxFQUFFO2dCQUM1QyxTQUFTO2dCQUNULGlCQUFpQjthQUNsQixDQUFDLENBQUM7U0FDSjtRQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0NBQ0Y7QUExSUQsc0NBMElDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtNb2RlbHNVbml2ZXJzZX0gZnJvbSAnLi9tb2RlbHMtdW5pdmVyc2UnO1xuaW1wb3J0IHtPYnNlcnZhdG9yeX0gZnJvbSAnLi9vYnNlcnZhdG9yeSc7XG5cbmltcG9ydCB7RVJST1JTfSBmcm9tICcuLi91dGlsL2Vycm9ycyc7XG5cbmltcG9ydCB7U1RSSU5HU30gZnJvbSAnLi4vY29uZmlnJztcblxuaW1wb3J0IHtDaGlsZEluZm9ybWF0aW9ufSBmcm9tICcuLi90eXBlcy9zdXBlcmNvbXB1dGVyJztcbmltcG9ydCB7Q2hpbGRyZW4sIENvbmZpZywgSW1wbCwgTW9kZWxQYXJhbXN9IGZyb20gJy4uL3R5cGVzL2ltcGwnO1xuXG5jb25zdCB7SW1wbFZhbGlkYXRpb25FcnJvcn0gPSBFUlJPUlM7XG5cbmNvbnN0IHtTVFJVQ1RVUkVfTUFMRk9STUVEfSA9IFNUUklOR1M7XG5cbi8qKlxuICogQ29tcHV0ZXIgZm9yIGBpbXBsYCBkb2N1bWVudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdXBlcmNvbXB1dGVyIHtcbiAgcHJpdmF0ZSBvbGRlckNoaWxkOiBDaGlsZEluZm9ybWF0aW9uID0ge25hbWU6ICcnLCBpbmZvOiB7fX07XG4gIHByaXZhdGUgaW1wbDogSW1wbDtcbiAgcHJpdmF0ZSBtb2RlbHNIYW5kYm9vazogTW9kZWxzVW5pdmVyc2U7XG5cbiAgY29uc3RydWN0b3IoaW1wbDogSW1wbCwgbW9kZWxzSGFuZGJvb2s6IE1vZGVsc1VuaXZlcnNlKSB7XG4gICAgdGhpcy5pbXBsID0gaW1wbDtcbiAgICB0aGlzLm1vZGVsc0hhbmRib29rID0gbW9kZWxzSGFuZGJvb2s7XG4gIH1cblxuICAvKipcbiAgICogRmxhdHRlbnMgY29uZmlnIGVudHJpZXMuXG4gICAqL1xuICBwcml2YXRlIGZsYXR0ZW5Db25maWdWYWx1ZXMoY29uZmlnOiBDb25maWcpIHtcbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZ01vZGVsTmFtZXMgPSBPYmplY3Qua2V5cyhjb25maWcpO1xuICAgIGNvbnN0IHZhbHVlcyA9IGNvbmZpZ01vZGVsTmFtZXMucmVkdWNlKChhY2M6IGFueSwgbmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBhY2MgPSB7XG4gICAgICAgIC4uLmFjYyxcbiAgICAgICAgLi4uY29uZmlnW25hbWVdLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG5cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgY29uZmlnIGVudHJpZXMgdG8gZWFjaCBvYnNlcmNhdGlvbiBvYmplY3QgcGFzc2VkLlxuICAgKi9cbiAgcHJpdmF0ZSBlbnJpY2hJbnB1dHMoXG4gICAgaW5wdXRzOiBNb2RlbFBhcmFtc1tdLFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIG5lc3RlZENvbmZpZzogQ29uZmlnXG4gICkge1xuICAgIGNvbnN0IGNvbmZpZ1ZhbHVlcyA9IHRoaXMuZmxhdHRlbkNvbmZpZ1ZhbHVlcyhjb25maWcpO1xuICAgIGNvbnN0IG5lc3RlZENvbmZpZ1ZhbHVlcyA9IHRoaXMuZmxhdHRlbkNvbmZpZ1ZhbHVlcyhuZXN0ZWRDb25maWcpO1xuXG4gICAgcmV0dXJuIGlucHV0cy5tYXAoKGlucHV0OiBhbnkpID0+ICh7XG4gICAgICAuLi5pbnB1dCxcbiAgICAgIC4uLmNvbmZpZ1ZhbHVlcyxcbiAgICAgIC4uLm5lc3RlZENvbmZpZ1ZhbHVlcyxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogSWYgY2hpbGQgaXMgdG9wIGxldmVsLCB0aGVuIGluaXRpYWxpemVzIGB0aGlzLm9sZGVyQ2hpbGRgLlxuICAgKiBJZiBgY2hpbGRyZW5gIG9iamVjdCBjb250YWlucyBgY2hpbGRyZW5gIHByb3BlcnR5LCBpdCBtZWFucyBpbnB1dHMgYXJlIG5lc3RlZCAoY2FsbHMgY29tcHV0ZSBhZ2FpbikuXG4gICAqIE90aGVyd2lzZSBlbnJpY2hlcyBpbnB1dHMsIHBhc3NlcyB0aGVtIHRvIE9ic2VydmF0b3J5LlxuICAgKiBGb3IgZWFjaCBtb2RlbCBmcm9tIHBpcGVsaW5lIE9ic2VydmF0b3J5IGdhdGhlcnMgaW5wdXRzLiBUaGVuIHJlc3VsdHMgYXJlIHN0b3JlZC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY2FsY3VsYXRlT3V0cHV0c0ZvckNoaWxkKFxuICAgIGNoaWxkcmVuT2JqZWN0OiBDaGlsZHJlbixcbiAgICBwYXJhbXM6IGFueVxuICApIHtcbiAgICBjb25zdCB7Y2hpbGROYW1lLCBhcmVDaGlsZHJlbk5lc3RlZH0gPSBwYXJhbXM7XG5cbiAgICBpZiAoIWFyZUNoaWxkcmVuTmVzdGVkKSB7XG4gICAgICB0aGlzLm9sZGVyQ2hpbGQgPSB7XG4gICAgICAgIG5hbWU6IGNoaWxkTmFtZSxcbiAgICAgICAgaW5mbzogdGhpcy5pbXBsLmdyYXBoLmNoaWxkcmVuW2NoaWxkTmFtZV0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHtwaXBlbGluZSwgaW5wdXRzLCBjb25maWd9ID0gdGhpcy5vbGRlckNoaWxkLmluZm87XG5cbiAgICBpZiAoJ2NoaWxkcmVuJyBpbiBjaGlsZHJlbk9iamVjdFtjaGlsZE5hbWVdKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb21wdXRlKGNoaWxkcmVuT2JqZWN0W2NoaWxkTmFtZV0uY2hpbGRyZW4pO1xuICAgIH1cblxuICAgIGlmICghKCdpbnB1dHMnIGluIGNoaWxkcmVuT2JqZWN0W2NoaWxkTmFtZV0pKSB7XG4gICAgICB0aHJvdyBuZXcgSW1wbFZhbGlkYXRpb25FcnJvcihTVFJVQ1RVUkVfTUFMRk9STUVEKGNoaWxkTmFtZSkpO1xuICAgIH1cblxuICAgIGNvbnN0IHNwZWNpZmljSW5wdXRzID0gYXJlQ2hpbGRyZW5OZXN0ZWRcbiAgICAgID8gY2hpbGRyZW5PYmplY3RbY2hpbGROYW1lXS5pbnB1dHNcbiAgICAgIDogaW5wdXRzO1xuXG4gICAgY29uc3QgY2hpbGRyZW5Db25maWcgPSBjaGlsZHJlbk9iamVjdFtjaGlsZE5hbWVdLmNvbmZpZyB8fCB7fTtcblxuICAgIGNvbnN0IGVucmljaGVkSW5wdXRzID0gdGhpcy5lbnJpY2hJbnB1dHMoXG4gICAgICBzcGVjaWZpY0lucHV0cyxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNoaWxkcmVuQ29uZmlnXG4gICAgKTtcblxuICAgIGNvbnN0IG9ic2VydmF0b3J5ID0gbmV3IE9ic2VydmF0b3J5KGVucmljaGVkSW5wdXRzKTtcblxuICAgIGZvciAoY29uc3QgbW9kZWxOYW1lIG9mIHBpcGVsaW5lKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSBjb25maWcgJiYgY29uZmlnW21vZGVsTmFtZV07XG4gICAgICBjb25zdCBtb2RlbEluc3RhbmNlID0gYXdhaXQgdGhpcy5tb2RlbHNIYW5kYm9vay5nZXRJbml0aWFsaXplZE1vZGVsKFxuICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgIHBhcmFtc1xuICAgICAgKTtcblxuICAgICAgYXdhaXQgb2JzZXJ2YXRvcnkuZG9JbnZlc3RpZ2F0aW9uc1dpdGgobW9kZWxJbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0cyA9IG9ic2VydmF0b3J5LmdldE91dHB1dHMoKTtcblxuICAgIGlmIChhcmVDaGlsZHJlbk5lc3RlZCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5pbXBsLmdyYXBoLmNoaWxkcmVuW3RoaXMub2xkZXJDaGlsZC5uYW1lXS5jaGlsZHJlbltcbiAgICAgICAgY2hpbGROYW1lXG4gICAgICBdLm91dHB1dHMgPSBvYnNlcnZhdG9yeS5nZXRPdXRwdXRzKCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmltcGwuZ3JhcGguY2hpbGRyZW5bdGhpcy5vbGRlckNoaWxkLm5hbWVdLm91dHB1dHMgPSBvdXRwdXRzO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgb2JqZWN0IGlzIHRvcCBsZXZlbCBjaGlsZHJlbiBvciBuZXN0ZWQsIHRoZW4gcnVucyB0aHJvdWdoIGFsbCBjaGlsZHJlbiBhbmQgY2FsY3VsYXRlcyBvdXRwdXRzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNvbXB1dGUoY2hpbGRyZW5PYmplY3Q/OiBhbnkpIHtcbiAgICBjb25zdCBpbXBsT3JDaGlsZHJlbiA9IGNoaWxkcmVuT2JqZWN0IHx8IHRoaXMuaW1wbDtcbiAgICBjb25zdCBhcmVDaGlsZHJlbk5lc3RlZCA9ICEhY2hpbGRyZW5PYmplY3Q7XG4gICAgY29uc3QgY2hpbGRyZW46IENoaWxkcmVuID0gYXJlQ2hpbGRyZW5OZXN0ZWRcbiAgICAgID8gaW1wbE9yQ2hpbGRyZW5cbiAgICAgIDogaW1wbE9yQ2hpbGRyZW4uZ3JhcGguY2hpbGRyZW47XG4gICAgY29uc3QgY2hpbGRyZW5OYW1lcyA9IE9iamVjdC5rZXlzKGNoaWxkcmVuKTtcblxuICAgIGZvciAoY29uc3QgY2hpbGROYW1lIG9mIGNoaWxkcmVuTmFtZXMpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2FsY3VsYXRlT3V0cHV0c0ZvckNoaWxkKGNoaWxkcmVuLCB7XG4gICAgICAgIGNoaWxkTmFtZSxcbiAgICAgICAgYXJlQ2hpbGRyZW5OZXN0ZWQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pbXBsO1xuICB9XG59XG4iXX0=
@@ -4,7 +4,7 @@ tags:
4
4
  initialize:
5
5
  models:
6
6
  - name: azure-importer
7
- path: if-models
7
+ path: "@grnsft/if-unofficial-models"
8
8
  model: AzureImporterModel
9
9
  kind: plugin
10
10
  graph:
@@ -15,12 +15,12 @@ graph:
15
15
  config:
16
16
  azure-importer:
17
17
  inputs:
18
- - timestamp: '2023-11-02T10:35:31.820Z'
19
- duration: 3600
20
- azure-observation-window: 5 min # value and unit must be space separated
21
- azure-observation-aggregation: 'average'
22
- azure-subscription-id: 9de7e19f-8a18-4e73-9451-45fc74e7d0d3
23
- azure-resource-group: vm1_group
24
- azure-vm-name: vm1
18
+ - timestamp: '2023-11-02T10:35:31.820Z'
19
+ duration: 3600
20
+ azure-observation-window: 5 min # value and unit must be space separated
21
+ azure-observation-aggregation: 'average'
22
+ azure-subscription-id: 9de7e19f-8a18-4e73-9451-45fc74e7d0d3
23
+ azure-resource-group: vm1_group
24
+ azure-vm-name: vm1
25
25
 
26
26
 
@@ -1,9 +1,11 @@
1
1
  name: ccf-demo
2
2
  description: example impl invoking CCF model
3
+ tags:
3
4
  initialize:
4
5
  models:
5
6
  - name: ccf
6
- kind: builtin
7
+ model: CloudCarbonFootprint
8
+ path: "@grnsft/if-unofficial-models"
7
9
  graph:
8
10
  children:
9
11
  child:
@@ -11,8 +13,8 @@ graph:
11
13
  - ccf
12
14
  config:
13
15
  ccf:
14
- vendor: aws
15
- instance-type: m5n.large
16
+ vendor: 'aws'
17
+ instance-type: 'm5n.large'
16
18
  inputs:
17
19
  - timestamp: 2023-07-06T00:00 # [KEYWORD] [NO-SUBFIELDS] time when measurement occurred
18
20
  duration: 1
@@ -4,21 +4,29 @@ tags:
4
4
  initialize:
5
5
  models:
6
6
  - name: azure-importer
7
- kind: builtin
7
+ model: AzureImporterModel
8
+ path: "@grnsft/if-unofficial-models"
8
9
  - name: cloud-instance-metadata
9
- kind: builtin
10
+ model: CloudInstanceMetadataModel
11
+ path: "@grnsft/if-models"
10
12
  - name: teads-curve
11
- kind: builtin
13
+ model: TeadsCurveModel
14
+ path: "@grnsft/if-unofficial-models"
12
15
  - name: sci-e
13
- kind: builtin
16
+ model: SciEModel
17
+ path: "@grnsft/if-models"
14
18
  - name: sci-o
15
- kind: builtin
19
+ model: SciOModel
20
+ path: "@grnsft/if-models"
16
21
  - name: sci-e
17
- kind: builtin
22
+ model: SciEModel
23
+ path: "@grnsft/if-models"
18
24
  - name: sci-m
19
- kind: builtin
25
+ model: SciMModel
26
+ path: "@grnsft/if-models"
20
27
  - name: sci
21
- kind: builtin
28
+ model: SciModel
29
+ path: "@grnsft/if-models"
22
30
  graph:
23
31
  children:
24
32
  child:
@@ -31,6 +39,8 @@ graph:
31
39
  - sci-m
32
40
  - sci
33
41
  config:
42
+ sci-o:
43
+ grid-carbon-intensity: 951
34
44
  sci:
35
45
  functional-unit: ''
36
46
  functional-unit-time: hour
@@ -43,9 +53,9 @@ graph:
43
53
  azure-subscription-id: 9de7e19f-8a18-4e73-9451-45fc74e7d0d3
44
54
  azure-resource-group: vm1_group
45
55
  azure-vm-name: vm1
46
- grid-carbon-intensity: 951
47
56
  total-embodied-emissions: 1533.12
48
57
  time-reserved: 300
49
58
  expected-lifespan: 94348800 # 3 yrs in seconds
50
59
  resources-reserved: 1
51
60
  total-resources: 64
61
+
@@ -1,10 +1,11 @@
1
- name: sci-m
1
+ name: cloud-instance-metadata
2
2
  description: simple demo invoking metadata lookup
3
3
  tags: null
4
4
  initialize:
5
5
  models:
6
6
  - name: cloud-instance-metadata
7
- kind: builtin
7
+ model: CloudInstanceMetadataModel
8
+ path: "@grnsft/if-models"
8
9
  graph:
9
10
  children:
10
11
  child:
@@ -7,23 +7,20 @@ tags:
7
7
  initialize:
8
8
  models:
9
9
  - name: teads-curve
10
- kind: builtin
10
+ model: TeadsCurveModel
11
+ path: "@grnsft/if-unofficial-models"
11
12
  - name: sci-e
12
- kind: builtin
13
- verbose: false
14
- path: ''
13
+ model: SciEModel
14
+ path: "@grnsft/if-models"
15
15
  - name: sci-m
16
- kind: builtin
17
- verbose: false
18
- path: ''
16
+ path: "@grnsft/if-models"
17
+ model: SciMModel
19
18
  - name: sci-o
20
- kind: builtin
21
- verbose: false
22
- path: ''
19
+ model: SciOModel
20
+ path: "@grnsft/if-models"
23
21
  - name: sci
24
- kind: builtin
25
- verbose: false
26
- path: ''
22
+ model: SciModel
23
+ path: "@grnsft/if-models"
27
24
  graph:
28
25
  children:
29
26
  child: # an advanced grouping node
@@ -7,7 +7,7 @@ initialize:
7
7
  kind: plugin
8
8
  verbose: false
9
9
  model: SciEModel
10
- path: if-models
10
+ path: "@grnsft/if-models"
11
11
  graph:
12
12
  children:
13
13
  child:
@@ -4,9 +4,9 @@ tags:
4
4
  initialize:
5
5
  models:
6
6
  - name: sci-m # a model that calculates m from te, tir, el, rr and rtor
7
- kind: builtin
7
+ model: SciMModel
8
8
  verbose: false
9
- path: ''
9
+ path: "@grnsft/if-models"
10
10
  graph:
11
11
  children:
12
12
  child:
@@ -5,14 +5,12 @@ initialize:
5
5
  models:
6
6
  - name: sci-e
7
7
  kind: plugin
8
- verbose: false
9
8
  model: SciEModel
10
- path: if-models
9
+ path: "@grnsft/if-models"
11
10
  - name: sci-o
12
- kind: plugin
13
11
  verbose: false
14
12
  model: SciOModel
15
- path: if-models
13
+ path: "@grnsft/if-models"
16
14
  graph:
17
15
  children:
18
16
  child:
@@ -5,9 +5,8 @@ initialize:
5
5
  models:
6
6
  - name: sci
7
7
  kind: plugin
8
- verbose: false
9
8
  model: SciModel
10
- path: if-models
9
+ path: "@grnsft/if-models"
11
10
  graph:
12
11
  children:
13
12
  child:
@@ -4,7 +4,8 @@ tags:
4
4
  initialize:
5
5
  models:
6
6
  - name: sampler
7
- kind: shell
7
+ model: ShellModel
8
+ path: "@grnsft/if-models"
8
9
  graph:
9
10
  children:
10
11
  child:
@@ -1,19 +1,19 @@
1
- name: tdp-tester
1
+ name: tdp-finder
2
+ description: demo
3
+ tags:
2
4
  initialize:
3
5
  models:
4
6
  - name: tdp-finder # a model that returns an embodied value given the sci embodied attribution equation.
5
- kind: builtin
6
- verbose: false
7
- path: ''
7
+ model: TdpFinderModel
8
+ path: "@grnsft/if-models"
8
9
  graph:
9
10
  children:
10
- backend:
11
+ child:
11
12
  pipeline:
12
13
  - tdp-finder
13
14
  config:
14
- tdp-finder:
15
- tdp:
16
- observations:
15
+ inputs:
17
16
  - timestamp: 2023-07-06T00:00
17
+ duration: 300
18
18
  physical-processor: AMD 3020e
19
19
 
@@ -1,9 +1,11 @@
1
1
  name: ccf-demo
2
2
  description: example impl invoking CCF model
3
+ tags:
3
4
  initialize:
4
5
  models:
5
6
  - name: ccf
6
- kind: builtin
7
+ model: CloudCarbonMetadataModel
8
+ path: if-models
7
9
  graph:
8
10
  children:
9
11
  child: