|
1 | 1 | "use strict"; |
2 | 2 |
|
3 | 3 | (async () => { |
| 4 | + const url_params = getURLParams() |
4 | 5 |
|
5 | | - const url_params = getURLParams() |
| 6 | + let normalized_url; |
| 7 | + try { |
| 8 | + normalized_url = normalizeUrl(url_params?.page); |
| 9 | + } catch (error) { |
| 10 | + alert('URL is invalid. Please enter a valid URL.') |
| 11 | + return; |
| 12 | + } |
6 | 13 |
|
7 | | - let normalized_url; |
8 | | - try { |
9 | | - normalized_url = normalizeUrl(url_params?.page); |
10 | | - } catch (error) { |
11 | | - alert('URL is invalid. Please enter a valid URL.') |
12 | | - return; |
13 | | - } |
| 14 | + // first we check if we already have a run in the last 30 days for this |
| 15 | + const last_run = await fetchData(1, normalized_url); |
| 16 | + if (last_run == null) { |
| 17 | + alert('A run for this URL does not exist. Did you follow a correct link?'); |
| 18 | + return |
| 19 | + } |
14 | 20 |
|
15 | | - // first we check if we already have a run in the last 30 days for this |
16 | | - const last_run = await fetchData(1, normalized_url); |
17 | | - if (last_run == null) { |
18 | | - alert('A run for this URL does not exist. Did you follow a correct link?'); |
19 | | - return |
20 | | - } |
| 21 | + const uuid = last_run[0][0]; |
| 22 | + const usage_scenario_variables = last_run[0][7]; |
| 23 | + const last_run_date = new Date(last_run[0][4]); |
| 24 | + let usage_scenario_variables_json = Object.entries(usage_scenario_variables).map(([k, v]) => typeof(v) == 'number' ? `"${k}": ${v}` : `"${k}": ${JSON.stringify(v)}`).join(', ') |
| 25 | + usage_scenario_variables_json = `{${usage_scenario_variables_json}}` |
21 | 26 |
|
22 | | - const uuid = last_run[0][0]; |
23 | | - const usage_scenario_variables = last_run[0][7]; |
24 | | - const last_run_date = new Date(last_run[0][4]); |
25 | | - let usage_scenario_variables_json = Object.entries(usage_scenario_variables).map(([k, v]) => typeof(v) == 'number' ? `"${k}": ${v}` : `"${k}": ${JSON.stringify(v)}`).join(', ') |
26 | | - usage_scenario_variables_json = `{${usage_scenario_variables_json}}` |
27 | 27 |
|
| 28 | + const phase_stats = await fetch(`https://api.green-coding.io/v1/phase_stats/single/${uuid}`).then(response => response.json()) |
28 | 29 |
|
29 | | - const phase_stats = await fetch(`https://api.green-coding.io/v1/phase_stats/single/${uuid}`).then(response => response.json()) |
| 30 | + const data = phase_stats.data; |
30 | 31 |
|
31 | | - const data = phase_stats.data; |
| 32 | + const cpu_energy_uJ = data?.['data']?.['Visit page and idle for 5 s']?.['data']?.['cpu_energy_rapl_msr_component']?.['data']?.['Package_0']?.['data']?.[uuid]?.['mean']; |
| 33 | + const cpu_energy_mWh = cpu_energy_uJ/3600/1000; |
| 34 | + const cpu_energy_10k_kWh = 10*cpu_energy_mWh/1000; |
32 | 35 |
|
33 | | - const cpu_energy_uJ = data?.['data']?.['Visit page and idle for 5 s']?.['data']?.['cpu_energy_rapl_msr_component']?.['data']?.['Package_0']?.['data']?.[uuid]?.['mean']; |
34 | | - const cpu_energy_mWh = cpu_energy_uJ/3600/1000; |
35 | | - const cpu_energy_10k_kWh = 10*cpu_energy_mWh/1000; |
| 36 | + const cpu_power_mW = data?.['data']?.['Visit page and idle for 5 s']?.['data']?.['cpu_power_rapl_msr_component']?.['data']?.['Package_0']?.['data']?.[uuid]?.['mean']; |
| 37 | + const cpu_power_W = cpu_power_mW / 1_000; |
36 | 38 |
|
37 | | - const cpu_power_mW = data?.['data']?.['Visit page and idle for 5 s']?.['data']?.['cpu_power_rapl_msr_component']?.['data']?.['Package_0']?.['data']?.[uuid]?.['mean']; |
38 | | - const cpu_power_W = cpu_power_mW / 1_000; |
| 39 | + const total_duration_us = data?.['data']?.['Visit page and idle for 5 s']?.['data']?.['phase_time_syscall_system']?.['data']?.['[SYSTEM]']?.['data']?.[uuid]?.['mean']; |
| 40 | + const total_duration_s = total_duration_us/1e6; |
39 | 41 |
|
40 | | - const total_duration_us = data?.['data']?.['Visit page and idle for 5 s']?.['data']?.['phase_time_syscall_system']?.['data']?.['[SYSTEM]']?.['data']?.[uuid]?.['mean']; |
41 | | - const total_duration_s = total_duration_us/1e6; |
| 42 | + const network_transfer_bytes = data?.['data']?.['Visit page and idle for 5 s']?.['data']?.['network_total_cgroup_container']?.['data']?.['gmt-playwright-nodejs']?.['data']?.[uuid]?.['mean']; |
| 43 | + const network_transfer_kb = network_transfer_bytes/1000; |
42 | 44 |
|
43 | | - const network_transfer_bytes = data?.['data']?.['Visit page and idle for 5 s']?.['data']?.['network_total_cgroup_container']?.['data']?.['gmt-playwright-nodejs']?.['data']?.[uuid]?.['mean']; |
44 | | - const network_transfer_kb = network_transfer_bytes/1000; |
| 45 | + const network_carbon_ug = data?.['data']?.['Visit page and idle for 5 s']?.['data']?.['network_carbon_formula_global']?.['data']?.['[FORMULA]']?.['data']?.[uuid]?.['mean']; |
| 46 | + const network_carbon_10k_kg = 10*12*network_carbon_ug/1e6 |
45 | 47 |
|
46 | | - const network_carbon_ug = data?.['data']?.['Visit page and idle for 5 s']?.['data']?.['network_carbon_formula_global']?.['data']?.['[FORMULA]']?.['data']?.[uuid]?.['mean']; |
47 | | - const network_carbon_10k_kg = 10*12*network_carbon_ug/1e6 |
48 | | - |
49 | | - const [render_energy_html, network_transfer_html] = getRatings(cpu_energy_mWh, network_transfer_kb); |
50 | | - |
51 | | - |
52 | | - document.querySelector('#website-name').textContent = usage_scenario_variables['__GMT_VAR_PAGE__']; |
53 | | - document.querySelector('#last-run-date').textContent = last_run_date; |
54 | | - document.querySelector('#rendering-energy-label').innerHTML = render_energy_html; |
55 | | - document.querySelector('#network-transfer-label').innerHTML = network_transfer_html; |
56 | | - |
57 | | - document.querySelector('#rendering-power').textContent = `${cpu_power_W.toFixed(2)} W`; |
58 | | - document.querySelector('#rendering-energy').textContent = `${(cpu_energy_mWh).toFixed(2)} mWh`; |
59 | | - document.querySelector('#rendering-energy-10k').textContent = `${(cpu_energy_10k_kWh).toFixed(2)} kWh`; |
60 | | - |
61 | | - document.querySelectorAll('.measurement-duration').forEach(el => el.textContent = `${(total_duration_s).toFixed(2)} s`); // in s |
62 | | - document.querySelector('#network-transfer').textContent = `${network_transfer_kb.toFixed(2)} kB`; |
63 | | - document.querySelector('#network-carbon-10k-year').textContent = `${(network_carbon_10k_kg).toFixed(2)} kg`; |
64 | | - |
65 | | - document.querySelector('#measurement-details-link').href = `https://metrics.green-coding.io/stats.html?id=${uuid}`; |
66 | | - document.querySelector('#timeline-link').href = `https://metrics.green-coding.io/timeline.html?uri=https%3A%2F%2Fgithub.com%2Fgreen-coding-solutions%2Fgreen-metrics-tool&branch=main&machine_id=6&filename=templates%2Fwebsite%2Fusage_scenario_cached.yml&usage_scenario_variables=${encodeURIComponent(usage_scenario_variables_json)}&metrics=key`; |
| 48 | + const [render_energy_html, network_transfer_html] = getRatings(cpu_energy_mWh, network_transfer_kb); |
67 | 49 |
|
| 50 | + document.title = "webNRG - " + usage_scenario_variables['__GMT_VAR_PAGE__']; |
| 51 | + document.querySelector('#website-name').textContent = usage_scenario_variables['__GMT_VAR_PAGE__']; |
| 52 | + document.querySelector('#last-run-date').textContent = last_run_date; |
| 53 | + document.querySelector('#rendering-energy-label').innerHTML = render_energy_html; |
| 54 | + document.querySelector('#network-transfer-label').innerHTML = network_transfer_html; |
68 | 55 |
|
| 56 | + document.querySelector('#rendering-power').textContent = `${cpu_power_W.toFixed(2)} W`; |
| 57 | + document.querySelector('#rendering-energy').textContent = `${(cpu_energy_mWh).toFixed(2)} mWh`; |
| 58 | + document.querySelector('#rendering-energy-10k').textContent = `${(cpu_energy_10k_kWh).toFixed(2)} kWh`; |
69 | 59 |
|
| 60 | + document.querySelectorAll('.measurement-duration').forEach(el => el.textContent = `${(total_duration_s).toFixed(2)} s`); // in s |
| 61 | + document.querySelector('#network-transfer').textContent = `${network_transfer_kb.toFixed(2)} kB`; |
| 62 | + document.querySelector('#network-carbon-10k-year').textContent = `${(network_carbon_10k_kg).toFixed(2)} kg`; |
70 | 63 |
|
| 64 | + document.querySelector('#measurement-details-link').href = `https://metrics.green-coding.io/stats.html?id=${uuid}`; |
| 65 | + document.querySelector('#timeline-link').href = `https://metrics.green-coding.io/timeline.html?uri=https%3A%2F%2Fgithub.com%2Fgreen-coding-solutions%2Fgreen-metrics-tool&branch=main&machine_id=6&filename=templates%2Fwebsite%2Fusage_scenario_cached.yml&usage_scenario_variables=${encodeURIComponent(usage_scenario_variables_json)}&metrics=key`; |
71 | 66 |
|
72 | 67 | })() |
0 commit comments