2022-06-22 11:20:57 +02:00
|
|
|
<script>
|
2023-08-09 17:24:01 +02:00
|
|
|
import { Icon } from 'sveltestrap'
|
|
|
|
|
2022-06-22 11:20:57 +02:00
|
|
|
export let host
|
|
|
|
export let metric
|
|
|
|
export let scope
|
|
|
|
export let jobMetrics
|
|
|
|
|
2023-08-09 17:24:01 +02:00
|
|
|
function compareNumbers(a, b) {
|
2023-08-09 16:34:00 +02:00
|
|
|
return a.id - b.id;
|
|
|
|
}
|
|
|
|
|
2023-08-09 17:24:01 +02:00
|
|
|
function sortByField(field) {
|
|
|
|
let s = sorting[field]
|
|
|
|
if (s.active) {
|
|
|
|
s.dir = s.dir == 'up' ? 'down' : 'up'
|
|
|
|
} else {
|
|
|
|
for (let field in sorting)
|
|
|
|
sorting[field].active = false
|
|
|
|
s.active = true
|
|
|
|
}
|
|
|
|
|
|
|
|
sorting = {...sorting}
|
|
|
|
series = series.sort((a, b) => {
|
|
|
|
if (a == null || b == null)
|
|
|
|
return -1
|
|
|
|
|
|
|
|
if (field === 'id') {
|
|
|
|
return s.dir != 'up' ? a[field] - b[field] : b[field] - a[field]
|
|
|
|
} else {
|
|
|
|
return s.dir != 'up' ? a.statistics[field] - b.statistics[field] : b.statistics[field] - a.statistics[field]
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
let sorting = {
|
|
|
|
id: { dir: 'down', active: true },
|
|
|
|
min: { dir: 'up', active: false },
|
|
|
|
avg: { dir: 'up', active: false },
|
|
|
|
max: { dir: 'up', active: false },
|
|
|
|
}
|
|
|
|
|
2022-06-22 11:20:57 +02:00
|
|
|
$: series = jobMetrics
|
2023-03-30 15:21:35 +02:00
|
|
|
.find(jm => jm.name == metric && jm.scope == scope)
|
2022-06-22 11:20:57 +02:00
|
|
|
?.metric.series.filter(s => s.hostname == host && s.statistics != null)
|
2023-08-09 17:24:01 +02:00
|
|
|
?.sort(compareNumbers)
|
2022-06-22 11:20:57 +02:00
|
|
|
</script>
|
|
|
|
|
|
|
|
{#if series == null || series.length == 0}
|
|
|
|
<td colspan={scope == 'node' ? 3 : 4}><i>No data</i></td>
|
|
|
|
{:else if series.length == 1 && scope == 'node'}
|
|
|
|
<td>
|
|
|
|
{series[0].statistics.min}
|
|
|
|
</td>
|
|
|
|
<td>
|
|
|
|
{series[0].statistics.avg}
|
|
|
|
</td>
|
|
|
|
<td>
|
|
|
|
{series[0].statistics.max}
|
|
|
|
</td>
|
|
|
|
{:else}
|
|
|
|
<td colspan="4">
|
|
|
|
<table style="width: 100%;">
|
2023-08-09 17:24:01 +02:00
|
|
|
<tr>
|
|
|
|
{#each ['id', 'min', 'avg', 'max'] as field}
|
|
|
|
<th on:click={() => sortByField(field)}>
|
|
|
|
Sort
|
|
|
|
<Icon name="caret-{sorting[field].dir}{sorting[field].active ? '-fill' : ''}" />
|
|
|
|
</th>
|
|
|
|
{/each}
|
|
|
|
</tr>
|
2022-06-22 11:20:57 +02:00
|
|
|
{#each series as s, i}
|
|
|
|
<tr>
|
|
|
|
<th>{s.id ?? i}</th>
|
|
|
|
<td>{s.statistics.min}</td>
|
|
|
|
<td>{s.statistics.avg}</td>
|
|
|
|
<td>{s.statistics.max}</td>
|
|
|
|
</tr>
|
|
|
|
{/each}
|
|
|
|
</table>
|
|
|
|
</td>
|
|
|
|
{/if}
|