@grnsft/if 1.0.2 → 1.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 (107) hide show
  1. package/.dockerignore +10 -0
  2. package/CONTAINER.md +148 -0
  3. package/Dockerfile +73 -0
  4. package/HELM_CHART.md +96 -0
  5. package/README.md +56 -0
  6. package/bin/docker-entrypoint.sh +15 -0
  7. package/build/common/types/manifest.d.ts +1 -0
  8. package/build/common/types/manifest.js +1 -1
  9. package/build/common/util/debug-logger.js +4 -18
  10. package/build/common/util/storage.d.ts +9 -0
  11. package/build/common/util/storage.js +24 -0
  12. package/build/if-api/config/config.d.ts +9 -0
  13. package/build/if-api/config/config.js +58 -0
  14. package/build/if-api/config/index.d.ts +2 -0
  15. package/build/if-api/config/index.js +8 -0
  16. package/build/if-api/config/strings.d.ts +16 -0
  17. package/build/if-api/config/strings.js +20 -0
  18. package/build/if-api/index.d.ts +2 -0
  19. package/build/if-api/index.js +268 -0
  20. package/build/if-api/types/process-args.d.ts +18 -0
  21. package/build/if-api/types/process-args.js +3 -0
  22. package/build/if-api/util/args.d.ts +5 -0
  23. package/build/if-api/util/args.js +42 -0
  24. package/build/if-metadata-check/config/config.d.ts +5 -0
  25. package/build/if-metadata-check/config/config.js +26 -0
  26. package/build/if-metadata-check/config/strings.d.ts +5 -0
  27. package/build/if-metadata-check/config/strings.js +9 -0
  28. package/build/if-metadata-check/index.d.ts +2 -0
  29. package/build/if-metadata-check/index.js +30 -0
  30. package/build/if-metadata-check/types/plugin.d.ts +7 -0
  31. package/build/if-metadata-check/types/plugin.js +3 -0
  32. package/build/if-metadata-check/types/process-args.d.ts +5 -0
  33. package/build/if-metadata-check/types/process-args.js +3 -0
  34. package/build/if-metadata-check/util/args.d.ts +57 -0
  35. package/build/if-metadata-check/util/args.js +29 -0
  36. package/build/if-metadata-check/util/metadata-checker.d.ts +44 -0
  37. package/build/if-metadata-check/util/metadata-checker.js +99 -0
  38. package/build/if-run/index.js +1 -1
  39. package/build/if-run/lib/aggregate.d.ts +2 -2
  40. package/build/if-run/lib/aggregate.js +5 -19
  41. package/build/if-run/lib/compute.d.ts +1 -1
  42. package/build/if-run/lib/compute.js +10 -9
  43. package/build/if-run/lib/environment.d.ts +5 -1
  44. package/build/if-run/lib/environment.js +21 -16
  45. package/build/if-run/lib/initialize.d.ts +12 -0
  46. package/build/if-run/lib/initialize.js +37 -3
  47. package/build/if-run/lib/regroup.d.ts +3 -2
  48. package/build/if-run/lib/regroup.js +13 -9
  49. package/build/if-run/types/compute.d.ts +1 -1
  50. package/build/if-run/types/compute.js +1 -1
  51. package/helm-chart/.helmignore +23 -0
  52. package/helm-chart/Chart.yaml +24 -0
  53. package/helm-chart/templates/NOTES.txt +22 -0
  54. package/helm-chart/templates/_helpers.tpl +62 -0
  55. package/helm-chart/templates/additionalPlugins.yaml +13 -0
  56. package/helm-chart/templates/deployment.yaml +144 -0
  57. package/helm-chart/templates/disabledPlugins.yaml +11 -0
  58. package/helm-chart/templates/env-configmap.yaml +10 -0
  59. package/helm-chart/templates/env-secret.yaml +10 -0
  60. package/helm-chart/templates/hpa.yaml +32 -0
  61. package/helm-chart/templates/ingress.yaml +43 -0
  62. package/helm-chart/templates/npmrc.yaml +11 -0
  63. package/helm-chart/templates/service.yaml +24 -0
  64. package/helm-chart/templates/serviceaccount.yaml +13 -0
  65. package/helm-chart/templates/tests/test-connection.yaml +15 -0
  66. package/helm-chart/values.yaml +175 -0
  67. package/manifests/examples/bugs/aggregation-error-wrong-metric.yml +173 -0
  68. package/manifests/examples/bugs/input-error-missing-duration.yml +25 -0
  69. package/manifests/examples/bugs/mock-observations-failure-duration-is-zero.yml +33 -0
  70. package/manifests/examples/bugs/pipeline-error-naming-mismatch.yml +32 -0
  71. package/manifests/examples/bugs/pipeline-error-uninitialized-plugin.yml +33 -0
  72. package/manifests/examples/bugs/pipeline-ordering-error.yml +91 -0
  73. package/manifests/examples/builtins/divide/success-denominator-equal-zero.yml +36 -0
  74. package/manifests/examples/builtins/mock-observations/failure-invalid-config-cpu-range.yml +0 -1
  75. package/manifests/examples/builtins/mock-observations/failure-invalid-memory-utilization-range.yml +0 -1
  76. package/manifests/examples/builtins/mock-observations/failure-missing-timestamp-from-param.yml +0 -1
  77. package/manifests/examples/builtins/mock-observations/success.yml +0 -1
  78. package/manifests/examples/builtins/sci/failure-invalid-config-value.yml +0 -1
  79. package/manifests/examples/builtins/sci/failure-missing-input-param.yml +0 -1
  80. package/manifests/examples/builtins/sci/success.yml +0 -1
  81. package/manifests/examples/builtins/sci-embodied/failure-invalid-default-emission-value.yml +22 -0
  82. package/manifests/examples/builtins/time-sync/failure-missing-config.yml +0 -2
  83. package/manifests/examples/builtins/time-sync/success.yml +0 -2
  84. package/manifests/examples/features/aggregate-failure-invalid-metrics.yml +50 -0
  85. package/manifests/examples/features/aggregate-failure-missing-metric-in-inputs.yml +50 -0
  86. package/manifests/examples/features/aggregate-horizontal.yml +58 -0
  87. package/manifests/examples/features/aggregate-vertical.yml +58 -0
  88. package/manifests/examples/features/aggregate.yml +58 -0
  89. package/manifests/examples/pipelines/cloud-metadata-divide.yml +36 -0
  90. package/manifests/examples/pipelines/pipeline-with-mocks.yml +0 -1
  91. package/manifests/examples/pipelines/scenario-5.yml +0 -1
  92. package/manifests/outputs/bugs/mock-observations-failure-duration-is-zero.yaml +0 -1
  93. package/manifests/outputs/builtins/mock-observations/failure-invalid-config-cpu-range.yaml +0 -1
  94. package/manifests/outputs/builtins/mock-observations/failure-invalid-memory-utilization-range.yaml +0 -1
  95. package/manifests/outputs/builtins/mock-observations/failure-missing-timestamp-from-param.yaml +0 -1
  96. package/manifests/outputs/builtins/sci/failure-invalid-config-value.yaml +0 -1
  97. package/manifests/outputs/builtins/sci/failure-missing-input-param.yaml +0 -1
  98. package/manifests/outputs/builtins/time-sync/failure-missing-config.yaml +0 -2
  99. package/manifests/outputs/features/regroup/success.yaml +72 -0
  100. package/manifests/outputs/pipelines/pipeline-with-aggregate.yaml +1291 -0
  101. package/manifests/outputs/pipelines/scenario-3.yaml +126 -0
  102. package/openapi.yaml +424 -0
  103. package/package.json +8 -3
  104. package/with-plugins/Dockerfile +59 -0
  105. package/manifests/outputs/builtins/interpolation/interpolation.yaml +0 -81
  106. package/manifests/outputs/features/failure-invalid-regroup.yaml +0 -87
  107. package/manifests/outputs/features/failure-missing-cloud-instance-type.yaml +0 -86
