@grnsft/if 0.2.0 → 0.3.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 (88) hide show
  1. package/.commitlintrc.js +4 -7
  2. package/CONTRIBUTING.md +2 -12
  3. package/README.md +8 -4
  4. package/Refactor-migration-guide.md +342 -0
  5. package/build/{models/export-csv.d.ts → builtins/export-csv-raw.d.ts} +1 -1
  6. package/build/builtins/export-csv-raw.js +129 -0
  7. package/build/builtins/export-csv.d.ts +10 -0
  8. package/build/builtins/export-csv.js +83 -0
  9. package/build/builtins/export-log.js +18 -0
  10. package/build/builtins/export-yaml.js +27 -0
  11. package/build/builtins/group-by.d.ts +5 -0
  12. package/build/builtins/group-by.js +56 -0
  13. package/build/{models → builtins}/index.js +1 -1
  14. package/build/{models → builtins}/time-sync.d.ts +2 -2
  15. package/build/builtins/time-sync.js +304 -0
  16. package/build/config/config.js +2 -2
  17. package/build/config/params.js +56 -1
  18. package/build/config/strings.d.ts +4 -2
  19. package/build/config/strings.js +7 -9
  20. package/build/index.js +3 -1
  21. package/build/lib/aggregate.d.ts +1 -1
  22. package/build/lib/aggregate.js +4 -3
  23. package/build/lib/compute.js +9 -10
  24. package/build/lib/exhaust.js +8 -5
  25. package/build/lib/initialize.d.ts +2 -2
  26. package/build/lib/initialize.js +9 -5
  27. package/build/lib/load.d.ts +33 -2
  28. package/build/lib/load.js +4 -4
  29. package/build/lib/parameterize.d.ts +1 -1
  30. package/build/lib/parameterize.js +6 -4
  31. package/build/types/aggregation.d.ts +0 -1
  32. package/build/types/aggregation.js +1 -1
  33. package/build/types/compute.d.ts +3 -3
  34. package/build/types/compute.js +1 -1
  35. package/build/types/interface.d.ts +14 -1
  36. package/build/types/interface.js +6 -1
  37. package/build/types/manifest.d.ts +9 -40
  38. package/build/types/manifest.js +1 -1
  39. package/build/types/parameters.d.ts +2 -12
  40. package/build/types/parameters.js +1 -1
  41. package/build/types/plugin-storage.d.ts +6 -0
  42. package/build/types/plugin-storage.js +3 -0
  43. package/build/util/aggregation-helper.d.ts +1 -1
  44. package/build/util/aggregation-helper.js +11 -12
  45. package/build/util/errors.d.ts +1 -1
  46. package/build/util/errors.js +2 -2
  47. package/build/util/json.js +25 -5
  48. package/build/util/log-memoize.d.ts +3 -0
  49. package/build/util/log-memoize.js +19 -0
  50. package/build/util/logger.d.ts +1 -1
  51. package/build/util/logger.js +2 -3
  52. package/build/util/plugin-storage.d.ts +14 -0
  53. package/build/util/plugin-storage.js +34 -0
  54. package/build/util/validations.d.ts +144 -11
  55. package/build/util/validations.js +19 -17
  56. package/examples/manifests/asim-demo.yml +74 -0
  57. package/examples/manifests/basic-demo.yml +4 -9
  58. package/examples/manifests/boavizta-cloud.yml +20 -0
  59. package/examples/manifests/cim.yml +3 -3
  60. package/examples/manifests/divide.yml +38 -0
  61. package/examples/manifests/generics.yml +4 -4
  62. package/examples/manifests/group-by.yml +13 -13
  63. package/examples/manifests/mock-observation.yml +2 -2
  64. package/examples/manifests/nesting-demo.yml +2 -2
  65. package/examples/manifests/nesting.yml +16 -16
  66. package/examples/manifests/pipeline-demo-1.yml +4 -4
  67. package/examples/manifests/pipeline-demo-2.yml +9 -9
  68. package/examples/manifests/pipeline-demo.yml +10 -10
  69. package/examples/manifests/pipeline-teads-sci.yml +4 -4
  70. package/examples/manifests/pipeline-with-generics.yml +8 -8
  71. package/examples/manifests/pipeline-with-mocks.yml +10 -10
  72. package/examples/manifests/regex.yml +23 -0
  73. package/package.json +8 -5
  74. package/src/builtins/README.md +852 -0
  75. package/build/models/export-csv.js +0 -129
  76. package/build/models/export-log.js +0 -18
  77. package/build/models/export-yaml.js +0 -24
  78. package/build/models/group-by.d.ts +0 -11
  79. package/build/models/group-by.js +0 -56
  80. package/build/models/time-sync.js +0 -304
  81. package/build/types/initialize.d.ts +0 -4
  82. package/build/types/initialize.js +0 -3
  83. package/build/types/load.d.ts +0 -7
  84. package/build/types/load.js +0 -3
  85. package/src/models/README.md +0 -268
  86. /package/build/{models → builtins}/export-log.d.ts +0 -0
  87. /package/build/{models → builtins}/export-yaml.d.ts +0 -0
  88. /package/build/{models → builtins}/index.d.ts +0 -0
