mirror of https://github.com/rancher/dashboard.git
72 lines
1.3 KiB
Vue
72 lines
1.3 KiB
Vue
<script>
|
|
import SortableTable from '@/components/SortableTable';
|
|
import Poller from '@/utils/poller';
|
|
import {
|
|
STATE, NAME, ROLES, VERSION, INTERNAL_EXTERNAL_IP, CPU, RAM
|
|
} from '@/config/table-headers';
|
|
|
|
import { METRIC } from '@/config/types';
|
|
|
|
const METRICS_POLL_RATE_MS = 30000;
|
|
const MAX_FAILURES = 2;
|
|
|
|
export default {
|
|
name: 'ListNode',
|
|
components: { SortableTable },
|
|
|
|
props: {
|
|
schema: {
|
|
type: Object,
|
|
required: true,
|
|
},
|
|
|
|
rows: {
|
|
type: Array,
|
|
required: true,
|
|
},
|
|
},
|
|
|
|
data() {
|
|
return {
|
|
headers: [STATE, NAME, ROLES, VERSION, INTERNAL_EXTERNAL_IP, CPU, RAM],
|
|
metricPoller: new Poller(this.loadMetrics, METRICS_POLL_RATE_MS, MAX_FAILURES),
|
|
};
|
|
},
|
|
|
|
mounted() {
|
|
this.metricPoller.start();
|
|
},
|
|
|
|
beforeDestroy() {
|
|
this.metricPoller.stop();
|
|
},
|
|
|
|
methods: {
|
|
async loadMetrics() {
|
|
const schema = this.$store.getters['cluster/schemaFor'](METRIC.NODE);
|
|
|
|
if (schema) {
|
|
await this.$store.dispatch('cluster/findAll', {
|
|
type: METRIC.NODE,
|
|
opt: { force: true }
|
|
});
|
|
|
|
this.$forceUpdate();
|
|
}
|
|
}
|
|
}
|
|
|
|
};
|
|
</script>
|
|
|
|
<template>
|
|
<SortableTable
|
|
v-bind="$attrs"
|
|
:headers="headers"
|
|
:rows="[...rows]"
|
|
key-field="_key"
|
|
v-on="$listeners"
|
|
>
|
|
</SortableTable>
|
|
</template>
|