@@ -0,0 +1,24 @@
1
+ apiVersion: v1
2
+ kind: Service
3
+ metadata:
4
+ name: {{ include "if.fullname" . }}
5
+ labels:
6
+ {{- include "if.labels" . | nindent 4 }}
7
+ {{- with .Values.service.annotations }}
8
+ annotations:
9
+ {{- toYaml . | nindent 4 }}
10
+ {{- end }}
11
+ spec:
12
+ type: {{ .Values.service.type }}
13
+ ports:
14
+ - port: {{ .Values.service.port }}
15
+ targetPort: http
16
+ name: http
17
+ {{- with .Values.service.nodePort }}
18
+ nodePort: {{ . }}
19
+ {{- end }}
20
+ selector:
21
+ {{- include "if.selectorLabels" . | nindent 4 }}
22
+ {{- with .Values.service.loadBalancerClass }}
23
+ loadBalancerClass: {{ . }}
24
+ {{- end }}
@@ -0,0 +1,13 @@
1
+ {{- if .Values.serviceAccount.create -}}
2
+ apiVersion: v1
3
+ kind: ServiceAccount
4
+ metadata:
5
+ name: {{ include "if.serviceAccountName" . }}
6
+ labels:
7
+ {{- include "if.labels" . | nindent 4 }}
8
+ {{- with .Values.serviceAccount.annotations }}
9
+ annotations:
10
+ {{- toYaml . | nindent 4 }}
11
+ {{- end }}
12
+ automountServiceAccountToken: {{ .Values.serviceAccount.automount }}
13
+ {{- end }}
@@ -0,0 +1,15 @@
1
+ apiVersion: v1
2
+ kind: Pod
3
+ metadata:
4
+ name: "{{ include "if.fullname" . }}-test-connection"
5
+ labels:
6
+ {{- include "if.labels" . | nindent 4 }}
7
+ annotations:
8
+ "helm.sh/hook": test
9
+ spec:
10
+ containers:
11
+ - name: wget
12
+ image: busybox
13
+ command: ['wget']
14
+ args: ['{{ include "if.fullname" . }}:{{ .Values.service.port }}']
15
+ restartPolicy: Never
@@ -0,0 +1,175 @@
1
+ # This will set the replicaset count more information can be found here: https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/
2
+ replicaCount: 1
3
+
4
+ # This sets the container image more information can be found here: https://kubernetes.io/docs/concepts/containers/images/
5
+ image:
6
+ repository: ghcr.io/green-software-foundation/if
7
+ # This sets the pull policy for images.
8
+ pullPolicy: IfNotPresent
9
+ # Overrides the image tag whose default is the chart appVersion.
10
+ tag: ""
11
+
12
+ # This is for the secrets for pulling an image from a private repository more information can be found here: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
13
+ imagePullSecrets: []
14
+ # This is to override the chart name.
15
+ nameOverride: ""
16
+ fullnameOverride: ""
17
+
18
+ # This section builds out the service account more information can be found here: https://kubernetes.io/docs/concepts/security/service-accounts/
19
+ serviceAccount:
20
+ # Specifies whether a service account should be created
21
+ create: true
22
+ # Automatically mount a ServiceAccount's API credentials?
23
+ automount: false
24
+ # Annotations to add to the service account
25
+ annotations: {}
26
+ # The name of the service account to use.
27
+ # If not set and create is true, a name is generated using the fullname template
28
+ name: ""
29
+
30
+ # This is for setting Kubernetes Annotations to a Pod.
31
+ # For more information checkout: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
32
+ podAnnotations: {}
33
+ # This is for setting Kubernetes Labels to a Pod.
34
+ # For more information checkout: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
35
+ podLabels: {}
36
+
37
+ podSecurityContext: {}
38
+ # fsGroup: 2000
39
+
40
+ securityContext:
41
+ capabilities:
42
+ drop:
43
+ - ALL
44
+ runAsNonRoot: true
45
+
46
+ # This is for setting up a service more information can be found here: https://kubernetes.io/docs/concepts/services-networking/service/
47
+ service:
48
+ # This sets the service type more information can be found here: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types
49
+ type: ClusterIP
50
+ # This sets the ports more information can be found here: https://kubernetes.io/docs/concepts/services-networking/service/#field-spec-ports
51
+ port: 3000
52
+ nodePort: ~
53
+ annotations: {}
54
+ loadBalancerClass: ""
55
+
56
+ # This block is for setting up the ingress for more information can be found here: https://kubernetes.io/docs/concepts/services-networking/ingress/
57
+ ingress:
58
+ enabled: false
59
+ className: ""
60
+ annotations: {}
61
+ # kubernetes.io/ingress.class: nginx
62
+ # kubernetes.io/tls-acme: "true"
63
+ hosts:
64
+ - host: if.local
65
+ paths:
66
+ - path: /v1
67
+ pathType: Prefix
68
+ tls: []
69
+ # - secretName: if-tls
70
+ # hosts:
71
+ # - if.local
72
+
73
+ resources: {}
74
+ # We usually recommend not to specify default resources and to leave this as a conscious
75
+ # choice for the user. This also increases chances charts run on environments with little
76
+ # resources, such as Minikube. If you do want to specify resources, uncomment the following
77
+ # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
78
+ # limits:
79
+ # cpu: 100m
80
+ # memory: 128Mi
81
+ # requests:
82
+ # cpu: 100m
83
+ # memory: 128Mi
84
+
85
+ # This is to setup the liveness, readiness and startup probes more information can be found here: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
86
+ livenessProbe:
87
+ httpGet:
88
+ path: /health
89
+ port: http
90
+ readinessProbe:
91
+ httpGet:
92
+ path: /health
93
+ port: http
94
+ failureThreshold: 1
95
+ startupProbe:
96
+ httpGet:
97
+ path: /health
98
+ port: http
99
+ failureThreshold: 30
100
+
101
+ # This section is for setting up autoscaling more information can be found here: https://kubernetes.io/docs/concepts/workloads/autoscaling/
102
+ autoscaling:
103
+ enabled: false
104
+ minReplicas: 1
105
+ maxReplicas: 100
106
+ targetCPUUtilizationPercentage: 80
107
+ # targetMemoryUtilizationPercentage: 80
108
+
109
+ # Additional volumes on the output Deployment definition.
110
+ volumes: []
111
+ # - name: foo
112
+ # secret:
113
+ # secretName: mysecret
114
+ # optional: false
115
+
116
+ # Additional volumeMounts on the output Deployment definition.
117
+ volumeMounts: []
118
+ # - name: foo
119
+ # mountPath: "/etc/foo"
120
+ # readOnly: true
121
+
122
+ nodeSelector: {}
123
+
124
+ tolerations: []
125
+
126
+ affinity: {}
127
+
128
+ # Specify external plugins to be installed at startup as an array.
129
+ # Used as arguments for npm install. For available formats, refer to: https://docs.npmjs.com/cli/v8/commands/npm-install
130
+ additionalPlugins: []
131
+
132
+ # Specify .npmrc content. Required in either of the following cases:
133
+ # - When external plugins or their dependencies are private.
134
+ # - When external plugins or their dependencies are in GitHub Packages.
135
+ npmrc: ""
136
+
137
+ # Specify environment variables.
138
+ env:
139
+ # Specify environment variables to be stored in a Secret.
140
+ secret: {}
141
+ # Specify environment variables to be stored in a ConfigMap.
142
+ configMap: {}
143
+ # Settings for using the contents of an existing Secret as environment variables.
144
+ existingSecret:
145
+ # Name of the existing Secret.
146
+ name: ""
147
+ # Prefix to add to environment variable names.
148
+ prefix: ""
149
+ # Settings for using the contents of an existing ConfigMap as environment variables.
150
+ existingConfigMap:
151
+ # Name of the existing ConfigMap.
152
+ name: ""
153
+ # Prefix to add to environment variable names.
154
+ prefix: ""
155
+
156
+ # Container startup command arguments
157
+ args:
158
+ - if-api
159
+ - --disabledPlugins
160
+ - /app/disabledPlugins.txt
161
+
162
+ # List of plugins to disable. Specify as an array in the form of "pluginPath:methodName".
163
+ # Plugins specified here cannot be used even if they are installed.
164
+ # Default values are builtin:Shell which can execute arbitrary commands, and
165
+ # builtin:CSVImport, builtin:CSVLookup which could potentially read files inside the container.
166
+ disabledPlugins:
167
+ - builtin:Shell
168
+ - builtin:CSVImport
169
+ - builtin:CSVLookup
170
+
171
+ # Suppress warnings in log when using external plugins
172
+ disableExternalPluginWarning: false
173
+
174
+ # Output debug logs
175
+ debug: false
@@ -0,0 +1,173 @@
1
+ name: aggregation-error-wrong-metric
2
+ description: a negative test case that fails due to the aggregation feature being passed an incorrect metric
3
+ tags:
4
+ aggregation:
5
+ metrics:
6
+ - "dummy-param"
7
+ type: "both"
8
+ initialize:
9
+ plugins:
10
+ "interpolate":
11
+ method: Interpolation
12
+ path: 'builtin'
13
+ config:
14
+ method: linear
15
+ x: [0, 10, 50, 100]
16
+ y: [0.12, 0.32, 0.75, 1.02]
17
+ input-parameter: 'cpu/utilization'
18
+ output-parameter: 'cpu-factor'
19
+ "cpu-factor-to-wattage":
20
+ method: Multiply
21
+ path: builtin
22
+ config:
23
+ input-parameters: ["cpu-factor", "cpu/thermal-design-power"]
24
+ output-parameter: "cpu-wattage"
25
+ "wattage-times-duration":
26
+ method: Multiply
27
+ path: builtin
28
+ config:
29
+ input-parameters: ["cpu-wattage", "duration"]
30
+ output-parameter: "cpu-wattage-times-duration"
31
+ "wattage-to-energy-kwh":
32
+ method: Divide
33
+ path: "builtin"
34
+ config:
35
+ numerator: cpu-wattage-times-duration
36
+ denominator: 3600000
37
+ output: cpu-energy-raw
38
+ "calculate-vcpu-ratio":
39
+ method: Divide
40
+ path: "builtin"
41
+ config:
42
+ numerator: vcpus-total
43
+ denominator: vcpus-allocated
44
+ output: vcpu-ratio
45
+ "correct-cpu-energy-for-vcpu-ratio":
46
+ method: Divide
47
+ path: "builtin"
48
+ config:
49
+ numerator: cpu-energy-raw
50
+ denominator: vcpu-ratio
51
+ output: cpu-energy-kwh
52
+ "sci-embodied":
53
+ path: "builtin"
54
+ method: SciEmbodied
55
+ "operational-carbon":
56
+ method: Multiply
57
+ path: builtin
58
+ config:
59
+ input-parameters: ["cpu-energy-kwh", "grid/carbon-intensity"]
60
+ output-parameter: "carbon"
61
+ "sci":
62
+ path: "builtin"
63
+ method: Sci
64
+ config:
65
+ functional-unit: "requests"
66
+ "time-sync":
67
+ method: TimeSync
68
+ path: "builtin"
69
+ config:
70
+ start-time: "2023-12-12T00:00:00.000Z"
71
+ end-time: "2023-12-12T00:01:00.000Z"
72
+ interval: 5
73
+ allow-padding: true
74
+ tree:
75
+ children:
76
+ child-1:
77
+ pipeline:
78
+ regroup:
79
+ - cloud/region
80
+ - cloud/instance-type
81
+ compute:
82
+ - interpolate
83
+ - cpu-factor-to-wattage
84
+ - wattage-times-duration
85
+ - wattage-to-energy-kwh
86
+ - calculate-vcpu-ratio
87
+ - correct-cpu-energy-for-vcpu-ratio
88
+ - sci-embodied
89
+ - operational-carbon
90
+ - time-sync
91
+ - sci
92
+ defaults:
93
+ cpu/thermal-design-power: 100
94
+ grid/carbon-intensity: 800
95
+ device/emissions-embodied: 1533.120 # gCO2eq
96
+ time-reserved: 3600 # 1hr in seconds
97
+ device/expected-lifespan: 94608000 # 3 years in seconds
98
+ vcpus-allocated: 1
99
+ vcpus-total: 8
100
+ inputs:
101
+ - timestamp: "2023-12-12T00:00:00.000Z"
102
+ cloud/instance-type: A1
103
+ cloud/region: uk-west
104
+ duration: 1
105
+ cpu/utilization: 10
106
+ requests: 100
107
+ - timestamp: "2023-12-12T00:00:01.000Z"
108
+ duration: 5
109
+ cpu/utilization: 20
110
+ cloud/instance-type: A1
111
+ cloud/region: uk-west
112
+ requests: 100
113
+ - timestamp: "2023-12-12T00:00:06.000Z"
114
+ duration: 7
115
+ cpu/utilization: 15
116
+ cloud/instance-type: A1
117
+ cloud/region: uk-west
118
+ requests: 100
119
+ - timestamp: "2023-12-12T00:00:13.000Z"
120
+ duration: 30
121
+ cloud/instance-type: A1
122
+ cloud/region: uk-west
123
+ cpu/utilization: 15
124
+ requests: 100
125
+ child-2:
126
+ pipeline:
127
+ regroup:
128
+ - cloud/region
129
+ - cloud/instance-type
130
+ compute:
131
+ - interpolate
132
+ - cpu-factor-to-wattage
133
+ - wattage-times-duration
134
+ - wattage-to-energy-kwh
135
+ - calculate-vcpu-ratio
136
+ - correct-cpu-energy-for-vcpu-ratio
137
+ - sci-embodied
138
+ - operational-carbon
139
+ - time-sync
140
+ - sci
141
+ defaults:
142
+ cpu/thermal-design-power: 100
143
+ grid/carbon-intensity: 800
144
+ device/emissions-embodied: 1533.120 # gCO2eq
145
+ time-reserved: 3600 # 1hr in seconds
146
+ device/expected-lifespan: 94608000 # 3 years in seconds
147
+ vcpus-allocated: 1
148
+ vcpus-total: 8
149
+ inputs:
150
+ - timestamp: "2023-12-12T00:00:00.000Z"
151
+ duration: 1
152
+ cpu/utilization: 30
153
+ cloud/instance-type: A1
154
+ cloud/region: uk-west
155
+ requests: 100
156
+ - timestamp: "2023-12-12T00:00:01.000Z"
157
+ duration: 5
158
+ cpu/utilization: 28
159
+ cloud/instance-type: A1
160
+ cloud/region: uk-west
161
+ requests: 100
162
+ - timestamp: "2023-12-12T00:00:06.000Z"
163
+ duration: 7
164
+ cpu/utilization: 40
165
+ cloud/instance-type: A1
166
+ cloud/region: uk-west
167
+ requests: 100
168
+ - timestamp: "2023-12-12T00:00:13.000Z"
169
+ duration: 30
170
+ cpu/utilization: 33
171
+ cloud/instance-type: A1
172
+ cloud/region: uk-west
173
+ requests: 100
@@ -0,0 +1,25 @@
1
+ name: input-error-missing-duration
2
+ description: a negative test case that fails due to the required `duration` field being omitted from input data
3
+ tags:
4
+ initialize:
5
+ plugins:
6
+ "interpolate":
7
+ method: Interpolation
8
+ path: builtin
9
+ config:
10
+ method: linear
11
+ x: [0, 10, 50, 100]
12
+ y: [0.12, 0.32, 0.75, 1.02]
13
+ input-parameter: 'cpu/utilization'
14
+ output-parameter: 'cpu-factor'
15
+ tree:
16
+ children:
17
+ child-0:
18
+ defaults:
19
+ cpu/thermal-design-power: 100
20
+ pipeline:
21
+ compute:
22
+ - interpolate
23
+ inputs:
24
+ - timestamp: 2023-07-06T00:00
25
+ cpu/utilization: 20
@@ -0,0 +1,33 @@
1
+ name: mock-observation-demo
2
+ description: a manifest demonstrating how to use the mock observations feature
3
+ tags:
4
+ initialize:
5
+ plugins:
6
+ mock-observations:
7
+ method: MockObservations
8
+ path: "builtin"
9
+ config:
10
+ timestamp-from: 2023-07-06T00:00
11
+ timestamp-to: 2023-07-06T00:10
12
+ duration: 0
13
+ components:
14
+ - cloud/instance-type: A1
15
+ - cloud/instance-type: B1
16
+ generators:
17
+ common:
18
+ region: uk-west
19
+ common-key: common-val
20
+ randint:
21
+ cpu/utilization:
22
+ min: 1
23
+ max: 99
24
+ memory/utilization:
25
+ min: 1
26
+ max: 99
27
+ tree:
28
+ children:
29
+ child:
30
+ pipeline:
31
+ observe:
32
+ - mock-observations
33
+ inputs:
@@ -0,0 +1,32 @@
1
+ name: pipeline-error-naming-mismatch
2
+ description: a negative test case that fails due to the plugin name in the pipeline not matching the name given in initialize
3
+ tags:
4
+ initialize:
5
+ plugins:
6
+ "interpolate":
7
+ method: Interpolation
8
+ path: builtin
9
+ config:
10
+ method: linear
11
+ x: [0, 10, 50, 100]
12
+ y: [0.12, 0.32, 0.75, 1.02]
13
+ input-parameter: 'cpu/utilization'
14
+ output-parameter: 'cpu-factor'
15
+ tree:
16
+ children:
17
+ child-0:
18
+ defaults:
19
+ cpu/thermal-design-power: 100
20
+ pipeline:
21
+ compute:
22
+ - wrong-name
23
+ inputs:
24
+ - timestamp: 2023-07-06T00:00
25
+ duration: 1
26
+ cpu/utilization: 20
27
+ - timestamp: 2023-07-06T00:01
28
+ duration: 1
29
+ cpu/utilization: 80
30
+ - timestamp: 2023-07-06T00:02
31
+ duration: 1
32
+ cpu/utilization: 20
@@ -0,0 +1,33 @@
1
+ name: pipeline-uninitialized-plugin-error
2
+ description: a negative test case that fails due to an uninitialized plugin being invoked in a pipeline
3
+ tags:
4
+ initialize:
5
+ plugins:
6
+ "interpolate":
7
+ method: Interpolation
8
+ path: builtin
9
+ config:
10
+ method: linear
11
+ x: [0, 10, 50, 100]
12
+ y: [0.12, 0.32, 0.75, 1.02]
13
+ input-parameter: 'cpu/utilization'
14
+ output-parameter: 'cpu-factor'
15
+ tree:
16
+ children:
17
+ child-0:
18
+ defaults:
19
+ cpu/thermal-design-power: 100
20
+ pipeline:
21
+ compute:
22
+ - interpolate
23
+ - multiply
24
+ inputs:
25
+ - timestamp: 2023-07-06T00:00
26
+ duration: 1
27
+ cpu/utilization: 20
28
+ - timestamp: 2023-07-06T00:01
29
+ duration: 1
30
+ cpu/utilization: 80
31
+ - timestamp: 2023-07-06T00:02
32
+ duration: 1
33
+ cpu/utilization: 20
@@ -0,0 +1,91 @@
1
+ name: pipeline-ordering-error
2
+ description: a negative test case that fails because sci-o is invoked too early in the pipeline (before its inputs are generated)
3
+ tags:
4
+ initialize:
5
+ plugins:
6
+ "interpolate":
7
+ method: Interpolation
8
+ path: 'builtin'
9
+ config:
10
+ method: linear
11
+ x: [0, 10, 50, 100]
12
+ y: [0.12, 0.32, 0.75, 1.02]
13
+ input-parameter: 'cpu/utilization'
14
+ output-parameter: 'cpu-factor'
15
+ "cpu-factor-to-wattage":
16
+ method: Multiply
17
+ path: builtin
18
+ config:
19
+ input-parameters: ["cpu-factor", "cpu/thermal-design-power"]
20
+ output-parameter: "cpu-wattage"
21
+ "wattage-times-duration":
22
+ method: Multiply
23
+ path: builtin
24
+ config:
25
+ input-parameters: ["cpu-wattage", "duration"]
26
+ output-parameter: "cpu-wattage-times-duration"
27
+ "wattage-to-energy-kwh":
28
+ method: Divide
29
+ path: "builtin"
30
+ config:
31
+ numerator: cpu-wattage-times-duration
32
+ denominator: 3600000
33
+ output: cpu-energy-raw
34
+ "calculate-vcpu-ratio":
35
+ method: Divide
36
+ path: "builtin"
37
+ config:
38
+ numerator: vcpus-total
39
+ denominator: vcpus-allocated
40
+ output: vcpu-ratio
41
+ "correct-cpu-energy-for-vcpu-ratio":
42
+ method: Divide
43
+ path: "builtin"
44
+ config:
45
+ numerator: cpu-energy-raw
46
+ denominator: vcpu-ratio
47
+ output: cpu-energy-kwh
48
+ tree:
49
+ children:
50
+ child-1:
51
+ pipeline:
52
+ compute:
53
+ - interpolate
54
+ - correct-cpu-energy-for-vcpu-ratio
55
+ - calculate-vcpu-ratio
56
+ - cpu-factor-to-wattage
57
+ - wattage-times-duration
58
+ - wattage-to-energy-kwh
59
+ defaults:
60
+ cpu/thermal-design-power: 100
61
+ grid/carbon-intensity: 800
62
+ device/emissions-embodied: 1533.120 # gCO2eq
63
+ time-reserved: 3600 # 1hr in seconds
64
+ device/expected-lifespan: 94608000 # 3 years in seconds
65
+ vcpus-allocated: 1
66
+ vcpus-total: 8
67
+ inputs:
68
+ - timestamp: "2023-12-12T00:00:00.000Z"
69
+ cloud/instance-type: A1
70
+ cloud/region: uk-west
71
+ duration: 1
72
+ cpu/utilization: 50
73
+ network/energy: 0.000001
74
+ - timestamp: "2023-12-12T00:00:01.000Z"
75
+ duration: 5
76
+ cpu/utilization: 20
77
+ cloud/instance-type: A1
78
+ cloud/region: uk-west
79
+ network/energy: 0.000001
80
+ - timestamp: "2023-12-12T00:00:06.000Z"
81
+ duration: 7
82
+ cpu/utilization: 15
83
+ cloud/instance-type: A1
84
+ cloud/region: uk-west
85
+ network/energy: 0.000001
86
+ - timestamp: "2023-12-12T00:00:13.000Z"
87
+ duration: 30
88
+ cloud/instance-type: A1
89
+ cloud/region: uk-west
90
+ cpu/utilization: 15
91
+ network/energy: 0.000001
@@ -0,0 +1,36 @@
1
+ name: divide
2
+ description: denominator is invalid, denominator is
3
+ tags:
4
+ initialize:
5
+ plugins:
6
+ cloud-metadata:
7
+ path: builtin
8
+ method: CSVLookup
9
+ config:
10
+ filepath: >-
11
+ https://raw.githubusercontent.com/Green-Software-Foundation/if-data/main/cloud-metdata-aws-instances.csv
12
+ query:
13
+ instance-class: cloud/instance-type
14
+ output: ["cpu-cores-utilized", "vcpus-allocated"]
15
+ divide:
16
+ method: Divide
17
+ path: "builtin"
18
+ config:
19
+ numerator: vcpus-allocated
20
+ denominator: 0
21
+ output: cpu/number-cores
22
+ tree:
23
+ children:
24
+ child:
25
+ pipeline:
26
+ compute:
27
+ - cloud-metadata
28
+ - divide
29
+ defaults:
30
+ cloud/vendor: aws
31
+ cloud/instance-type: m5n.large
32
+ cpu/name: Intel® Core™ i7-1185G7
33
+ inputs:
34
+ - timestamp: 2023-08-06T00:00
35
+ duration: 3600
36
+ cpu/utilization: 80
@@ -4,7 +4,6 @@ tags:
4
4
  initialize:
5
5
  plugins:
6
6
  mock-observations:
7
- kind: plugin
8
7
  method: MockObservations
9
8
  path: "builtin"
10
9
  config:
@@ -4,7 +4,6 @@ tags:
4
4
  initialize:
5
5
  plugins:
6
6
  mock-observations:
7
- kind: plugin
8
7
  method: MockObservations
9
8
  path: "builtin"
10
9
  config:
@@ -4,7 +4,6 @@ tags:
4
4
  initialize:
5
5
  plugins:
6
6
  mock-observations:
7
- kind: plugin
8
7
  method: MockObservations
9
8
  path: "builtin"
10
9
  config:
@@ -4,7 +4,6 @@ tags:
4
4
  initialize:
5
5
  plugins:
6
6
  mock-observations:
7
- kind: plugin
8
7
  method: MockObservations
9
8
  path: "builtin"
10
9
  config: