mirror of https://github.com/nicolargo/glances
chg: alerts - standardise history display timings
parent
74a8b0bf34
commit
16d56109c8
|
@ -1,102 +1,111 @@
|
|||
<template>
|
||||
<div class="plugin">
|
||||
<section id="alerts">
|
||||
<div class="plugin">
|
||||
<section id="alerts">
|
||||
<span class="title" v-if="hasAlerts">
|
||||
Warning or critical alerts (last {{ countAlerts }} entries)
|
||||
</span>
|
||||
<span class="title" v-else>No warning or critical alert detected</span>
|
||||
</section>
|
||||
<section id="alert">
|
||||
<div class="table">
|
||||
<div class="table-row" v-for="(alert, alertId) in alerts" :key="alertId">
|
||||
<div class="table-cell text-left">
|
||||
{{ formatDate(alert.begin) }}
|
||||
{{ alert.tz }}
|
||||
({{ alert.ongoing ? 'ongoing' : alert.duration }}) -
|
||||
<span v-show="!alert.ongoing"> {{ alert.state }} on </span>
|
||||
<span :class="alert.state.toLowerCase()">
|
||||
<span class="title" v-else>No warning or critical alert detected</span>
|
||||
</section>
|
||||
<section id="alert">
|
||||
<div class="table">
|
||||
<div class="table-row" v-for="(alert, alertId) in alerts" :key="alertId">
|
||||
<div class="table-cell text-left">
|
||||
{{ formatDate(alert.begin) }}
|
||||
({{ alert.ongoing ? 'ongoing' : alert.duration }}) -
|
||||
<span v-show="!alert.ongoing"> {{ alert.state }} on </span>
|
||||
<span :class="alert.state.toLowerCase()">
|
||||
{{ alert.type }}
|
||||
</span>
|
||||
({{ $filters.number(alert.max, 1) }})
|
||||
{{ alert.top }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</span>
|
||||
({{ $filters.number(alert.max, 1) }})
|
||||
{{ alert.top }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { padStart } from 'lodash';
|
||||
import { GlancesFavico } from '../services.js';
|
||||
import {padStart} from 'lodash';
|
||||
import {GlancesFavico} from '../services.js';
|
||||
|
||||
export default {
|
||||
props: {
|
||||
data: {
|
||||
type: Object
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
stats() {
|
||||
return this.data.stats['alert'];
|
||||
},
|
||||
alerts() {
|
||||
return (this.stats || []).map((alertalertStats) => {
|
||||
const alert = {};
|
||||
var tzoffset = new Date().getTimezoneOffset();
|
||||
alert.state = alertalertStats.state;
|
||||
alert.type = alertalertStats.type;
|
||||
alert.begin = alertalertStats.begin * 1000 - tzoffset * 60 * 1000;
|
||||
alert.end = alertalertStats.end * 1000 - tzoffset * 60 * 1000;
|
||||
alert.ongoing = alertalertStats.end == -1;
|
||||
alert.min = alertalertStats.min;
|
||||
alert.avg = alertalertStats.avg;
|
||||
alert.max = alertalertStats.max;
|
||||
alert.top = alertalertStats.top.join(', ');
|
||||
|
||||
if (!alert.ongoing) {
|
||||
const duration = alert.end - alert.begin;
|
||||
const seconds = parseInt((duration / 1000) % 60),
|
||||
minutes = parseInt((duration / (1000 * 60)) % 60),
|
||||
hours = parseInt((duration / (1000 * 60 * 60)) % 24);
|
||||
|
||||
alert.duration =
|
||||
padStart(hours, 2, '0') +
|
||||
':' +
|
||||
padStart(minutes, 2, '0') +
|
||||
':' +
|
||||
padStart(seconds, 2, '0');
|
||||
}
|
||||
|
||||
return alert;
|
||||
});
|
||||
},
|
||||
hasAlerts() {
|
||||
return this.countAlerts > 0;
|
||||
},
|
||||
countAlerts() {
|
||||
return this.alerts.length;
|
||||
},
|
||||
hasOngoingAlerts() {
|
||||
return this.countOngoingAlerts > 0;
|
||||
},
|
||||
countOngoingAlerts() {
|
||||
return this.alerts.filter(({ ongoing }) => ongoing).length;
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
countOngoingAlerts() {
|
||||
if (this.countOngoingAlerts) {
|
||||
GlancesFavico.badge(this.countOngoingAlerts);
|
||||
} else {
|
||||
GlancesFavico.reset();
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
formatDate(date) {
|
||||
return new Date(date).toLocaleString();
|
||||
}
|
||||
props: {
|
||||
data: {
|
||||
type: Object
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
stats() {
|
||||
return this.data.stats['alert'];
|
||||
},
|
||||
alerts() {
|
||||
return (this.stats || []).map((alertStats) => {
|
||||
const alert = {};
|
||||
alert.state = alertStats.state;
|
||||
alert.type = alertStats.type;
|
||||
alert.begin = alertStats.begin * 1000;
|
||||
alert.end = alertStats.end * 1000;
|
||||
alert.ongoing = alertStats.end == -1;
|
||||
alert.min = alertStats.min;
|
||||
alert.avg = alertStats.avg;
|
||||
alert.max = alertStats.max;
|
||||
alert.top = alertStats.top.join(', ');
|
||||
|
||||
if (!alert.ongoing) {
|
||||
const duration = alert.end - alert.begin;
|
||||
const seconds = parseInt((duration / 1000) % 60),
|
||||
minutes = parseInt((duration / (1000 * 60)) % 60),
|
||||
hours = parseInt((duration / (1000 * 60 * 60)) % 24);
|
||||
|
||||
alert.duration = padStart(hours, 2, '0') +
|
||||
':' + padStart(minutes, 2, '0') +
|
||||
':' + padStart(seconds, 2, '0');
|
||||
}
|
||||
|
||||
return alert;
|
||||
});
|
||||
},
|
||||
hasAlerts() {
|
||||
return this.countAlerts > 0;
|
||||
},
|
||||
countAlerts() {
|
||||
return this.alerts.length;
|
||||
},
|
||||
hasOngoingAlerts() {
|
||||
return this.countOngoingAlerts > 0;
|
||||
},
|
||||
countOngoingAlerts() {
|
||||
return this.alerts.filter(({ongoing}) => ongoing).length;
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
countOngoingAlerts() {
|
||||
if (this.countOngoingAlerts) {
|
||||
GlancesFavico.badge(this.countOngoingAlerts);
|
||||
} else {
|
||||
GlancesFavico.reset();
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
formatDate(timestamp) {
|
||||
const tzOffset = new Date().getTimezoneOffset();
|
||||
const hours = Math.trunc(Math.abs(tzOffset) / 60);
|
||||
const minutes = Math.abs(tzOffset % 60);
|
||||
|
||||
let tzString = tzOffset <= 0 ? '+' : '-';
|
||||
tzString += String(hours).padStart(2, '0') + String(minutes).padStart(2, '0');
|
||||
|
||||
const date = new Date(timestamp);
|
||||
return String(date.getFullYear()) +
|
||||
'-' + String(date.getMonth()).padStart(2, '0') +
|
||||
'-' + String(date.getDate()).padStart(2, '0') +
|
||||
' ' + String(date.getHours()).padStart(2, '0') +
|
||||
':' + String(date.getMinutes()).padStart(2, '0') +
|
||||
':' + String(date.getSeconds()).padStart(2, '0') +
|
||||
'(' + tzString + ')';
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
File diff suppressed because one or more lines are too long
|
@ -144,8 +144,8 @@ class PluginModel(GlancesPluginModel):
|
|||
# New line
|
||||
ret.append(self.curse_new_line())
|
||||
# Start
|
||||
msg = str(datetime.fromtimestamp(alert['begin'], tz=datetime.now().astimezone().tzinfo))
|
||||
ret.append(self.curse_add_line(msg))
|
||||
alert_dt = datetime.fromtimestamp(alert['begin'], tz=datetime.now().astimezone().tzinfo)
|
||||
ret.append(self.curse_add_line(alert_dt.strftime("%Y-%m-%d %H:%M:%S(%z)")))
|
||||
# Duration
|
||||
if alert['end'] > 0:
|
||||
# If finished display duration
|
||||
|
|
Loading…
Reference in New Issue