@grnsft/if 0.1.9 → 0.2.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 (176) hide show
  1. package/.commitlintrc.js +45 -0
  2. package/.husky/commit-msg +4 -0
  3. package/.husky/pre-commit +6 -0
  4. package/CONTRIBUTING.md +81 -98
  5. package/README.md +16 -12
  6. package/build/config/config.d.ts +4 -3
  7. package/build/config/config.js +11 -10
  8. package/build/config/params.js +17 -17
  9. package/build/config/strings.d.ts +9 -8
  10. package/build/config/strings.js +13 -12
  11. package/build/index.js +19 -69
  12. package/build/lib/aggregate.d.ts +6 -0
  13. package/build/lib/aggregate.js +72 -0
  14. package/build/lib/compute.d.ts +5 -0
  15. package/build/lib/compute.js +84 -0
  16. package/build/lib/exhaust.d.ts +6 -0
  17. package/build/lib/exhaust.js +47 -0
  18. package/build/lib/initialize.d.ts +6 -0
  19. package/build/lib/initialize.js +98 -0
  20. package/build/lib/load.d.ts +6 -0
  21. package/build/lib/load.js +24 -0
  22. package/build/lib/parameterize.d.ts +5 -0
  23. package/build/lib/parameterize.js +49 -0
  24. package/build/models/export-csv.d.ts +2 -0
  25. package/build/models/export-csv.js +129 -0
  26. package/build/models/export-log.d.ts +4 -0
  27. package/build/models/export-log.js +18 -0
  28. package/build/models/export-yaml.d.ts +4 -0
  29. package/build/models/export-yaml.js +24 -0
  30. package/build/models/group-by.d.ts +11 -0
  31. package/build/models/group-by.js +56 -0
  32. package/build/models/index.d.ts +2 -1
  33. package/build/models/index.js +5 -3
  34. package/build/models/time-sync.d.ts +2 -57
  35. package/build/models/time-sync.js +204 -158
  36. package/build/types/aggregation.js +5 -0
  37. package/build/types/compute.d.ts +25 -0
  38. package/build/types/compute.js +3 -0
  39. package/build/types/exhaust-plugin-interface.d.ts +7 -0
  40. package/build/types/exhaust-plugin-interface.js +3 -0
  41. package/build/types/group-by.d.ts +3 -0
  42. package/build/types/group-by.js +3 -0
  43. package/build/types/initialize.d.ts +4 -0
  44. package/build/types/initialize.js +3 -0
  45. package/build/types/interface.d.ts +8 -0
  46. package/build/types/interface.js +3 -0
  47. package/build/types/load.d.ts +7 -0
  48. package/build/types/load.js +3 -0
  49. package/build/types/manifest.d.ts +40 -0
  50. package/build/types/manifest.js +3 -0
  51. package/build/types/parameters.d.ts +4 -5
  52. package/build/types/parameters.js +1 -1
  53. package/build/types/process-args.d.ts +3 -5
  54. package/build/types/process-args.js +1 -1
  55. package/build/types/time-sync.d.ts +9 -2
  56. package/build/types/time-sync.js +1 -1
  57. package/build/util/aggregation-helper.d.ts +6 -0
  58. package/build/util/aggregation-helper.js +56 -0
  59. package/build/util/args.d.ts +6 -3
  60. package/build/util/args.js +21 -17
  61. package/build/util/errors.d.ts +1 -1
  62. package/build/util/errors.js +8 -4
  63. package/build/util/helpers.d.ts +4 -0
  64. package/build/util/helpers.js +23 -4
  65. package/build/util/json.d.ts +4 -0
  66. package/build/util/json.js +16 -0
  67. package/build/util/logger.d.ts +5 -0
  68. package/build/util/logger.js +40 -0
  69. package/build/util/validations.d.ts +22 -19
  70. package/build/util/validations.js +41 -34
  71. package/examples/{impls/test → manifests}/azure-importer.yml +8 -8
  72. package/examples/manifests/basic-demo.yml +75 -0
  73. package/examples/manifests/basic.yml +27 -0
  74. package/examples/manifests/boavizta-pipeline.yml +85 -0
  75. package/examples/{impls/test → manifests}/boavizta.yml +11 -12
  76. package/examples/{impls/test → manifests}/ccf.yml +9 -10
  77. package/examples/manifests/cim.yml +20 -0
  78. package/examples/manifests/cloud-metadata.yml +41 -0
  79. package/examples/manifests/co2js.yml +30 -0
  80. package/examples/manifests/coefficient.yml +23 -0
  81. package/examples/manifests/csv-export.yml +34 -0
  82. package/examples/manifests/e-mem.yml +21 -0
  83. package/examples/{impls/test → manifests}/e-net.yml +9 -8
  84. package/examples/manifests/generics.yml +71 -0
  85. package/examples/manifests/group-by.yml +48 -0
  86. package/examples/manifests/mock-observation.yml +33 -0
  87. package/examples/manifests/multiply.yml +23 -0
  88. package/examples/manifests/nesting-demo.yml +89 -0
  89. package/examples/manifests/nesting.yml +215 -0
  90. package/examples/manifests/pipeline-demo-1.yml +85 -0
  91. package/examples/manifests/pipeline-demo-2.yml +149 -0
  92. package/examples/manifests/pipeline-demo.yml +128 -0
  93. package/examples/manifests/pipeline-teads-sci.yml +82 -0
  94. package/examples/manifests/pipeline-with-generics.yml +147 -0
  95. package/examples/manifests/pipeline-with-mocks.yml +146 -0
  96. package/examples/{impls/test → manifests}/sci-e.yml +6 -8
  97. package/examples/manifests/sci-m.yml +23 -0
  98. package/examples/{impls/test → manifests}/sci-o.yml +10 -10
  99. package/examples/{impls/test → manifests}/sci.yml +10 -9
  100. package/examples/manifests/shell.yml +20 -0
  101. package/examples/manifests/sum.yml +23 -0
  102. package/examples/{impls/test → manifests}/tdp-finder.yml +6 -7
  103. package/examples/manifests/teads-aws.yml +22 -0
  104. package/examples/manifests/teads-curve.yml +20 -0
  105. package/examples/manifests/time-sync.yml +32 -0
  106. package/examples/manifests/watt-time.yml +42 -0
  107. package/jest.config.js +6 -1
  108. package/package.json +13 -8
  109. package/src/__tests__/integration/templates/integration.yaml +16 -0
  110. package/src/models/README.md +6 -6
  111. package/tsconfig.test.json +1 -1
  112. package/Makefile +0 -16
  113. package/build/lib/aggregator.d.ts +0 -7
  114. package/build/lib/aggregator.js +0 -46
  115. package/build/lib/models-universe.d.ts +0 -40
  116. package/build/lib/models-universe.js +0 -145
  117. package/build/lib/observatory.d.ts +0 -20
  118. package/build/lib/observatory.js +0 -31
  119. package/build/lib/supercomputer.d.ts +0 -39
  120. package/build/lib/supercomputer.js +0 -116
  121. package/build/types/aggregator.js +0 -5
  122. package/build/types/impl.d.ts +0 -92
  123. package/build/types/impl.js +0 -19
  124. package/build/types/model-interface.d.ts +0 -13
  125. package/build/types/model-interface.js +0 -3
  126. package/build/types/models-universe.d.ts +0 -20
  127. package/build/types/models-universe.js +0 -3
  128. package/build/types/supercomputer.d.ts +0 -4
  129. package/build/types/supercomputer.js +0 -3
  130. package/build/util/param-selectors.d.ts +0 -5
  131. package/build/util/param-selectors.js +0 -14
  132. package/examples/impls/case-studies/accenture.yml +0 -155
  133. package/examples/impls/case-studies/aggregation.yml +0 -97
  134. package/examples/impls/case-studies/aveva.yaml +0 -48
  135. package/examples/impls/case-studies/azure-yassine.yaml +0 -67
  136. package/examples/impls/case-studies/boavizta.yml +0 -26
  137. package/examples/impls/case-studies/dow_msft.yml +0 -173
  138. package/examples/impls/case-studies/farm-insights.yaml +0 -35
  139. package/examples/impls/case-studies/gsf-website.yaml +0 -93
  140. package/examples/impls/case-studies/msft-eshoppen.yaml +0 -162
  141. package/examples/impls/case-studies/msft-green-ai.yaml +0 -58
  142. package/examples/impls/case-studies/ntt-data-on-premise.yaml +0 -201
  143. package/examples/impls/test/aggregation-test.yml +0 -109
  144. package/examples/impls/test/aggregation-test2.yml +0 -52
  145. package/examples/impls/test/cim.yml +0 -19
  146. package/examples/impls/test/e-mem.yml +0 -19
  147. package/examples/impls/test/if-demo.yml +0 -59
  148. package/examples/impls/test/large-impl.yml +0 -257303
  149. package/examples/impls/test/metadata.yml +0 -21
  150. package/examples/impls/test/nesting.yml +0 -113
  151. package/examples/impls/test/new-params-test.yml +0 -35
  152. package/examples/impls/test/sci-m.yml +0 -24
  153. package/examples/impls/test/shell.yml +0 -19
  154. package/examples/impls/test/teads-cpu.yml +0 -18
  155. package/examples/impls/test/time-sync-avoid-padding.yml +0 -50
  156. package/examples/impls/test/time-sync.yml +0 -76
  157. package/examples/ompls/aggregation-test.yml +0 -340
  158. package/examples/ompls/aggregation-test2.yml +0 -83
  159. package/examples/ompls/azure-importer.yml +0 -145
  160. package/examples/ompls/boavizta.yml +0 -32
  161. package/examples/ompls/ccf.yml +0 -29
  162. package/examples/ompls/cim.yml +0 -29
  163. package/examples/ompls/complex-pipeline.yml +0 -105
  164. package/examples/ompls/e-mem.yml +0 -26
  165. package/examples/ompls/full-sci.yml +0 -64
  166. package/examples/ompls/if-demo.yml +0 -517
  167. package/examples/ompls/metadata.yml +0 -29
  168. package/examples/ompls/nesting.yml +0 -113
  169. package/examples/ompls/sci-e.yml +0 -23
  170. package/examples/ompls/sci-m.yml +0 -33
  171. package/examples/ompls/sci-o.yml +0 -29
  172. package/examples/ompls/sci.yml +0 -37
  173. package/examples/ompls/shell.yml +0 -23
  174. package/examples/ompls/teads-cpu.yml +0 -24
  175. package/examples/ompls/time-sync.yml +0 -212
  176. /package/build/types/{aggregator.d.ts → aggregation.d.ts} +0 -0