@@ -1,36 +1,169 @@
1
1
  import { ZodSchema, z } from 'zod';
2
- import { Manifest } from '../types/manifest';
3
2
  /**
4
- * Validates given `manifest` object to match pattern.
3
+ * Validation schema for manifests.
5
4
  */
6
- export declare const validateManifest: (manifest: Manifest) => {
5
+ export declare const manifestSchema: z.ZodObject<{
6
+ name: z.ZodString;
7
+ description: z.ZodNullable<z.ZodOptional<z.ZodString>>;
8
+ tags: z.ZodNullable<z.ZodOptional<z.ZodObject<{
9
+ kind: z.ZodNullable<z.ZodOptional<z.ZodString>>;
10
+ complexity: z.ZodNullable<z.ZodOptional<z.ZodString>>;
11
+ category: z.ZodNullable<z.ZodOptional<z.ZodString>>;
12
+ }, "strip", z.ZodTypeAny, {
13
+ kind?: string | null | undefined;
14
+ complexity?: string | null | undefined;
15
+ category?: string | null | undefined;
16
+ }, {
17
+ kind?: string | null | undefined;
18
+ complexity?: string | null | undefined;
19
+ category?: string | null | undefined;
20
+ }>>>;
21
+ aggregation: z.ZodNullable<z.ZodOptional<z.ZodObject<{
22
+ metrics: z.ZodArray<z.ZodString, "many">;
23
+ type: z.ZodEnum<["horizontal", "vertical", "both"]>;
24
+ }, "strip", z.ZodTypeAny, {
25
+ type: "horizontal" | "vertical" | "both";
26
+ metrics: string[];
27
+ }, {
28
+ type: "horizontal" | "vertical" | "both";
29
+ metrics: string[];
30
+ }>>>;
31
+ params: z.ZodNullable<z.ZodOptional<z.ZodArray<z.ZodObject<{
32
+ name: z.ZodString;
33
+ description: z.ZodString;
34
+ aggregation: z.ZodEnum<["sum", "none", "avg"]>;
35
+ unit: z.ZodString;
36
+ }, "strip", z.ZodTypeAny, {
37
+ name: string;
38
+ description: string;
39
+ aggregation: "sum" | "none" | "avg";
40
+ unit: string;
41
+ }, {
42
+ name: string;
43
+ description: string;
44
+ aggregation: "sum" | "none" | "avg";
45
+ unit: string;
46
+ }>, "many">>>;
47
+ initialize: z.ZodObject<{
48
+ plugins: z.ZodRecord<z.ZodString, z.ZodObject<{
49
+ path: z.ZodString;
50
+ method: z.ZodString;
51
+ 'global-config': z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
52
+ }, "strip", z.ZodTypeAny, {
53
+ path: string;
54
+ method: string;
55
+ 'global-config'?: Record<string, any> | undefined;
56
+ }, {
57
+ path: string;
58
+ method: string;
59
+ 'global-config'?: Record<string, any> | undefined;
60
+ }>>;
61
+ outputs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
62
+ }, "strip", z.ZodTypeAny, {
63
+ plugins: Record<string, {
64
+ path: string;
65
+ method: string;
66
+ 'global-config'?: Record<string, any> | undefined;
67
+ }>;
68
+ outputs?: string[] | undefined;
69
+ }, {
70
+ plugins: Record<string, {
71
+ path: string;
72
+ method: string;
73
+ 'global-config'?: Record<string, any> | undefined;
74
+ }>;
75
+ outputs?: string[] | undefined;
76
+ }>;
77
+ tree: z.ZodRecord<z.ZodString, z.ZodAny>;
78
+ 'if-version': z.ZodNullable<z.ZodOptional<z.ZodString>>;
79
+ }, "strip", z.ZodTypeAny, {
7
80
  name: string;
8
81
  initialize: {
9
82
  plugins: Record<string, {
10
- method: string;
11
83
  path: string;
84
+ method: string;
12
85
  'global-config'?: Record<string, any> | undefined;
13
86
  }>;
14
87
  outputs?: string[] | undefined;
15
88
  };
16
89
  tree: Record<string, any>;
17
- 'if-version'?: string | null | undefined;
18
90
  description?: string | null | undefined;
91
+ tags?: {
92
+ kind?: string | null | undefined;
93
+ complexity?: string | null | undefined;
94
+ category?: string | null | undefined;
95
+ } | null | undefined;
19
96
  aggregation?: {
20
- metrics: string[];
21
97
  type: "horizontal" | "vertical" | "both";
22
- } | undefined;
98
+ metrics: string[];
99
+ } | null | undefined;
23
100
  params?: {
101
+ name: string;
24
102
  description: string;
25
- unit: string;
26
103
  aggregation: "sum" | "none" | "avg";
104
+ unit: string;
105
+ }[] | null | undefined;
106
+ 'if-version'?: string | null | undefined;
107
+ }, {
108
+ name: string;
109
+ initialize: {
110
+ plugins: Record<string, {
111
+ path: string;
112
+ method: string;
113
+ 'global-config'?: Record<string, any> | undefined;
114
+ }>;
115
+ outputs?: string[] | undefined;
116
+ };
117
+ tree: Record<string, any>;
118
+ description?: string | null | undefined;
119
+ tags?: {
120
+ kind?: string | null | undefined;
121
+ complexity?: string | null | undefined;
122
+ category?: string | null | undefined;
123
+ } | null | undefined;
124
+ aggregation?: {
125
+ type: "horizontal" | "vertical" | "both";
126
+ metrics: string[];
127
+ } | null | undefined;
128
+ params?: {
27
129
  name: string;
130
+ description: string;
131
+ aggregation: "sum" | "none" | "avg";
132
+ unit: string;
28
133
  }[] | null | undefined;
134
+ 'if-version'?: string | null | undefined;
135
+ }>;
136
+ /**
137
+ * Validates given `manifest` object to match pattern.
138
+ */
139
+ export declare const validateManifest: (manifest: any) => {
140
+ name: string;
141
+ initialize: {
142
+ plugins: Record<string, {
143
+ path: string;
144
+ method: string;
145
+ 'global-config'?: Record<string, any> | undefined;
146
+ }>;
147
+ outputs?: string[] | undefined;
148
+ };
149
+ tree: Record<string, any>;
150
+ description?: string | null | undefined;
29
151
  tags?: {
30
- kind?: string | undefined;
31
- complexity?: string | undefined;
32
- category?: string | undefined;
152
+ kind?: string | null | undefined;
153
+ complexity?: string | null | undefined;
154
+ category?: string | null | undefined;
33
155
  } | null | undefined;
156
+ aggregation?: {
157
+ type: "horizontal" | "vertical" | "both";
158
+ metrics: string[];
159
+ } | null | undefined;
160
+ params?: {
161
+ name: string;
162
+ description: string;
163
+ aggregation: "sum" | "none" | "avg";
164
+ unit: string;
165
+ }[] | null | undefined;
166
+ 'if-version'?: string | null | undefined;
34
167
  };
