Skip to content

Commit 6a811b8

Browse files
authored
More user measurement configurations (#1263)
* Making more user settings configurable via Dashboard * Added missing capability configurations; Fixed tests * More test fixes * Test fix [skip ci]
1 parent 7e3f02c commit 6a811b8

17 files changed

+356
-62
lines changed

config.yml.example

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -77,16 +77,7 @@ machine:
7777
base_temperature_feature: False
7878

7979
measurement:
80-
system_check_threshold: 3 # Can be 1=INFO, 2=WARN or 3=ERROR
81-
pre_test_sleep: 5
82-
idle_duration: 10
83-
baseline_duration: 5
84-
post_test_sleep: 5
85-
phase_transition_time: 1
86-
boot:
87-
wait_time_dependencies: 60
8880
metric_providers:
89-
9081
# Please select the needed providers according to the working ones on your system
9182
# More info https://docs.green-coding.io/docs/measuring/metric-providers
9283
# Please activate and deactivate any provider in this list by uncommenting it.

docker/structure.sql

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,15 @@ VALUES (
4646
"measurement.disabled_metric_providers",
4747
"measurement.flow_process_duration",
4848
"measurement.total_duration",
49-
"measurement.phase_padding"
49+
"measurement.phase_padding",
50+
"measurement.system_check_threshold",
51+
"measurement.pre_test_sleep",
52+
"measurement.idle_duration",
53+
"measurement.baseline_duration",
54+
"measurement.post_test_sleep",
55+
"measurement.phase_transition_time",
56+
"measurement.wait_time_dependencies",
57+
"measurement.skip_volume_inspect"
5058
]
5159
},
5260
"api": {
@@ -108,8 +116,19 @@ VALUES (
108116
"quotas": {},
109117
"dev_no_sleeps": false,
110118
"dev_no_optimizations": false,
119+
"allow_unsafe": false,
120+
"skip_unsafe": true,
121+
"skip_system_checks": false,
122+
"skip_volume_inspect": false,
111123
"total_duration": 86400,
112124
"flow_process_duration": 86400,
125+
"system_check_threshold": 3,
126+
"pre_test_sleep": 5,
127+
"baseline_duration": 60,
128+
"idle_duration": 60,
129+
"post_test_sleep": 5,
130+
"phase_transition_time": 1,
131+
"wait_time_dependencies": 60,
113132
"orchestrators": {
114133
"docker": {
115134
"allowed_run_args": []

frontend/js/settings.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,17 @@ const getSettings = async () => {
2626
if (data?.data?._capabilities?.measurement?.dev_no_optimizations === true) document.querySelector('#measurement-dev-no-optimizations').checked = true;
2727
if (data?.data?._capabilities?.measurement?.dev_no_sleeps === true) document.querySelector('#measurement-dev-no-sleeps').checked = true;
2828
if (data?.data?._capabilities?.measurement?.phase_padding === true) document.querySelector('#measurement-phase-padding').checked = true;
29+
if (data?.data?._capabilities?.measurement?.skip_volume_inspect === true) document.querySelector('#measurement-skip-volume-inspect').checked = true;
2930
document.querySelector('#measurement-flow-process-duration').value = data?.data?._capabilities?.measurement?.flow_process_duration;
3031
document.querySelector('#measurement-total-duration').value = data?.data?._capabilities?.measurement?.total_duration;
3132
$('#measurement-disabled-metric-providers').dropdown('set exactly', data?.data?._capabilities?.measurement?.disabled_metric_providers);
33+
document.querySelector('#measurement-system-check-threshold').value = data?.data?._capabilities?.measurement?.system_check_threshold;
34+
document.querySelector('#measurement-pre-test-sleep').value = data?.data?._capabilities?.measurement?.pre_test_sleep;
35+
document.querySelector('#measurement-idle-duration').value = data?.data?._capabilities?.measurement?.idle_duration;
36+
document.querySelector('#measurement-baseline-duration').value = data?.data?._capabilities?.measurement?.baseline_duration;
37+
document.querySelector('#measurement-post-test-sleep').value = data?.data?._capabilities?.measurement?.post_test_sleep;
38+
document.querySelector('#measurement-phase-transition-time').value = data?.data?._capabilities?.measurement?.phase_transition_time;
39+
document.querySelector('#measurement-wait-time-dependencies').value = data?.data?._capabilities?.measurement?.wait_time_dependencies;
3240
} catch (err) {
3341
showNotification('Could not load settings', err);
3442
}

frontend/settings.html

Lines changed: 65 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,15 @@ <h1 class="ui header float left"><a id="menu-toggle" class="opened"><i class="ba
9696
</thead>
9797
<tbody>
9898
<tr>
99-
<td>Disable providers</td>
99+
<td>System check threshold<br>
100+
<span><small><i class="question circle icon"></i>Can be 1=INFO, 2=WARN or 3=ERROR. When set on 3 runs will fail only on erros, when 2 then also on warnings and 1 also on pure info statements.</small></span>
101+
</td>
102+
<td><input type="text" placeholder="Input a value" id="measurement-system-check-threshold" name="measurement-system-check-threshold" data-setting="measurement.system_check_threshold" required=""></td>
103+
<td><button id="save-measurement-system-check-threshold" class="ui positive small button" onclick="updateSetting(this);">Save</button></td>
104+
</tr>
105+
<tr>
106+
<td>Disable providers<br>
107+
<span><small><i class="question circle icon"></i>Deactivates a provider even if configured on the machine. Use only if you experience errors with a provider.</small></span>
100108
<td>
101109
<select id="measurement-disabled-metric-providers" multiple="" class="ui multiple search selection dropdown" data-setting="measurement.disabled_metric_providers">
102110
<option value="">Select Metrics Provider</option>
@@ -107,20 +115,68 @@ <h1 class="ui header float left"><a id="menu-toggle" class="opened"><i class="ba
107115
<td><button id="save-measurement-disabled-metric-providers" class="ui positive small button" onclick="updateSetting(this);">Save</button></td>
108116
</tr>
109117
<tr>
110-
<td>Maximum flow process duration</td>
118+
<td>Maximum flow process duration<br>
119+
<span><small><i class="question circle icon"></i>Value is in seconds.</small></span>
120+
</td>
111121
<td><input type="text" placeholder="Input a value" id="measurement-flow-process-duration" name="measurement-flow-process-duration" data-setting="measurement.flow_process_duration" required=""></td>
112122
<td><button id="save-measurement-flow-process-duration" class="ui positive small button" onclick="updateSetting(this);">Save</button></td>
113123
</tr>
114124
<tr>
115-
<td>Maximum total duration</td>
125+
<td>Maximum total duration<br>
126+
<span><small><i class="question circle icon"></i>Value is in seconds.</small></span>
127+
</td>
116128
<td><input type="text" placeholder="Input a value" id="measurement-total-duration" name="measurement-total-duration" data-setting="measurement.total_duration" required="" ></td>
117129
<td><button id="save-measurement-total-duration" class="ui positive small button" onclick="updateSetting(this);">Save</button></td>
118130
</tr>
119131
<tr>
120-
<td>Phase padding</td>
132+
<td>Phase padding<br>
133+
<span><small><i class="question circle icon"></i>Determines if phases shall be padded to account for possible undersampling. Only turn off when you need nanosecond exact cut-offs from measurements and favor undersampling instead of capturing partial samples.</small></span>
134+
</td>
121135
<td><input type="checkbox" id="measurement-phase-padding" name="measurement-phase-padding" data-setting="measurement.phase_padding"></td>
122136
<td><button id="save-measurement-phase-padding" class="ui positive small button" onclick="updateSetting(this);">Save</button></td>
123137
</tr>
138+
<tr>
139+
<td>Pre-test sleep<br>
140+
<span><small><i class="question circle icon"></i>Value is in seconds.</small></span>
141+
</td>
142+
<td><input type="text" placeholder="Input a value" id="measurement-pre-test-sleep" name="measurement-pre-test-sleep" data-setting="measurement.pre_test_sleep" required=""></td>
143+
<td><button id="save-measurement-pre-test-sleep" class="ui positive small button" onclick="updateSetting(this);">Save</button></td>
144+
</tr>
145+
<tr>
146+
<td>Baseline duration<br>
147+
<span><small><i class="question circle icon"></i>Value is in seconds. We recommend 60 seconds at least to get stable baseline for runtime overhead calculations.</small></span>
148+
</td>
149+
<td><input type="text" placeholder="Input a value" id="measurement-baseline-duration" name="measurement-baseline-duration" data-setting="measurement.baseline_duration" required=""></td>
150+
<td><button id="save-measurement-baseline-duration" class="ui positive small button" onclick="updateSetting(this);">Save</button></td>
151+
</tr>
152+
<tr>
153+
<td>Idle duration<br>
154+
<span><small><i class="question circle icon"></i>Value is in seconds. We recommend 60 seconds at least to get stable baseline for runtime overhead calculations.</small></span>
155+
</td>
156+
<td><input type="text" placeholder="Input a value" id="measurement-idle-duration" name="measurement-idle-duration" data-setting="measurement.idle_duration" required=""></td>
157+
<td><button id="save-measurement-idle-duration" class="ui positive small button" onclick="updateSetting(this);">Save</button></td>
158+
</tr>
159+
<tr>
160+
<td>Post-test sleep<br>
161+
<span><small><i class="question circle icon"></i>Value is in seconds. Should be 10 seconds minimum when doing Blue Angel measurements.</small></span>
162+
</td>
163+
<td><input type="text" placeholder="Input a value" id="measurement-post-test-sleep" name="measurement-post-test-sleep" data-setting="measurement.post_test_sleep" required=""></td>
164+
<td><button id="save-measurement-post-test-sleep" class="ui positive small button" onclick="updateSetting(this);">Save</button></td>
165+
</tr>
166+
<tr>
167+
<td>Phase transition time<br>
168+
<span><small><i class="question circle icon"></i>Value is in seconds.</small></span>
169+
</td>
170+
<td><input type="text" placeholder="Input a value" id="measurement-phase-transition-time" name="measurement-phase-transition-time" data-setting="measurement.phase_transition_time" required=""></td>
171+
<td><button id="save-measurement-phase-transition-time" class="ui positive small button" onclick="updateSetting(this);">Save</button></td>
172+
</tr>
173+
<tr>
174+
<td>Wait time for dependencies<br>
175+
<span><small><i class="question circle icon"></i>Value is in seconds.</small></span>
176+
</td>
177+
<td><input type="text" placeholder="Input a value" id="measurement-wait-time-dependencies" name="measurement-wait-time-dependencies" data-setting="measurement.wait_time_dependencies" required=""></td>
178+
<td><button id="save-measurement-wait-time-dependencies" class="ui positive small button" onclick="updateSetting(this);">Save</button></td>
179+
</tr>
124180
<tr>
125181
<td>(DEV) No Sleeps during run<br><span><small><i class="question circle icon"></i>You can use this while developing to speed up runs on the cluster. However it will make the measurement invalid as important cooldown times are skipped.</small></span></td>
126182
<td><input type="checkbox" id="measurement-dev-no-sleeps" name="measurement-dev-no-sleeps" data-setting="measurement.dev_no_sleeps"></td>
@@ -131,6 +187,11 @@ <h1 class="ui header float left"><a id="menu-toggle" class="opened"><i class="ba
131187
<td><input type="checkbox" id="measurement-dev-no-optimizations" name="measurement-dev-no-optimizations" data-setting="measurement.dev_no_optimizations"></td>
132188
<td><button id="save-measurement-dev-no-optimizations" class="ui positive small button" onclick="updateSetting(this);">Save</button></td>
133189
</tr>
190+
<tr>
191+
<td>(DEV) Skip volume inspect<br><span><small><i class="question circle icon"></i>You can use this while developing to speed up runs on the cluster if you are not interested in the volume sizes or experience errors with shared non-readable volumes.</small></span></td>
192+
<td><input type="checkbox" id="measurement-skip-volume-inspect" name="easurement-skip-volume-inspect" data-setting="measurement.skip_volume_inspect"></td>
193+
<td><button id="save-measurement-skip-volume-inspect" class="ui positive small button" onclick="updateSetting(this);">Save</button></td>
194+
</tr>
134195
<!--
135196
<tr>
136197
<td>Kill running measurements</td>

lib/job/run.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,21 +42,30 @@ def _process(self, docker_prune=False, full_docker_prune=False):
4242
uri_type='URL',
4343
filename=self._filename,
4444
branch=self._branch,
45-
skip_unsafe=user._capabilities['measurement'].get('skip_unsafe', True),
46-
allow_unsafe=user._capabilities['measurement'].get('allow_unsafe', False),
47-
skip_system_checks=skip_system_checks,
48-
skip_volume_inspect=user._capabilities['measurement'].get('skip_volume_inspect', False),
49-
full_docker_prune=full_docker_prune,
50-
docker_prune=docker_prune,
45+
skip_unsafe=user._capabilities['measurement']['skip_unsafe'],
46+
allow_unsafe=user._capabilities['measurement']['allow_unsafe'],
47+
skip_system_checks=user._capabilities['measurement']['skip_system_checks'],
48+
skip_volume_inspect=user._capabilities['measurement']['skip_volume_inspect'],
49+
full_docker_prune=full_docker_prune, # is no user setting as it can change behaviour of subsequent runs. Thus set by machine / cluster
50+
docker_prune=docker_prune, # is no user setting as it can change behaviour of subsequent runs. Thus set by machine / cluster
5151
job_id=self._id,
5252
user_id=self._user_id,
5353
usage_scenario_variables=self._usage_scenario_variables,
5454
measurement_flow_process_duration=user._capabilities['measurement']['flow_process_duration'],
55-
dev_no_sleeps=user._capabilities['measurement'].get('dev_no_sleeps', False),
56-
dev_no_optimizations=user._capabilities['measurement'].get('dev_no_optimizations', False),
5755
measurement_total_duration=user._capabilities['measurement']['total_duration'],
56+
measurement_system_check_threshold=user._capabilities['measurement']['system_check_threshold'],
57+
measurement_pre_test_sleep=user._capabilities['measurement']['pre_test_sleep'],
58+
measurement_idle_duration=user._capabilities['measurement']['idle_duration'],
59+
measurement_baseline_duration=user._capabilities['measurement']['baseline_duration'],
60+
measurement_post_test_sleep=user._capabilities['measurement']['post_test_sleep'],
61+
measurement_phase_transition_time=user._capabilities['measurement']['phase_transition_time'],
62+
measurement_wait_time_dependencies=user._capabilities['measurement']['wait_time_dependencies'],
63+
dev_no_sleeps=user._capabilities['measurement']['dev_no_sleeps'],
64+
dev_no_optimizations=user._capabilities['measurement']['dev_no_optimizations'],
5865
disabled_metric_providers=user._capabilities['measurement']['disabled_metric_providers'],
5966
allowed_run_args=user._capabilities['measurement']['orchestrators']['docker']['allowed_run_args'], # They are specific to the orchestrator. However currently we only have one. As soon as we support more orchestrators we will sub-class Runner with dedicated child classes (DockerRunner, PodmanRunner etc.)
67+
68+
6069
)
6170
try:
6271
# Start main code. Only URL is allowed for cron jobs

0 commit comments

Comments
 (0)