1
1
class PhaseMetrics extends HTMLElement {
2
2
connectedCallback ( ) {
3
- const tabCards = [
4
- { key : 'cpu' , name : 'CPU' , icon : 'microchip' , colour : 'orange' } ,
5
- { key : 'gpu' , name : 'GPU' , icon : 'camera retro' , colour : 'orange' } ,
6
- { key : 'dram' , name : 'DRAM' , icon : 'memory' , colour : 'orange' } ,
7
- { key : 'disk' , name : 'Disk' , icon : 'hdd' , colour : 'orange' } ,
8
- { key : 'machine' , name : 'Machine' , icon : 'power off ' , colour : 'orange' } ,
3
+ const hardwareCards = [
4
+ { key : 'cpu' , name : 'CPU' , icon : 'microchip' , colour : 'orange' , variable : true } ,
5
+ { key : 'gpu' , name : 'GPU' , icon : 'camera retro' , colour : 'orange' , variable : true } ,
6
+ { key : 'dram' , name : 'DRAM' , icon : 'memory' , colour : 'orange' , variable : true } ,
7
+ { key : 'disk' , name : 'Disk' , icon : 'hdd' , colour : 'orange' , variable : true } ,
8
+ { key : 'machine' , name : 'Machine' , icon : 'server ' , colour : 'orange' , variable : true } ,
9
9
] ;
10
10
11
11
const extraCards = [
12
- { key : 'runtime' , name : 'Phase Duration' , icon : 'clock ' , colour : 'green' } ,
13
- { key : 'runtime ' , name : 'Data Transferred' , icon : 'clock ' , colour : 'green' } ,
14
- { key : 'network' , name : 'Network' , icon : 'power off ' , colour : 'green' } ,
15
- { key : 'runtime ' , name : 'Embodied Carbon' , icon : 'clock ' , colour : 'green' } ,
16
- { key : 'runtime ' , name : 'Operational Carbon' , icon : 'clock ' , colour : 'green' } ,
17
- { key : 'sci' , name : 'SCI' , icon : 'leaf' , colour : 'green' } ,
12
+ { key : 'runtime' , name : 'Phase Duration' , icon : 'hourglass half ' , colour : 'green' , variable : false } ,
13
+ { key : 'network-data ' , name : 'Data Transferred' , icon : 'exchange ' , colour : 'green' , variable : false } ,
14
+ { key : 'network' , name : 'Network' , icon : 'sitemap ' , colour : 'green' , variable : true } ,
15
+ { key : 'embodied-carbon ' , name : 'Embodied Carbon' , icon : 'industry ' , colour : 'green' , variable : false } ,
16
+ { key : 'operational-carbon ' , name : 'Operational Carbon' , icon : 'fire ' , colour : 'green' , variable : false } ,
17
+ { key : 'sci' , name : 'SCI' , icon : 'leaf' , colour : 'green' , variable : false } ,
18
18
] ;
19
19
20
- const createCard = ( { key, name, icon, colour } , suffix = '' ) => {
21
- const cardClass = suffix ? `${ key } -${ suffix } ` : key ;
20
+ const createCard = ( { key, name, icon, colour, variable } , suffix = '' ) => {
21
+ const cardClass = variable ? `${ key } -${ suffix } ` : key ;
22
22
return `
23
23
<div class="ui ${ colour } card ${ cardClass } ">
24
24
<div class="content">
25
- <i class="${ icon } icon"></i><b>${ name } </b>
25
+ <i class="${ icon } icon"></i><b class="metric-name" >${ name } </b>
26
26
<div class="right floated meta si-unit"></div>
27
27
</div>
28
28
<div class="extra content">
@@ -39,11 +39,11 @@ class PhaseMetrics extends HTMLElement {
39
39
const buildTab = ( tab , active = false ) => `
40
40
<div class="ui tab ${ active ? 'active' : '' } " data-tab="${ tab } ">
41
41
<div class="ui six cards stackable">
42
- ${ tabCards . map ( card => createCard ( card , tab ) ) . join ( '' ) }
42
+ ${ hardwareCards . map ( card => createCard ( card , tab ) ) . join ( '' ) }
43
43
</div>
44
44
<h4 class="ui horizontal left aligned divider header">Impact</h4>
45
45
<div class="ui six cards stackable">
46
- ${ extraCards . map ( card => createCard ( card ) ) . join ( '' ) }
46
+ ${ extraCards . map ( card => createCard ( card , tab ) ) . join ( '' ) }
47
47
</div>
48
48
49
49
</div>` ;
@@ -293,18 +293,26 @@ const updateKeyMetric = (
293
293
294
294
let selector = null ;
295
295
296
- console . log ( `Updating key metric for ${ metric_name } in phase ${ phase } with value ${ value } ${ unit } ` ) ;
296
+ //console.log(`Updating key metric for ${metric_name} in phase ${phase} with value ${value} ${unit}`);
297
+
298
+ // { key: 'runtime', name: 'Phase Duration', icon: 'hourglass half', colour: 'green' },
299
+ // { key: 'network-data', name: 'Data Transferred', icon: 'exchange', colour: 'green' },
300
+ // { key: 'network', name: 'Network', icon: 'sitemap', colour: 'green' },
301
+ // { key: 'embodied-carbon', name: 'Embodied Carbon', icon: 'industry', colour: 'green' },
302
+ // { key: 'operational-carbon', name: 'Operational Carbon', icon: 'fire', colour: 'green' },
303
+ // { key: 'sci', name: 'SCI', icon: 'leaf', colour: 'green' },
304
+
297
305
298
306
if ( phase_time_metric_condition ( metric_name ) ) {
299
307
selector = '.runtime' ;
300
- } else if ( sci_metric_condition ( metric_name ) ) {
301
- selector = '.sci' ;
302
- } else if ( network_energy_metric_condition ( metric_name ) ) {
303
- selector = '.network' ;
304
- } else if ( network_carbon_metric_condition ( metric_name ) ) {
305
- selector = '.network-co2' ;
308
+ } else if ( network_io_metric_condition ( metric_name ) ) {
309
+ selector = '.network-data' ;
306
310
} else if ( embodied_carbon_share_metric_condition ( metric_name ) ) {
307
311
selector = '.embodied-carbon' ;
312
+ } else if ( psu_machine_carbon_metric_condition ( metric_name ) ) {
313
+ selector = '.operational-carbon' ;
314
+ } else if ( sci_metric_condition ( metric_name ) ) {
315
+ selector = '.sci' ;
308
316
} else {
309
317
const isPower = metric_name . includes ( '_power_' ) ;
310
318
const isEnergy = metric_name . includes ( '_energy_' ) ;
@@ -316,6 +324,7 @@ const updateKeyMetric = (
316
324
else if ( metric_name . includes ( 'gpu' ) ) component = 'gpu' ;
317
325
else if ( metric_name . includes ( 'disk' ) ) component = 'disk' ;
318
326
else if ( metric_name . includes ( 'psu' ) || metric_name . includes ( 'machine' ) ) component = 'machine' ;
327
+ else if ( metric_name . includes ( 'network' ) ) component = 'network' ;
319
328
320
329
if ( component !== null ) {
321
330
if ( isPower ) selector = `.${ component } -power` ;
@@ -325,26 +334,33 @@ const updateKeyMetric = (
325
334
}
326
335
327
336
if ( selector === null ) {
328
- console . warn ( `No matching selector found for metric "${ metric_name } "` ) ;
329
337
return ;
330
338
}
331
339
332
- const card = document . querySelector ( `div.tab[data-tab='${ phase } '] ${ selector } ` ) ;
333
- if ( ! card ) {
340
+ const cards = document . querySelectorAll ( selector ) ;
341
+
342
+ if ( cards . length === 0 ) {
334
343
console . warn ( `No card found for selector "${ selector } " in phase "${ phase } "` ) ;
335
344
return ;
336
345
}
337
346
338
- const valueNode = card . querySelector ( '.value' ) ;
339
- valueNode . innerText = `${ value } ${ std_dev_text } ` ;
340
- valueNode . setAttribute ( 'title' , `${ raw_value } [${ raw_unit } ]` ) ;
347
+ cards . forEach ( card => {
348
+ const valueNode = card . querySelector ( '.value' ) ;
349
+ valueNode . innerText = `${ value } ${ std_dev_text } ` ;
350
+ valueNode . setAttribute ( 'title' , `${ raw_value } [${ raw_unit } ]` ) ;
351
+
352
+ const unitNode = card . querySelector ( '.si-unit' ) ;
353
+ if ( unitNode ) unitNode . innerText = unit ;
354
+
355
+ const helpNode = card . querySelector ( '.help' ) ;
356
+ if ( helpNode ) helpNode . setAttribute ( 'data-tooltip' , explanation || 'No data available' ) ;
357
+
358
+ const metricNameNode = card . querySelector ( '.metric-name' ) ;
359
+ if ( metricNameNode ) metricNameNode . innerText = clean_name || '' ;
341
360
342
- const unitNode = card . querySelector ( '.si-unit' ) ;
343
- if ( unitNode ) unitNode . innerText = unit ;
361
+ const sourceNode = card . querySelector ( '.source' ) ;
362
+ if ( sourceNode ) sourceNode . innerText = source || '' ;
363
+ } ) ;
344
364
345
- const helpNode = card . querySelector ( '.help' ) ;
346
- if ( helpNode ) helpNode . setAttribute ( 'data-tooltip' , explanation || 'No data available' ) ;
347
365
348
- const sourceNode = card . querySelector ( '.source' ) ;
349
- if ( sourceNode ) sourceNode . innerText = source || '' ;
350
366
} ;
0 commit comments