uptime-kuma/src/components/Uptime.vue

96 lines
2.1 KiB
Vue
Raw Normal View History

2021-07-01 05:11:16 +00:00
<template>
2022-10-17 17:20:51 +00:00
<span :class="className" :title="title">{{ uptime }}</span>
2021-07-01 05:11:16 +00:00
</template>
<script>
import { DOWN, MAINTENANCE, PENDING, UP } from "../util.ts";
2021-07-01 05:11:16 +00:00
export default {
props: {
/** Monitor this represents */
2022-04-30 01:51:14 +00:00
monitor: {
type: Object,
default: null,
},
/** Type of monitor */
2022-04-30 01:51:14 +00:00
type: {
type: String,
default: null,
},
/** Is this a pill? */
2021-07-01 05:11:16 +00:00
pill: {
2021-07-27 17:53:59 +00:00
type: Boolean,
2021-07-01 05:11:16 +00:00
default: false,
},
},
computed: {
uptime() {
if (this.type === "maintenance") {
return this.$t("statusMaintenance");
}
2021-07-01 05:11:16 +00:00
let key = this.monitor.id + "_" + this.type;
2021-07-01 09:00:23 +00:00
if (this.$root.uptimeList[key] !== undefined) {
2021-07-01 05:11:16 +00:00
return Math.round(this.$root.uptimeList[key] * 10000) / 100 + "%";
}
2021-07-27 17:47:13 +00:00
2022-04-13 16:30:32 +00:00
return this.$t("notAvailableShort");
2021-07-01 05:11:16 +00:00
},
color() {
if (this.lastHeartBeat.status === MAINTENANCE) {
2022-04-30 12:57:08 +00:00
return "maintenance";
}
2022-04-30 12:57:08 +00:00
if (this.lastHeartBeat.status === DOWN) {
2022-04-13 16:30:32 +00:00
return "danger";
2021-07-27 18:03:53 +00:00
}
if (this.lastHeartBeat.status === UP) {
2022-04-13 16:30:32 +00:00
return "primary";
2021-07-27 18:03:53 +00:00
}
if (this.lastHeartBeat.status === PENDING) {
2022-04-13 16:30:32 +00:00
return "warning";
2021-07-01 05:11:16 +00:00
}
2021-07-27 17:47:13 +00:00
2022-04-13 16:30:32 +00:00
return "secondary";
2021-07-01 05:11:16 +00:00
},
lastHeartBeat() {
if (this.monitor.id in this.$root.lastHeartbeatList && this.$root.lastHeartbeatList[this.monitor.id]) {
2022-04-13 16:30:32 +00:00
return this.$root.lastHeartbeatList[this.monitor.id];
2021-07-27 17:47:13 +00:00
}
return {
status: -1,
2022-04-13 16:30:32 +00:00
};
2021-07-01 05:11:16 +00:00
},
className() {
if (this.pill) {
return `badge rounded-pill bg-${this.color}`;
}
2021-07-27 17:47:13 +00:00
return "";
},
2022-10-17 17:20:51 +00:00
title() {
if (this.type === "720") {
2022-10-17 17:36:52 +00:00
return `30${this.$t("-day")}`;
2022-10-17 17:20:51 +00:00
}
2022-10-17 17:36:52 +00:00
return `24${this.$t("-hour")}`;
2022-10-17 17:20:51 +00:00
}
2021-07-01 05:11:16 +00:00
},
2022-04-13 16:30:32 +00:00
};
2021-07-01 05:11:16 +00:00
</script>
2021-08-03 07:14:26 +00:00
<style>
.badge {
min-width: 62px;
}
</style>