35
168
  /**
36
169
  * Validates given `object` with given `schema`.
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validate = exports.validateManifest = void 0;
3
+ exports.validate = exports.validateManifest = exports.manifestSchema = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const errors_1 = require("./errors");
6
6
  const aggregation_1 = require("../types/aggregation");
@@ -9,16 +9,24 @@ const { ManifestValidationError, InputValidationError } = errors_1.ERRORS;
9
9
  /**
10
10
  * Validation schema for manifests.
11
11
  */
12
- const manifestValidation = zod_1.z.object({
12
+ exports.manifestSchema = zod_1.z.object({
13
13
  name: zod_1.z.string(),
14
- 'if-version': zod_1.z.string().optional().nullable(),
15
- description: zod_1.z.string().nullable().default(''),
14
+ description: zod_1.z.string().optional().nullable(),
15
+ tags: zod_1.z
16
+ .object({
17
+ kind: zod_1.z.string().optional().nullable(),
18
+ complexity: zod_1.z.string().optional().nullable(),
19
+ category: zod_1.z.string().optional().nullable(),
20
+ })
21
+ .optional()
22
+ .nullable(),
16
23
  aggregation: zod_1.z
17
24
  .object({
18
25
  metrics: zod_1.z.array(zod_1.z.string()),
19
26
  type: zod_1.z.enum(aggregation_1.AGGREGATION_METHODS),
20
27
  })
21
- .optional(),
28
+ .optional()
29
+ .nullable(),
22
30
  params: zod_1.z
23
31
  .array(zod_1.z.object({
24
32
  name: zod_1.z.string(),
@@ -28,14 +36,6 @@ const manifestValidation = zod_1.z.object({
28
36
  }))
29
37
  .optional()
30
38
  .nullable(),
31
- tags: zod_1.z
32
- .object({
33
- kind: zod_1.z.string().optional(),
34
- complexity: zod_1.z.string().optional(),
35
- category: zod_1.z.string().optional(),
36
- })
37
- .nullable()
38
- .default({}),
39
39
  initialize: zod_1.z.object({
40
40
  plugins: zod_1.z.record(zod_1.z.string(), zod_1.z.object({
41
41
  path: zod_1.z.string(),
@@ -45,13 +45,12 @@ const manifestValidation = zod_1.z.object({
45
45
  outputs: zod_1.z.array(zod_1.z.string()).optional(),
46
46
  }),
47
47
  tree: zod_1.z.record(zod_1.z.string(), zod_1.z.any()),
48
+ 'if-version': zod_1.z.string().optional().nullable(),
48
49
  });
49
50
  /**
50
51
  * Validates given `manifest` object to match pattern.
51
52
  */
52
- const validateManifest = (manifest) => {
53
- return (0, exports.validate)(manifestValidation, manifest, ManifestValidationError);
54
- };
53
+ const validateManifest = (manifest) => (0, exports.validate)(exports.manifestSchema, manifest, ManifestValidationError);
55
54
  exports.validateManifest = validateManifest;
56
55
  /**
57
56
  * Validates given `object` with given `schema`.
@@ -64,6 +63,9 @@ const validate = (schema, object, errorConstructor = InputValidationError) => {
64
63
  return validationResult.data;
65
64
  };
66
65
  exports.validate = validate;
66
+ /**
67
+ * Beautify error message from zod issue.
68
+ */
67
69
  const prettifyErrorMessage = (issues) => {
68
70
  const issuesArray = JSON.parse(issues);
69
71
  return issuesArray.map((issue) => {
@@ -76,4 +78,4 @@ const prettifyErrorMessage = (issues) => {
76
78
  return `"${fullPath}" parameter is ${message.toLowerCase()}. Error code: ${code}.`;
77
79
  });
78
80
  };
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC92YWxpZGF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBMkM7QUFFM0MscUNBQWdDO0FBRWhDLHNEQUF5RDtBQUN6RCxvREFBc0Q7QUFHdEQsTUFBTSxFQUFDLHVCQUF1QixFQUFFLG9CQUFvQixFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRS9EOztHQUVHO0FBQ0gsTUFBTSxrQkFBa0IsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2xDLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2hCLFlBQVksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzlDLFdBQVcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUM5QyxXQUFXLEVBQUUsT0FBQztTQUNYLE1BQU0sQ0FBQztRQUNOLE9BQU8sRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM1QixJQUFJLEVBQUUsT0FBQyxDQUFDLElBQUksQ0FBQyxpQ0FBbUIsQ0FBQztLQUNsQyxDQUFDO1NBQ0QsUUFBUSxFQUFFO0lBQ2IsTUFBTSxFQUFFLE9BQUM7U0FDTixLQUFLLENBQ0osT0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNQLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1FBQ2hCLFdBQVcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1FBQ3ZCLFdBQVcsRUFBRSxPQUFDLENBQUMsSUFBSSxDQUFDLDhCQUFpQixDQUFDO1FBQ3RDLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0tBQ2pCLENBQUMsQ0FDSDtTQUNBLFFBQVEsRUFBRTtTQUNWLFFBQVEsRUFBRTtJQUNiLElBQUksRUFB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LENBQUM7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1pvZElzc3VlLCBab2RTY2hlbWEsIHp9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7RVJST1JTfSBmcm9tICcuL2Vycm9ycyc7XG5cbmltcG9ydCB7QUdHUkVHQVRJT05fTUVUSE9EU30gZnJvbSAnLi4vdHlwZXMvYWdncmVnYXRpb24nO1xuaW1wb3J0IHtBR0dSRUdBVElPTl9UWVBFU30gZnJvbSAnLi4vdHlwZXMvcGFyYW1ldGVycyc7XG5pbXBvcnQge01hbmlmZXN0fSBmcm9tICcuLi90eXBlcy9tYW5pZmVzdCc7XG5cbmNvbnN0IHtNYW5pZmVzdFZhbGlkYXRpb25FcnJvciwgSW5wdXRWYWxpZGF0aW9uRXJyb3J9ID0gRVJST1JTO1xuXG4vKipcbiAqIFZhbGlkYXRpb24gc2NoZW1hIGZvciBtYW5pZmVzdHMuXG4gKi9cbmNvbnN0IG1hbmlmZXN0VmFsaWRhdGlvbiA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgJ2lmLXZlcnNpb24nOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkubnVsbGFibGUoKS5kZWZhdWx0KCcnKSxcbiAgYWdncmVnYXRpb246IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIG1ldHJpY3M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgICB0eXBlOiB6LmVudW0oQUdHUkVHQVRJT05fTUVUSE9EUyksXG4gICAgfSlcbiAgICAub3B0aW9uYWwoKSxcbiAgcGFyYW1zOiB6XG4gICAgLmFycmF5KFxuICAgICAgei5vYmplY3Qoe1xuICAgICAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgICAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKSxcbiAgICAgICAgYWdncmVnYXRpb246IHouZW51bShBR0dSRUdBVElPTl9UWVBFUyksXG4gICAgICAgIHVuaXQ6IHouc3RyaW5nKCksXG4gICAgICB9KVxuICAgIClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5udWxsYWJsZSgpLFxuICB0YWdzOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBraW5kOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBjb21wbGV4aXR5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBjYXRlZ29yeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIH0pXG4gICAgLm51bGxhYmxlKClcbiAgICAuZGVmYXVsdCh7fSksXG4gIGluaXRpYWxpemU6IHoub2JqZWN0KHtcbiAgICBwbHVnaW5zOiB6LnJlY29yZChcbiAgICAgIHouc3RyaW5nKCksXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIHBhdGg6IHouc3RyaW5nKCksXG4gICAgICAgIG1ldGhvZDogei5zdHJpbmcoKSxcbiAgICAgICAgJ2dsb2JhbC1jb25maWcnOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgfSlcbiAgICApLFxuICAgIG91dHB1dHM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgfSksXG4gIHRyZWU6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxufSk7XG5cbi8qKlxuICogVmFsaWRhdGVzIGdpdmVuIGBtYW5pZmVzdGAgb2JqZWN0IHRvIG1hdGNoIHBhdHRlcm4uXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZU1hbmlmZXN0ID0gKG1hbmlmZXN0OiBNYW5pZmVzdCkgPT4ge1xuICByZXR1cm4gdmFsaWRhdGUobWFuaWZlc3RWYWxpZGF0aW9uLCBtYW5pZmVzdCwgTWFuaWZlc3RWYWxpZGF0aW9uRXJyb3IpO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgZ2l2ZW4gYG9iamVjdGAgd2l0aCBnaXZlbiBgc2NoZW1hYC5cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlID0gPFQ+KFxuICBzY2hlbWE6IFpvZFNjaGVtYTxUPixcbiAgb2JqZWN0OiBhbnksXG4gIGVycm9yQ29uc3RydWN0b3I6IEVycm9yQ29uc3RydWN0b3IgPSBJbnB1dFZhbGlkYXRpb25FcnJvclxuKSA9PiB7XG4gIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBzY2hlbWEuc2FmZVBhcnNlKG9iamVjdCk7XG5cbiAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JDb25zdHJ1Y3RvcihcbiAgICAgIHByZXR0aWZ5RXJyb3JNZXNzYWdlKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IubWVzc2FnZSlcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRpb25SZXN1bHQuZGF0YTtcbn07XG5cbmNvbnN0IHByZXR0aWZ5RXJyb3JNZXNzYWdlID0gKGlzc3Vlczogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGlzc3Vlc0FycmF5ID0gSlNPTi5wYXJzZShpc3N1ZXMpO1xuXG4gIHJldHVybiBpc3N1ZXNBcnJheS5tYXAoKGlzc3VlOiBab2RJc3N1ZSkgPT4ge1xuICAgIGNvbnN0IHtjb2RlLCBwYXRoLCBtZXNzYWdlfSA9IGlzc3VlO1xuICAgIGNvbnN0IGZsYXR0ZW5QYXRoID0gcGF0aC5tYXAocGFydCA9PlxuICAgICAgdHlwZW9mIHBhcnQgPT09ICdudW1iZXInID8gYFske3BhcnR9XWAgOiBwYXJ0XG4gICAgKTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGZsYXR0ZW5QYXRoLmpvaW4oJy4nKTtcblxuICAgIGlmIChjb2RlID09PSAnY3VzdG9tJykge1xuICAgICAgcmV0dXJuIGAke21lc3NhZ2UudG9Mb3dlckNhc2UoKX0uIEVycm9yIGNvZGU6ICR7Y29kZX0uYDtcbiAgICB9XG4gICAgcmV0dXJuIGBcIiR7ZnVsbFBhdGh9XCIgcGFyYW1ldGVyIGlzICR7bWVzc2FnZS50b0xvd2VyQ2FzZSgpfS4gRXJyb3IgY29kZTogJHtjb2RlfS5gO1xuICB9KTtcbn07XG4iXX0=
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC92YWxpZGF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBMkM7QUFFM0MscUNBQWdDO0FBRWhDLHNEQUF5RDtBQUN6RCxvREFBc0Q7QUFFdEQsTUFBTSxFQUFDLHVCQUF1QixFQUFFLG9CQUFvQixFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRS9EOztHQUVHO0FBQ1UsUUFBQSxjQUFjLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNyQyxJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNoQixXQUFXLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM3QyxJQUFJLEVBQUUsT0FBQztTQUNKLE1BQU0sQ0FBQztRQUNOLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQ3RDLFVBQVUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQzVDLFFBQVEsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0tBQzNDLENBQUM7U0FDRCxRQUFRLEVBQUU7U0FDVixRQUFRLEVBQUU7SUFDYixXQUFXLEVBQUUsT0FBQztTQUNYLE1BQU0sQ0FBQztRQUNOLE9BQU8sRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM1QixJQUFJLEVBQUUsT0FBQyxDQUFDLElBQUksQ0FBQyxpQ0FBbUIsQ0FBQztLQUNsQyxDQUFDO1NBQ0QsUUFBUSxFQUFFO1NBQ1YsUUFBUSxFQUFFO0lBQ2IsTUFBTSxFQUFFLE9BQUM7U0FDTixLQUFLLENBQ0osT0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNQ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QUksR0FBRyxDQUFDO0lBQ3JGLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtab2RJc3N1ZSwgWm9kU2NoZW1hLCB6fSBmcm9tICd6b2QnO1xuXG5pbXBvcnQge0VSUk9SU30gZnJvbSAnLi9lcnJvcnMnO1xuXG5pbXBvcnQge0FHR1JFR0FUSU9OX01FVEhPRFN9IGZyb20gJy4uL3R5cGVzL2FnZ3JlZ2F0aW9uJztcbmltcG9ydCB7QUdHUkVHQVRJT05fVFlQRVN9IGZyb20gJy4uL3R5cGVzL3BhcmFtZXRlcnMnO1xuXG5jb25zdCB7TWFuaWZlc3RWYWxpZGF0aW9uRXJyb3IsIElucHV0VmFsaWRhdGlvbkVycm9yfSA9IEVSUk9SUztcblxuLyoqXG4gKiBWYWxpZGF0aW9uIHNjaGVtYSBmb3IgbWFuaWZlc3RzLlxuICovXG5leHBvcnQgY29uc3QgbWFuaWZlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgdGFnczogelxuICAgIC5vYmplY3Qoe1xuICAgICAga2luZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKCksXG4gICAgICBjb21wbGV4aXR5OiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgICAgIGNhdGVnb3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgICB9KVxuICAgIC5vcHRpb25hbCgpXG4gICAgLm51bGxhYmxlKCksXG4gIGFnZ3JlZ2F0aW9uOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBtZXRyaWNzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgICAgdHlwZTogei5lbnVtKEFHR1JFR0FUSU9OX01FVEhPRFMpLFxuICAgIH0pXG4gICAgLm9wdGlvbmFsKClcbiAgICAubnVsbGFibGUoKSxcbiAgcGFyYW1zOiB6XG4gICAgLmFycmF5KFxuICAgICAgei5vYmplY3Qoe1xuICAgICAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgICAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKSxcbiAgICAgICAgYWdncmVnYXRpb246IHouZW51bShBR0dSRUdBVElPTl9UWVBFUyksXG4gICAgICAgIHVuaXQ6IHouc3RyaW5nKCksXG4gICAgICB9KVxuICAgIClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5udWxsYWJsZSgpLFxuICBpbml0aWFsaXplOiB6Lm9iamVjdCh7XG4gICAgcGx1Z2luczogei5yZWNvcmQoXG4gICAgICB6LnN0cmluZygpLFxuICAgICAgei5vYmplY3Qoe1xuICAgICAgICBwYXRoOiB6LnN0cmluZygpLFxuICAgICAgICBtZXRob2Q6IHouc3RyaW5nKCksXG4gICAgICAgICdnbG9iYWwtY29uZmlnJzogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgICAgIH0pXG4gICAgKSxcbiAgICBvdXRwdXRzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIH0pLFxuICB0cmVlOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgJ2lmLXZlcnNpb24nOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbn0pO1xuXG4vKipcbiAqIFZhbGlkYXRlcyBnaXZlbiBgbWFuaWZlc3RgIG9iamVjdCB0byBtYXRjaCBwYXR0ZXJuLlxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVNYW5pZmVzdCA9IChtYW5pZmVzdDogYW55KSA9PlxuICB2YWxpZGF0ZShtYW5pZmVzdFNjaGVtYSwgbWFuaWZlc3QsIE1hbmlmZXN0VmFsaWRhdGlvbkVycm9yKTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgZ2l2ZW4gYG9iamVjdGAgd2l0aCBnaXZlbiBgc2NoZW1hYC5cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlID0gPFQ+KFxuICBzY2hlbWE6IFpvZFNjaGVtYTxUPixcbiAgb2JqZWN0OiBhbnksXG4gIGVycm9yQ29uc3RydWN0b3I6IEVycm9yQ29uc3RydWN0b3IgPSBJbnB1dFZhbGlkYXRpb25FcnJvclxuKSA9PiB7XG4gIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBzY2hlbWEuc2FmZVBhcnNlKG9iamVjdCk7XG5cbiAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JDb25zdHJ1Y3RvcihcbiAgICAgIHByZXR0aWZ5RXJyb3JNZXNzYWdlKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IubWVzc2FnZSlcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRpb25SZXN1bHQuZGF0YTtcbn07XG5cbi8qKlxuICogQmVhdXRpZnkgZXJyb3IgbWVzc2FnZSBmcm9tIHpvZCBpc3N1ZS5cbiAqL1xuY29uc3QgcHJldHRpZnlFcnJvck1lc3NhZ2UgPSAoaXNzdWVzOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgaXNzdWVzQXJyYXkgPSBKU09OLnBhcnNlKGlzc3Vlcyk7XG5cbiAgcmV0dXJuIGlzc3Vlc0FycmF5Lm1hcCgoaXNzdWU6IFpvZElzc3VlKSA9PiB7XG4gICAgY29uc3Qge2NvZGUsIHBhdGgsIG1lc3NhZ2V9ID0gaXNzdWU7XG4gICAgY29uc3QgZmxhdHRlblBhdGggPSBwYXRoLm1hcChwYXJ0ID0+XG4gICAgICB0eXBlb2YgcGFydCA9PT0gJ251bWJlcicgPyBgWyR7cGFydH1dYCA6IHBhcnRcbiAgICApO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gZmxhdHRlblBhdGguam9pbignLicpO1xuXG4gICAgaWYgKGNvZGUgPT09ICdjdXN0b20nKSB7XG4gICAgICByZXR1cm4gYCR7bWVzc2FnZS50b0xvd2VyQ2FzZSgpfS4gRXJyb3IgY29kZTogJHtjb2RlfS5gO1xuICAgIH1cblxuICAgIHJldHVybiBgXCIke2Z1bGxQYXRofVwiIHBhcmFtZXRlciBpcyAke21lc3NhZ2UudG9Mb3dlckNhc2UoKX0uIEVycm9yIGNvZGU6ICR7Y29kZX0uYDtcbiAgfSk7XG59O1xuIl19
@@ -0,0 +1,74 @@
1
+ name: My Manifest File
2
+ description: My First Manifest File 💚
3
+ # aggregation:
4
+ # metrics:
5
+ # - 'carbon'
6
+ # type: 'both'
7
+ initialize:
8
+ outputs: ['yaml', 'csv']
9
+ plugins:
10
+ group-by:
11
+ path: 'builtin'
12
+ method: GroupBy
13
+ operational-carbon:
14
+ path: '@grnsft/if-plugins'
15
+ method: Multiply
16
+ global-config:
17
+ input-parameters: ['cpu/energy', 'grid/carbon-intensity']
18
+ output-parameter: 'carbon'
19
+ watttime:
20
+ path: '@grnsft/if-unofficial-plugins'
21
+ method: WattTimeGridEmissions
22
+ teads-curve:
23
+ path: '@grnsft/if-unofficial-plugins'
24
+ method: TeadsCurve
25
+ global-config:
26
+ interpolation: spline
27
+ cloud-metadata:
28
+ method: CloudMetadata
29
+ path: "@grnsft/if-plugins"
30
+ mock-observations:
31
+ path: '@grnsft/if-plugins'
32
+ method: MockObservations
33
+ global-config:
34
+ timestamp-from: '2024-03-05T00:00:00.000Z'
35
+ timestamp-to: '2024-03-05T00:01:00.000Z'
36
+ duration: 10
37
+ components:
38
+ - name: server-1
39
+ cloud/instance-type: Standard_E64_v3
40
+ cloud/region: westus3
41
+ - name: server-2
42
+ cloud/instance-type: Standard_E64_v3
43
+ cloud/region: westus3
44
+ generators:
45
+ common:
46
+ cloud/vendor: azure
47
+ randint:
48
+ cpu/utilization:
49
+ min: 1
50
+ max: 99
51
+ 'time-sync':
52
+ method: TimeSync
53
+ path: "builtin"
54
+ global-config:
55
+ start-time: '2024-03-05T00:00:00.000Z'
56
+ end-time: '2024-03-05T00:01:00.000Z'
57
+ interval: 5
58
+ allow-padding: true
59
+ tree:
60
+ pipeline:
61
+ - mock-observations
62
+ - group-by
63
+ - time-sync
64
+ - cloud-metadata
65
+ - watttime
66
+ - teads-curve
67
+ - operational-carbon
68
+ defaults:
69
+ config:
70
+ group-by:
71
+ group:
72
+ - cloud/region
73
+ - name
74
+ inputs: null
@@ -31,7 +31,7 @@ initialize:
31
31
  path: "builtin"
32
32
  method: GroupBy
33
33
  cloud-metadata:
34
- method: CloudInstanceMetadata
34
+ method: CloudMetadata
35
35
  path: "@grnsft/if-plugins"
36
36
  operational-carbon:
37
37
  path: "@grnsft/if-plugins"
@@ -42,11 +42,6 @@ initialize:
42
42
  watttime:
43
43
  path: "@grnsft/if-unofficial-plugins"
44
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
45
  tree:
51
46
  children:
52
47
  application:
@@ -59,7 +54,7 @@ tree:
59
54
  - operational-carbon
60
55
  defaults:
61
56
  grid/carbon-intensity: 250
62
- geolocation: 37.7749,-122.4194
57
+ geolocation: 48.8567,2.3522
63
58
  # config:
64
59
  # group-by:
65
60
  # group:
@@ -70,6 +65,6 @@ tree:
70
65
  duration: 60
71
66
  cloud/instance-type: Standard_A1_v2
72
67
  cloud/vendor: azure
73
- cloud/region: uk-west
74
- geolocation: 37.7749,-122.4194
68
+ cloud/region: francesouth
69
+ geolocation: 48.8567,2.3522
75
70
  cpu/utilization: 15
@@ -0,0 +1,20 @@
1
+ name: boavizta cloud demo
2
+ description: calls boavizta api
3
+ tags:
4
+ initialize:
5
+ plugins:
6
+ "boavizta-cloud":
7
+ method: BoaviztaCloudOutput
8
+ path: "@grnsft/if-unofficial-plugins"
9
+ tree:
10
+ children:
11
+ child:
12
+ pipeline:
13
+ - boavizta-cloud
14
+ defaults:
15
+ instance-type: r6g.medium
16
+ provider: aws
17
+ inputs:
18
+ - timestamp: "2021-01-01T00:00:00Z"
19
+ duration: 15 # Secs
20
+ cpu/utilization: 34
@@ -3,14 +3,14 @@ description: example impl invoking Cloud Instance Metadata plugin
3
3
  tags:
4
4
  initialize:
5
5
  plugins:
6
- cloud-instance-metadata:
7
- method: CloudInstanceMetadata
6
+ cloud-metadata:
7
+ method: CloudMetadata
8
8
  path: "@grnsft/if-plugins"
9
9
  tree:
10
10
  children:
11
11
  child:
12
12
  pipeline:
13
- - cloud-instance-metadata
13
+ - cloud-metadata
14
14
  config:
15
15
  inputs:
16
16
  - timestamp: 2023-07-06T00:00 # [KEYWORD] [NO-SUBFIELDS] time when measurement occurred
@@ -0,0 +1,38 @@
1
+ name: divide-demo
2
+ description:
3
+ tags:
4
+ initialize:
5
+ plugins:
6
+ cloud-metadata:
7
+ method: CloudMetadata
8
+ path: "@grnsft/if-plugins"
9
+ divide:
10
+ method: Divide
11
+ path: "@grnsft/if-plugins"
12
+ global-config:
13
+ numerator: vcpus-allocated
14
+ denominator: 2
15
+ output: cpu/number-cores
16
+ boavizta-cpu:
17
+ method: BoaviztaCpuOutput
18
+ path: "@grnsft/if-unofficial-plugins"
19
+ global-config:
20
+ allocation: LINEAR
21
+ verbose: true
22
+ tree:
23
+ children:
24
+ child:
25
+ pipeline:
26
+ - cloud-metadata
27
+ - divide
28
+ - boavizta-cpu
29
+ config:
30
+ divide:
31
+ defaults:
32
+ cloud/vendor: aws
33
+ cloud/instance-type: m5n.large
34
+ cpu/name: Intel® Core™ i7-1185G7
35
+ inputs:
36
+ - timestamp: 2023-08-06T00:00
37
+ duration: 3600
38
+ cpu/utilization: 80
@@ -42,7 +42,7 @@ tree:
42
42
  cpu/thermal-design-power: 100
43
43
  inputs:
44
44
  - timestamp: "2023-12-12T00:00:00.000Z"
45
- instance-type: A1
45
+ cloud/instance-type: A1
46
46
  region: uk-west
47
47
  duration: 1
48
48
  cpu/utilization: 50
@@ -51,20 +51,20 @@ tree:
51
51
  - timestamp: "2023-12-12T00:00:01.000Z"
52
52
  duration: 5
53
53
  cpu/utilization: 20
54
- instance-type: A1
54
+ cloud/instance-type: A1
55
55
  region: uk-west
56
56
  network/energy: 10
57
57
  energy: 5
58
58
  - timestamp: "2023-12-12T00:00:06.000Z"
59
59
  duration: 7
60
60
  cpu/utilization: 15
61
- instance-type: A1
61
+ cloud/instance-type: A1
62
62
  region: uk-west
63
63
  network/energy: 10
64
64
  energy: 5
65
65
  - timestamp: "2023-12-12T00:00:13.000Z"
66
66
  duration: 30
67
- instance-type: A1
67
+ cloud/instance-type: A1
68
68
  region: uk-west
69
69
  cpu/utilization: 15
70
70
  network/energy: 10
@@ -14,35 +14,35 @@ tree:
14
14
  group-by:
15
15
  group:
16
16
  - region
17
- - instance-type
17
+ - cloud/instance-type
18
18
  inputs:
19
19
  - timestamp: 2023-07-06T00:00
20
20
  duration: 300
21
- instance-type: A1
21
+ cloud/instance-type: A1
22
22
  region: uk-west
23
- cpu-util: 99
23
+ cpu/utilization: 99
24
24
  - timestamp: 2023-07-06T05:00
25
25
  duration: 300
26
- instance-type: A1
26
+ cloud/instance-type: A1
27
27
  region: uk-west
28
- cpu-util: 23
28
+ cpu/utilization: 23
29
29
  - timestamp: 2023-07-06T10:00
30
30
  duration: 300
31
- instance-type: A1
31
+ cloud/instance-type: A1
32
32
  region: uk-west
33
- cpu-util: 12
33
+ cpu/utilization: 12
34
34
  - timestamp: 2023-07-06T00:00 # note this time restarts at the start timstamp
35
35
  duration: 300
36
- instance-type: B1
36
+ cloud/instance-type: B1
37
37
  region: uk-west
38
- cpu-util: 11
38
+ cpu/utilization: 11
39
39
  - timestamp: 2023-07-06T05:00
40
40
  duration: 300
41
- instance-type: B1
41
+ cloud/instance-type: B1
42
42
  region: uk-west
43
- cpu-util: 67
43
+ cpu/utilization: 67
44
44
  - timestamp: 2023-07-06T10:00
45
45
  duration: 300
46
- instance-type: B1
46
+ cloud/instance-type: B1
47
47
  region: uk-west
48
- cpu-util: 1
48
+ cpu/utilization: 1
@@ -12,8 +12,8 @@ initialize:
12
12
  timestamp-to: 2023-07-06T00:10
13
13
  duration: 60
14
14
  components:
15
- - instance-type: A1
16
- - instance-type: B1
15
+ - cloud/instance-type: A1
16
+ - cloud/instance-type: B1
17
17
  generators:
18
18
  common:
19
19
  region: uk-west
@@ -59,7 +59,7 @@ tree:
59
59
  - time-sync
60
60
  - sci
61
61
  inputs:
62
- - timestamp: 2023-12-12T00:00
62
+ - timestamp: "2023-12-12T00:00:00.000Z"
63
63
  duration: 10
64
64
  cpu/utilization: 50
65
65
  network/energy: 1
@@ -82,7 +82,7 @@ tree:
82
82
  - time-sync
83
83
  - sci
84
84
  inputs:
85
- - timestamp: 2023-12-12T00:00
85
+ - timestamp: "2023-12-12T00:00:00.000Z"
86
86
  duration: 10
87
87
  cpu/utilization: 30
88
88
  network/energy: 1