Skip to content

Hidden phases feature #1135

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions frontend/css/green-coding.css
Original file line number Diff line number Diff line change
Expand Up @@ -340,6 +340,12 @@ a,
margin-top: 5px;
}

span.hidden-phase-name {
display: none;
}



/* Since we have a without href we need to force pointer */
a {
cursor: pointer;
Expand Down
27 changes: 25 additions & 2 deletions frontend/js/stats.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,16 @@ class CO2Tangible extends HTMLElement {

customElements.define('co2-tangible', CO2Tangible);

const showHiddenPhaseTab = (el) => {
if (el.currentTarget.classList.contains('hidden-phase-tab')) {
el.currentTarget.querySelector('.hidden-phase-name').style.display = 'block'
} else {
document.querySelectorAll('.hidden-phase-name').forEach(matched_el => {
matched_el.style.display = 'none'
})
}
}

const fetchAndFillRunData = async (url_params) => {

let run = null;
Expand All @@ -94,8 +104,20 @@ const fetchAndFillRunData = async (url_params) => {
document.querySelector("#logs").insertAdjacentHTML('beforeend', `<pre>${run_data?.[item]}</pre>`)
} else if(item == 'measurement_config') {
fillRunTab('#measurement-config', run_data[item]); // recurse
} else if(item == 'phases' || item == 'id') {
} else if(item == 'id') {
// skip
} else if(item == 'phases') {
Object.keys(run_data[item]).forEach(key => {
if (run_data[item][key]?.hidden == true) {
const tab = document.querySelector(`.item.runtime-step[data-tab="${run_data[item][key].name}"]`)
tab.innerHTML = `<i class="low vision icon"></i> <span class="hidden-phase-name">${tab.innerText}</span>`
tab.classList.add("hidden-phase-tab")
}
});
document.querySelectorAll('#runtime-sub-phases .item').forEach(el => {
el.addEventListener('click', showHiddenPhaseTab)
})

} else if(item == 'commit_hash') {
if (run_data?.[item] == null) continue; // some old runs did not save it
let commit_link = buildCommitLink(run_data);
Expand Down Expand Up @@ -466,13 +488,14 @@ $(document).ready( (e) => {
return;
}

fetchAndFillRunData(url_params);

fetchAndFillNetworkIntercepts(url_params);
fetchAndFillOptimizationsData(url_params);

(async () => { // since we need to wait for fetchAndFillPhaseStatsData we wrap in async so later calls cann already proceed
const phase_stats = await fetchAndFillPhaseStatsData(url_params);
renderBadges(url_params, phase_stats?.data?.data['[RUNTIME]']);
fetchAndFillRunData(url_params); // bc it will hide phases. TODO: Refactor this to have the data in the phase_stats_object. Is a bigger refactor though!
})();


Expand Down
6 changes: 3 additions & 3 deletions runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -1161,7 +1161,7 @@ def check_total_runtime_exceeded(self):
if self._measurement_total_duration and (time.time() - self.__start_measurement_seconds) > self._measurement_total_duration:
raise TimeoutError(f"Timeout of {self._measurement_total_duration} s was exceeded. This can be configured in the user authentication for 'total_duration'.")

def start_phase(self, phase, transition = True):
def start_phase(self, phase, *, hidden=False, transition=True):
config = GlobalConfig().config
print(TerminalColors.HEADER, f"\nStarting phase {phase}.", TerminalColors.ENDC)

Expand All @@ -1176,7 +1176,7 @@ def start_phase(self, phase, transition = True):
phase_time = int(time.time_ns() / 1_000)
self.__notes_helper.add_note({'note': f"Starting phase {phase}", 'detail_name': '[NOTES]', 'timestamp': phase_time})

self.__phases[phase] = {'start': phase_time, 'name': phase}
self.__phases[phase] = {'start': phase_time, 'name': phase, 'hidden': hidden}

def end_phase(self, phase):

Expand Down Expand Up @@ -1214,7 +1214,7 @@ def run_flows(self):
print(TerminalColors.HEADER, '\nRunning flow: ', flow['name'], TerminalColors.ENDC)

try:
self.start_phase(flow['name'], transition=False)
self.start_phase(flow['name'], hidden=flow.get('hidden', False), transition=False)

for cmd_obj in flow['commands']:
self.check_total_runtime_exceeded()
Expand Down
Loading