@@ -1,22 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateImpl = void 0;
3
+ exports.validate = exports.validateManifest = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const errors_1 = require("./errors");
6
- const aggregator_1 = require("../types/aggregator");
6
+ const aggregation_1 = require("../types/aggregation");
7
7
  const parameters_1 = require("../types/parameters");
8
- const { ImplValidationError } = errors_1.ERRORS;
8
+ const { ManifestValidationError, InputValidationError } = errors_1.ERRORS;
9
9
  /**
10
- * Validation schema for impl files.
10
+ * Validation schema for manifests.
11
11
  */
12
- const implValidation = zod_1.z.object({
12
+ const manifestValidation = zod_1.z.object({
13
13
  name: zod_1.z.string(),
14
14
  'if-version': zod_1.z.string().optional().nullable(),
15
- description: zod_1.z.string().nullable(),
15
+ description: zod_1.z.string().nullable().default(''),
16
16
  aggregation: zod_1.z
17
17
  .object({
18
18
  metrics: zod_1.z.array(zod_1.z.string()),
19
- type: zod_1.z.enum(aggregator_1.AGGREGATION_METHODS),
19
+ type: zod_1.z.enum(aggregation_1.AGGREGATION_METHODS),
20
20
  })
21
21
  .optional(),
22
22
  params: zod_1.z
@@ -34,39 +34,46 @@ const implValidation = zod_1.z.object({
34
34
  complexity: zod_1.z.string().optional(),
35
35
  category: zod_1.z.string().optional(),
36
36
  })
37
- .nullable(),
37
+ .nullable()
38
+ .default({}),
38
39
  initialize: zod_1.z.object({
39
- models: zod_1.z.array(zod_1.z.object({
40
- name: zod_1.z.string(),
40
+ plugins: zod_1.z.record(zod_1.z.string(), zod_1.z.object({
41
41
  path: zod_1.z.string(),
42
- model: zod_1.z.string(),
43
- config: zod_1.z.record(zod_1.z.string(), zod_1.z.any()).optional(),
42
+ method: zod_1.z.string(),
43
+ 'global-config': zod_1.z.record(zod_1.z.string(), zod_1.z.any()).optional(),
44
44
  })),
45
+ outputs: zod_1.z.array(zod_1.z.string()).optional(),
45
46
  }),
46
- graph: zod_1.z
47
- .object({
48
- children: zod_1.z.record(zod_1.z.string(), zod_1.z.any()),
49
- })
50
- .required(),
47
+ tree: zod_1.z.record(zod_1.z.string(), zod_1.z.any()),
51
48
  });
52
49
  /**
53
- * Validates given `impl` object to match pattern.
50
+ * Validates given `manifest` object to match pattern.
54
51
  */
55
- const validateImpl = (impl) => {
56
- const validatedImpl = implValidation.safeParse(impl);
57
- if (!validatedImpl.success) {
58
- const prettifyErrorMessage = (issues) => {
59
- const issuesArray = JSON.parse(issues);
60
- return issuesArray.map((issue) => {
61
- const { code, path, message } = issue;
62
- const flattenPath = path.map(part => typeof part === 'number' ? `[${part}]` : part);
63
- const fullPath = flattenPath.join('.');
64
- return `"${fullPath}" parameter is ${message.toLowerCase()}. Error code: ${code}.`;
65
- });
66
- };
67
- throw new ImplValidationError(prettifyErrorMessage(validatedImpl.error.message));
52
+ const validateManifest = (manifest) => {
53
+ return (0, exports.validate)(manifestValidation, manifest, ManifestValidationError);
54
+ };
55
+ exports.validateManifest = validateManifest;
56
+ /**
57
+ * Validates given `object` with given `schema`.
58
+ */
59
+ const validate = (schema, object, errorConstructor = InputValidationError) => {
60
+ const validationResult = schema.safeParse(object);
61
+ if (!validationResult.success) {
62
+ throw new errorConstructor(prettifyErrorMessage(validationResult.error.message));
68
63
  }
69
- return validatedImpl.data;
64
+ return validationResult.data;
65
+ };
66
+ exports.validate = validate;
67
+ const prettifyErrorMessage = (issues) => {
68
+ const issuesArray = JSON.parse(issues);
69
+ return issuesArray.map((issue) => {
70
+ const { code, path, message } = issue;
71
+ const flattenPath = path.map(part => typeof part === 'number' ? `[${part}]` : part);
72
+ const fullPath = flattenPath.join('.');
73
+ if (code === 'custom') {
74
+ return `${message.toLowerCase()}. Error code: ${code}.`;
75
+ }
76
+ return `"${fullPath}" parameter is ${message.toLowerCase()}. Error code: ${code}.`;
77
+ });
70
78
  };
71
- exports.validateImpl = validateImpl;
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC92YWxpZGF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBZ0M7QUFFaEMscUNBQWdDO0FBRWhDLG9EQUF3RDtBQUN4RCxvREFBc0Q7QUFHdEQsTUFBTSxFQUFDLG1CQUFtQixFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRXJDOztHQUVHO0FBQ0gsTUFBTSxjQUFjLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM5QixJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNoQixZQUFZLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM5QyxXQUFXLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNsQyxXQUFXLEVBQUUsT0FBQztTQUNYLE1BQU0sQ0FBQztRQUNOLE9BQU8sRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM1QixJQUFJLEVBQUUsT0FBQyxDQUFDLElBQUksQ0FBQyxnQ0FBbUIsQ0FBQztLQUNsQyxDQUFDO1NBQ0QsUUFBUSxFQUFFO0lBQ2IsTUFBTSxFQUFFLE9BQUM7U0FDTixLQUFLLENBQ0osT0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNQLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1FBQ2hCLFdBQVcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1FBQ3ZCLFdBQVcsRUFBRSxPQUFDLENBQUMsSUFBSSxDQUFDLDhCQUFpQixDQUFDO1FBQ3RDLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0tBQ2pCLENBQUMsQ0FDSDtTQUNBLFFBQVEsRUFBRTtTQUNWLFFBQVEsRUFBRTtJQUNiLElBQUksRUFBRSxPQUFDO1NBQ0osTUFBTSxDQUFDO1FBQ04sSUFBSSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7UUFDM0IsVUFBVSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7UUFDakMsUUFBUSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7S0FDaEMsQ0FBQztTQUNELFFBQVEsRUFBRTtJQUNiLFVBQVUsRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDO1FBQ25CLE1BQU0sRUFBRSxPQUFDLENBQUMsS0FBSyxDQUNiLE9BQUMsQ0FBQyxNQUFNLENBQUM7WUFDUCxJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtZQUNoQixJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtZQUNoQixLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtZQUNqQixNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO1NBQ2pELENBQUMsQ0FDSDtLQUNGLENBQUM7SUFDRixLQUFLLEVBQUUsT0FBQztTQUNMLE1BQU0sQ0FBQztRQUNOLFFBQVEsRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDeEMsQ0FBQztTQUNELFFBQVEsRUFBRTtDQUNkLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ0ksTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFVLEVBQUUsRUFBRTtJQUN6QyxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXJELElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFO1FBQzFCLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRTtZQUM5QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRXZDLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQWUsRUFBRSxFQUFFO2dCQUN6QyxNQUFNLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQ3BDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDbEMsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzlDLENBQUM7Z0JBQ0YsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFdkMsT0FBTyxJQUFJLFFBQVEsa0JBQWtCLE9BQU8sQ0FBQyxXQUFXLEVBQUUsaUJBQWlCLElBQUksR0FBRyxDQUFDO1lBQ3JGLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBRUYsTUFBTSxJQUFJLG1CQUFtQixDQUMzQixvQkFBb0IsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUNsRCxDQUFDO0tBQ0g7SUFFRCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUM7QUFDNUIsQ0FBQyxDQUFDO0FBeEJXLFFBQUEsWUFBWSxnQkF3QnZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtab2RJc3N1ZSwgen0gZnJvbSAnem9kJztcblxuaW1wb3J0IHtFUlJPUlN9IGZyb20gJy4vZXJyb3JzJztcblxuaW1wb3J0IHtBR0dSRUdBVElPTl9NRVRIT0RTfSBmcm9tICcuLi90eXBlcy9hZ2dyZWdhdG9yJztcbmltcG9ydCB7QUdHUkVHQVRJT05fVFlQRVN9IGZyb20gJy4uL3R5cGVzL3BhcmFtZXRlcnMnO1xuaW1wb3J0IHtJbXBsfSBmcm9tICcuLi90eXBlcy9pbXBsJztcblxuY29uc3Qge0ltcGxWYWxpZGF0aW9uRXJyb3J9ID0gRVJST1JTO1xuXG4vKipcbiAqIFZhbGlkYXRpb24gc2NoZW1hIGZvciBpbXBsIGZpbGVzLlxuICovXG5jb25zdCBpbXBsVmFsaWRhdGlvbiA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgJ2lmLXZlcnNpb24nOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgYWdncmVnYXRpb246IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIG1ldHJpY3M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgICB0eXBlOiB6LmVudW0oQUdHUkVHQVRJT05fTUVUSE9EUyksXG4gICAgfSlcbiAgICAub3B0aW9uYWwoKSxcbiAgcGFyYW1zOiB6XG4gICAgLmFycmF5KFxuICAgICAgei5vYmplY3Qoe1xuICAgICAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgICAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKSxcbiAgICAgICAgYWdncmVnYXRpb246IHouZW51bShBR0dSRUdBVElPTl9UWVBFUyksXG4gICAgICAgIHVuaXQ6IHouc3RyaW5nKCksXG4gICAgICB9KVxuICAgIClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5udWxsYWJsZSgpLFxuICB0YWdzOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBraW5kOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBjb21wbGV4aXR5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBjYXRlZ29yeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIH0pXG4gICAgLm51bGxhYmxlKCksXG4gIGluaXRpYWxpemU6IHoub2JqZWN0KHtcbiAgICBtb2RlbHM6IHouYXJyYXkoXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgICAgIHBhdGg6IHouc3RyaW5nKCksXG4gICAgICAgIG1vZGVsOiB6LnN0cmluZygpLFxuICAgICAgICBjb25maWc6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKCksXG4gICAgICB9KVxuICAgICksXG4gIH0pLFxuICBncmFwaDogelxuICAgIC5vYmplY3Qoe1xuICAgICAgY2hpbGRyZW46IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICAgIH0pXG4gICAgLnJlcXVpcmVkKCksXG59KTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgZ2l2ZW4gYGltcGxgIG9iamVjdCB0byBtYXRjaCBwYXR0ZXJuLlxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVJbXBsID0gKGltcGw6IEltcGwpID0+IHtcbiAgY29uc3QgdmFsaWRhdGVkSW1wbCA9IGltcGxWYWxpZGF0aW9uLnNhZmVQYXJzZShpbXBsKTtcblxuICBpZiAoIXZhbGlkYXRlZEltcGwuc3VjY2Vzcykge1xuICAgIGNvbnN0IHByZXR0aWZ5RXJyb3JNZXNzYWdlID0gKGlzc3Vlczogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBpc3N1ZXNBcnJheSA9IEpTT04ucGFyc2UoaXNzdWVzKTtcblxuICAgICAgcmV0dXJuIGlzc3Vlc0FycmF5Lm1hcCgoaXNzdWU6IFpvZElzc3VlKSA9PiB7XG4gICAgICAgIGNvbnN0IHtjb2RlLCBwYXRoLCBtZXNzYWdlfSA9IGlzc3VlO1xuICAgICAgICBjb25zdCBmbGF0dGVuUGF0aCA9IHBhdGgubWFwKHBhcnQgPT5cbiAgICAgICAgICB0eXBlb2YgcGFydCA9PT0gJ251bWJlcicgPyBgWyR7cGFydH1dYCA6IHBhcnRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSBmbGF0dGVuUGF0aC5qb2luKCcuJyk7XG5cbiAgICAgICAgcmV0dXJuIGBcIiR7ZnVsbFBhdGh9XCIgcGFyYW1ldGVyIGlzICR7bWVzc2FnZS50b0xvd2VyQ2FzZSgpfS4gRXJyb3IgY29kZTogJHtjb2RlfS5gO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRocm93IG5ldyBJbXBsVmFsaWRhdGlvbkVycm9yKFxuICAgICAgcHJldHRpZnlFcnJvck1lc3NhZ2UodmFsaWRhdGVkSW1wbC5lcnJvci5tZXNzYWdlKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVkSW1wbC5kYXRhO1xufTtcbiJdfQ==
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC92YWxpZGF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBMkM7QUFFM0MscUNBQWdDO0FBRWhDLHNEQUF5RDtBQUN6RCxvREFBc0Q7QUFHdEQsTUFBTSxFQUFDLHVCQUF1QixFQUFFLG9CQUFvQixFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRS9EOztHQUVHO0FBQ0gsTUFBTSxrQkFBa0IsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2xDLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2hCLFlBQVksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzlDLFdBQVcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUM5QyxXQUFXLEVBQUUsT0FBQztTQUNYLE1BQU0sQ0FBQztRQUNOLE9BQU8sRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM1QixJQUFJLEVBQUUsT0FBQyxDQUFDLElBQUksQ0FBQyxpQ0FBbUIsQ0FBQztLQUNsQyxDQUFDO1NBQ0QsUUFBUSxFQUFFO0lBQ2IsTUFBTSxFQUFFLE9BQUM7U0FDTixLQUFLLENBQ0osT0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNQLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1FBQ2hCLFdBQVcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1FBQ3ZCLFdBQVcsRUFBRSxPQUFDLENBQUMsSUFBSSxDQUFDLDhCQUFpQixDQUFDO1FBQ3RDLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0tBQ2pCLENBQUMsQ0FDSDtTQUNBLFFBQVEsRUFBRTtTQUNWLFFBQVEsRUFBRTtJQUNiLElBQUksRUFB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LENBQUM7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1pvZElzc3VlLCBab2RTY2hlbWEsIHp9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7RVJST1JTfSBmcm9tICcuL2Vycm9ycyc7XG5cbmltcG9ydCB7QUdHUkVHQVRJT05fTUVUSE9EU30gZnJvbSAnLi4vdHlwZXMvYWdncmVnYXRpb24nO1xuaW1wb3J0IHtBR0dSRUdBVElPTl9UWVBFU30gZnJvbSAnLi4vdHlwZXMvcGFyYW1ldGVycyc7XG5pbXBvcnQge01hbmlmZXN0fSBmcm9tICcuLi90eXBlcy9tYW5pZmVzdCc7XG5cbmNvbnN0IHtNYW5pZmVzdFZhbGlkYXRpb25FcnJvciwgSW5wdXRWYWxpZGF0aW9uRXJyb3J9ID0gRVJST1JTO1xuXG4vKipcbiAqIFZhbGlkYXRpb24gc2NoZW1hIGZvciBtYW5pZmVzdHMuXG4gKi9cbmNvbnN0IG1hbmlmZXN0VmFsaWRhdGlvbiA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgJ2lmLXZlcnNpb24nOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkubnVsbGFibGUoKS5kZWZhdWx0KCcnKSxcbiAgYWdncmVnYXRpb246IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIG1ldHJpY3M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgICB0eXBlOiB6LmVudW0oQUdHUkVHQVRJT05fTUVUSE9EUyksXG4gICAgfSlcbiAgICAub3B0aW9uYWwoKSxcbiAgcGFyYW1zOiB6XG4gICAgLmFycmF5KFxuICAgICAgei5vYmplY3Qoe1xuICAgICAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgICAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKSxcbiAgICAgICAgYWdncmVnYXRpb246IHouZW51bShBR0dSRUdBVElPTl9UWVBFUyksXG4gICAgICAgIHVuaXQ6IHouc3RyaW5nKCksXG4gICAgICB9KVxuICAgIClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5udWxsYWJsZSgpLFxuICB0YWdzOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBraW5kOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBjb21wbGV4aXR5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBjYXRlZ29yeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIH0pXG4gICAgLm51bGxhYmxlKClcbiAgICAuZGVmYXVsdCh7fSksXG4gIGluaXRpYWxpemU6IHoub2JqZWN0KHtcbiAgICBwbHVnaW5zOiB6LnJlY29yZChcbiAgICAgIHouc3RyaW5nKCksXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIHBhdGg6IHouc3RyaW5nKCksXG4gICAgICAgIG1ldGhvZDogei5zdHJpbmcoKSxcbiAgICAgICAgJ2dsb2JhbC1jb25maWcnOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgfSlcbiAgICApLFxuICAgIG91dHB1dHM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgfSksXG4gIHRyZWU6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxufSk7XG5cbi8qKlxuICogVmFsaWRhdGVzIGdpdmVuIGBtYW5pZmVzdGAgb2JqZWN0IHRvIG1hdGNoIHBhdHRlcm4uXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZU1hbmlmZXN0ID0gKG1hbmlmZXN0OiBNYW5pZmVzdCkgPT4ge1xuICByZXR1cm4gdmFsaWRhdGUobWFuaWZlc3RWYWxpZGF0aW9uLCBtYW5pZmVzdCwgTWFuaWZlc3RWYWxpZGF0aW9uRXJyb3IpO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgZ2l2ZW4gYG9iamVjdGAgd2l0aCBnaXZlbiBgc2NoZW1hYC5cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlID0gPFQ+KFxuICBzY2hlbWE6IFpvZFNjaGVtYTxUPixcbiAgb2JqZWN0OiBhbnksXG4gIGVycm9yQ29uc3RydWN0b3I6IEVycm9yQ29uc3RydWN0b3IgPSBJbnB1dFZhbGlkYXRpb25FcnJvclxuKSA9PiB7XG4gIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBzY2hlbWEuc2FmZVBhcnNlKG9iamVjdCk7XG5cbiAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JDb25zdHJ1Y3RvcihcbiAgICAgIHByZXR0aWZ5RXJyb3JNZXNzYWdlKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IubWVzc2FnZSlcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRpb25SZXN1bHQuZGF0YTtcbn07XG5cbmNvbnN0IHByZXR0aWZ5RXJyb3JNZXNzYWdlID0gKGlzc3Vlczogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGlzc3Vlc0FycmF5ID0gSlNPTi5wYXJzZShpc3N1ZXMpO1xuXG4gIHJldHVybiBpc3N1ZXNBcnJheS5tYXAoKGlzc3VlOiBab2RJc3N1ZSkgPT4ge1xuICAgIGNvbnN0IHtjb2RlLCBwYXRoLCBtZXNzYWdlfSA9IGlzc3VlO1xuICAgIGNvbnN0IGZsYXR0ZW5QYXRoID0gcGF0aC5tYXAocGFydCA9PlxuICAgICAgdHlwZW9mIHBhcnQgPT09ICdudW1iZXInID8gYFske3BhcnR9XWAgOiBwYXJ0XG4gICAgKTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGZsYXR0ZW5QYXRoLmpvaW4oJy4nKTtcblxuICAgIGlmIChjb2RlID09PSAnY3VzdG9tJykge1xuICAgICAgcmV0dXJuIGAke21lc3NhZ2UudG9Mb3dlckNhc2UoKX0uIEVycm9yIGNvZGU6ICR7Y29kZX0uYDtcbiAgICB9XG4gICAgcmV0dXJuIGBcIiR7ZnVsbFBhdGh9XCIgcGFyYW1ldGVyIGlzICR7bWVzc2FnZS50b0xvd2VyQ2FzZSgpfS4gRXJyb3IgY29kZTogJHtjb2RlfS5gO1xuICB9KTtcbn07XG4iXX0=
@@ -2,23 +2,23 @@ name: azure-importer
2
2
  description: example impl invoking Azure Importer model
3
3
  tags:
4
4
  initialize:
5
- models:
6
- - name: azure-importer
7
- path: "@grnsft/if-unofficial-models"
8
- model: AzureImporterModel
5
+ plugins:
6
+ azure-importer:
7
+ path: "@grnsft/if-unofficial-plugins"
8
+ method: AzureImporter
9
9
  kind: plugin
10
- graph:
10
+ tree:
11
11
  children:
12
12
  child:
13
13
  pipeline:
14
14
  - azure-importer
15
15
  config:
16
16
  azure-importer:
17
- inputs:
18
- - timestamp: "2023-11-02T10:35:31.820Z"
19
- duration: 3600
20
17
  azure-observation-window: 5 min # value and unit must be space separated
21
18
  azure-observation-aggregation: "average"
22
19
  azure-subscription-id: 42a3c589-87ce-4478-8ed6-9adc11b81965
23
20
  azure-resource-group: Group1
24
21
  azure-vm-name: VM1
22
+ inputs:
23
+ - timestamp: "2023-11-02T10:35:31.820Z"
24
+ duration: 3600
@@ -0,0 +1,75 @@
1
+ name: basic-demo
2
+ description: null
3
+ tags: null
4
+ initialize:
5
+ plugins:
6
+ mock-observations:
7
+ path: "@grnsft/if-plugins"
8
+ method: MockObservations
9
+ global-config:
10
+ timestamp-from: 2024-02-26T00:00
11
+ timestamp-to: 2024-02-26T00:10
12
+ duration: 60
13
+ components:
14
+ - cloud/instance-type: Standard_A1_v2
15
+ - cloud/instance-type: Standard_A2_v2
16
+ generators:
17
+ common:
18
+ cloud/vendor: azure
19
+ cloud/region: uk-west
20
+ geolocation: 37.7749,-122.4194
21
+ randint:
22
+ cpu/utilization:
23
+ min: 1
24
+ max: 99
25
+ teads-curve:
26
+ path: "@grnsft/if-unofficial-plugins"
27
+ method: TeadsCurve
28
+ global-config:
29
+ interpolation: spline
30
+ group-by:
31
+ path: "builtin"
32
+ method: GroupBy
33
+ cloud-metadata:
34
+ method: CloudInstanceMetadata
35
+ path: "@grnsft/if-plugins"
36
+ operational-carbon:
37
+ path: "@grnsft/if-plugins"
38
+ method: Multiply
39
+ global-config:
40
+ input-parameters: ["cpu/energy", "grid/carbon-intensity"]
41
+ output-parameter: "cpu/carbon"
42
+ watttime:
43
+ path: "@grnsft/if-unofficial-plugins"
44
+ method: WattTimeGridEmissions
45
+ global-config:
46
+ # username: ENV_WATT_TIME_USERNAME
47
+ # password: ENV_WATT_TIME_PASSWORD
48
+ username: manushak
49
+ password: "@watt-time17"
50
+ tree:
51
+ children:
52
+ application:
53
+ pipeline:
54
+ - mock-observations
55
+ # - group-by
56
+ - cloud-metadata
57
+ - teads-curve
58
+ - watttime
59
+ - operational-carbon
60
+ defaults:
61
+ grid/carbon-intensity: 250
62
+ geolocation: 37.7749,-122.4194
63
+ # config:
64
+ # group-by:
65
+ # group:
66
+ # - cloud/region
67
+ # - cloud/instance-type
68
+ inputs:
69
+ - timestamp: "2024-02-26 00:00:00"
70
+ duration: 60
71
+ cloud/instance-type: Standard_A1_v2
72
+ cloud/vendor: azure
73
+ cloud/region: uk-west
74
+ geolocation: 37.7749,-122.4194
75
+ cpu/utilization: 15
@@ -0,0 +1,27 @@
1
+ name: basic-demo
2
+ description:
3
+ tags:
4
+ initialize:
5
+ plugins:
6
+ teads-curve:
7
+ path: '@grnsft/if-unofficial-plugins'
8
+ method: TeadsCurve
9
+ global-config:
10
+ interpolation: spline
11
+ tree:
12
+ children:
13
+ child-0:
14
+ defaults:
15
+ cpu/thermal-design-power: 100
16
+ pipeline:
17
+ - teads-curve
18
+ inputs:
19
+ - timestamp: 2023-07-06T00:00
20
+ duration: 1
21
+ cpu/utilization: 20
22
+ - timestamp: 2023-07-06T00:01
23
+ duration: 1
24
+ cpu/utilization: 80
25
+ - timestamp: 2023-07-06T00:02
26
+ duration: 1
27
+ cpu/utilization: 20
@@ -0,0 +1,85 @@
1
+ name: boavizta-demo
2
+ description:
3
+ tags:
4
+ initialize:
5
+ plugins:
6
+ boavizta-cpu:
7
+ method: BoaviztaCpuOutput
8
+ path: '@grnsft/if-unofficial-plugins'
9
+ global-config:
10
+ allocation: LINEAR
11
+ verbose: true
12
+ "sum":
13
+ path: "@grnsft/if-plugins"
14
+ method: Sum
15
+ global-config:
16
+ input-parameters:
17
+ - cpu/energy
18
+ - network/energy
19
+ output-parameter: energy
20
+ "sci-m":
21
+ path: "@grnsft/if-plugins"
22
+ method: SciM
23
+ "sci-o":
24
+ path: "@grnsft/if-plugins"
25
+ method: SciO
26
+ "sci":
27
+ path: "@grnsft/if-plugins"
28
+ method: Sci
29
+ global-config:
30
+ functional-unit: ''
31
+ functional-unit-time: '1-day'
32
+ "time-sync":
33
+ method: TimeSync
34
+ path: "builtin"
35
+ global-config:
36
+ start-time: "2023-12-12T00:00:00.000Z"
37
+ end-time: "2023-12-12T00:01:00.000Z"
38
+ interval: 5
39
+ allow-padding: true
40
+ tree:
41
+ children:
42
+ child-1:
43
+ pipeline:
44
+ - boavizta-cpu
45
+ - sum
46
+ - sci-m
47
+ - sci-o
48
+ - time-sync
49
+ - sci
50
+ config:
51
+ defaults:
52
+ cpu/thermal-design-power: 100
53
+ grid/carbon-intensity: 800
54
+ device/emissions-embodied: 1533.120 # gCO2eq
55
+ time-reserved: 3600 # 1hr in seconds
56
+ device/expected-lifespan: 94608000 # 3 years in seconds
57
+ resources-reserved: 1
58
+ resources-total: 8
59
+ cpu/number-cores: 24
60
+ cpu/name: Intel® Core™ i7-1185G7
61
+ inputs:
62
+ - timestamp: "2023-12-12T00:00:00.000Z"
63
+ cloud/instance-type: A1
64
+ region: uk-west
65
+ duration: 1
66
+ cpu/utilization: 50
67
+ network/energy: 0.000001
68
+ - timestamp: "2023-12-12T00:00:01.000Z"
69
+ duration: 5
70
+ cpu/utilization: 20
71
+ cloud/instance-type: A1
72
+ region: uk-west
73
+ network/energy: 0.000001
74
+ - timestamp: "2023-12-12T00:00:06.000Z"
75
+ duration: 7
76
+ cpu/utilization: 15
77
+ cloud/instance-type: A1
78
+ region: uk-west
79
+ network/energy: 0.000001
80
+ - timestamp: "2023-12-12T00:00:13.000Z"
81
+ duration: 30
82
+ cloud/instance-type: A1
83
+ region: uk-west
84
+ cpu/utilization: 15
85
+ network/energy: 0.000001
@@ -2,26 +2,25 @@ name: boavizta
2
2
  description: calls boavizta api
3
3
  tags:
4
4
  initialize:
5
- models:
6
- - name: boavizta-cpu
7
- model: BoaviztaCpuOutputModel
8
- path: "@grnsft/if-unofficial-models"
9
- config:
5
+ plugins:
6
+ "boavizta-cpu":
7
+ method: BoaviztaCpuOutput
8
+ path: "@grnsft/if-unofficial-plugins"
9
+ global-config:
10
10
  allocation: LINEAR
11
11
  verbose: true
12
- graph:
12
+ tree:
13
13
  children:
14
14
  child:
15
15
  pipeline:
16
16
  - boavizta-cpu
17
- config:
18
- boavizta-cpu:
19
- core-units: 24
20
- physical-processor: Intel® Core™ i7-1185G7
17
+ defaults:
18
+ cpu/number-cores: 24
19
+ cpu/name: Intel® Core™ i7-1185G7
21
20
  inputs:
22
21
  - timestamp: 2023-07-06T00:00 # [KEYWORD] [NO-SUBFIELDS] time when measurement occurred
23
22
  duration: 3600 # Secs
24
- cpu-util: 18.392
23
+ cpu/utilization: 18.392
25
24
  - timestamp: 2023-08-06T00:00 # [KEYWORD] [NO-SUBFIELDS] time when measurement occurred
26
25
  duration: 3600 # Secs
27
- cpu-util: 16
26
+ cpu/utilization: 16
@@ -2,20 +2,19 @@ name: ccf-demo
2
2
  description: example impl invoking CCF model
3
3
  tags:
4
4
  initialize:
5
- models:
6
- - name: ccf
7
- model: CloudCarbonFootprint
8
- path: "@grnsft/if-unofficial-models"
9
- graph:
5
+ plugins:
6
+ ccf:
7
+ method: CloudCarbonFootprint
8
+ path: "@grnsft/if-unofficial-plugins"
9
+ tree:
10
10
  children:
11
11
  child:
12
12
  pipeline:
13
13
  - ccf
14
- config:
15
- ccf:
16
- vendor: 'aws'
17
- instance-type: 'm5n.large'
14
+ defaults:
15
+ cloud/vendor: "aws"
16
+ cloud/instance-type: "m5n.large"
18
17
  inputs:
19
18
  - timestamp: 2023-07-06T00:00 # [KEYWORD] [NO-SUBFIELDS] time when measurement occurred
20
19
  duration: 1
21
- cpu-util: 10
20
+ cpu/utilization: 10
@@ -0,0 +1,20 @@
1
+ name: cloud-instance-metadata
2
+ description: example impl invoking Cloud Instance Metadata plugin
3
+ tags:
4
+ initialize:
5
+ plugins:
6
+ cloud-instance-metadata:
7
+ method: CloudInstanceMetadata
8
+ path: "@grnsft/if-plugins"
9
+ tree:
10
+ children:
11
+ child:
12
+ pipeline:
13
+ - cloud-instance-metadata
14
+ config:
15
+ inputs:
16
+ - timestamp: 2023-07-06T00:00 # [KEYWORD] [NO-SUBFIELDS] time when measurement occurred
17
+ cloud/vendor: aws
18
+ cloud/instance-type: m5n.large
19
+ duration: 100
20
+ cpu/utilization: 10
@@ -0,0 +1,41 @@
1
+ name: coud-instanmce-metadata-demo
2
+ description: null
3
+ tags: null
4
+ initialize:
5
+ plugins:
6
+ teads-curve:
7
+ path: '@grnsft/if-unofficial-plugins'
8
+ method: TeadsCurve
9
+ global-config:
10
+ interpolation: spline
11
+ cloud-instance-metadata:
12
+ method: CloudInstanceMetadata
13
+ path: "@grnsft/if-plugins"
14
+ tree:
15
+ children:
16
+ child-0:
17
+ defaults:
18
+ cpu/thermal-design-power: 100
19
+ cloud/vendor: aws
20
+ cloud/instance-type: m5n.large
21
+ pipeline:
22
+ - teads-curve
23
+ - cloud-instance-metadata
24
+ inputs:
25
+ - timestamp: 2023-07-06T00:00
26
+ duration: 10
27
+ cpu/utilization: 80
28
+ - timestamp: 2023-07-06T00:01
29
+ duration: 10
30
+ cpu/utilization: 80
31
+ outputs:
32
+ - timestamp: 2023-07-06T00:00
33
+ duration: 10
34
+ cpu/utilization: 80
35
+ cpu/thermal-design-power: 100
36
+ cpu/energy: 0.00025568089430894314
37
+ - timestamp: 2023-07-06T00:01
38
+ duration: 10
39
+ cpu/utilization: 80
40
+ cpu/thermal-design-power: 100
41
+ cpu/energy: 0.00025568089430894314
@@ -0,0 +1,30 @@
1
+ name: co2js-demo
2
+ description: example impl invoking CO2.JS model
3
+ tags:
4
+ initialize:
5
+ plugins:
6
+ co2js:
7
+ method: Co2js
8
+ path: "@grnsft/if-unofficial-plugins"
9
+ global-config:
10
+ options:
11
+ dataReloadRatio: 0.6
12
+ firstVisitPercentage: 0.9
13
+ returnVisitPercentage: 0.1
14
+ gridIntensity:
15
+ device: 560.98
16
+ dataCenter:
17
+ country: "TWN"
18
+ tree:
19
+ children:
20
+ child:
21
+ pipeline:
22
+ - co2js
23
+ config:
24
+ co2js:
25
+ type: swd
26
+ green-web-host: true
27
+ inputs:
28
+ - timestamp: 2023-07-06T00:00
29
+ duration: 1
30
+ network/data/bytes: 1000000
@@ -0,0 +1,23 @@
1
+ name: coefficient-demo
2
+ description:
3
+ tags:
4
+ initialize:
5
+ plugins:
6
+ coefficient:
7
+ method: Coefficient
8
+ path: "@grnsft/if-plugins"
9
+ global-config:
10
+ input-parameter: "carbon"
11
+ coefficient: 3
12
+ output-parameter: "carbon-product"
13
+ tree:
14
+ children:
15
+ child:
16
+ pipeline:
17
+ - coefficient
18
+ config:
19
+ sum:
20
+ inputs:
21
+ - timestamp: 2023-08-06T00:00
22
+ duration: 3600
23
+ carbon: 30
@@ -0,0 +1,34 @@
1
+ name: csv-export-demo
2
+ description: example exporting output to a csv file
3
+ tags:
4
+ initialize:
5
+ plugins:
6
+ csv-exporter:
7
+ method: CsvExport
8
+ path: "@grnsft/if-plugins"
9
+ tree:
10
+ children:
11
+ child:
12
+ pipeline:
13
+ - csv-exporter
14
+ config:
15
+ csv-exporter:
16
+ output-path: ./examples/outputs/csv-test.csv
17
+ headers:
18
+ - timestamp
19
+ - duration
20
+ - carbon
21
+ - energy
22
+ inputs:
23
+ - timestamp: 2023-07-06T00:00
24
+ duration: 1
25
+ operational-carbon: 0.02
26
+ embodied-carbon: 5
27
+ energy: 3.5
28
+ carbon: 5.02
29
+ - timestamp: 2023-07-06T00:10
30
+ duration: 1
31
+ operational-carbon: 0.03
32
+ embodied-carbon: 4
33
+ energy: 2.9
34
+ carbon: 4.03
@@ -0,0 +1,21 @@
1
+ name: e-mem
2
+ description:
3
+ tags:
4
+ initialize:
5
+ plugins:
6
+ e-mem:
7
+ method: EMem
8
+ path: "@grnsft/if-plugins"
9
+ global-config:
10
+ energy-per-gb: 0.002
11
+ tree:
12
+ children:
13
+ child:
14
+ pipeline:
15
+ - e-mem
16
+ config:
17
+ inputs:
18
+ - timestamp: 2023-08-06T00:00
19
+ duration: 3600
20
+ memory/utilization: 40
21
+ memory/capacity: 1
@@ -2,11 +2,13 @@ name: sci-e-demo
2
2
  description:
3
3
  tags:
4
4
  initialize:
5
- models:
6
- - name: e-net
7
- model: ENetModel
8
- path: '@grnsft/if-models'
9
- graph:
5
+ plugins:
6
+ e-net:
7
+ method: ENet
8
+ path: "@grnsft/if-plugins"
9
+ global-config:
10
+ energy-per-gb: 0.02
11
+ tree:
10
12
  children:
11
13
  child:
12
14
  pipeline:
@@ -16,6 +18,5 @@ graph:
16
18
  inputs:
17
19
  - timestamp: 2023-08-06T00:00
18
20
  duration: 3600
19
- data-in: 1
20
- data-out: 2
21
- network-energy-coefficient: 0.02
21
+ network/data-in: 1
22
+ network/data-out: 2