mirror of https://github.com/statping/statping
commit
473f3383ae
|
@ -1,13 +1,13 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="alert alert-primary pb-4 pt-3 mt-5 mb-5" role="alert">
|
<div class="alert alert-warning pb-4 pt-3 mt-5 mb-5" role="alert">
|
||||||
<h3 class="mb-3">{{message.title}}</h3>
|
<h3 class="mb-3">{{message.title}}</h3>
|
||||||
<span class="mb-3">{{message.description}}</span>
|
<span class="mb-3">{{message.description}}</span>
|
||||||
<div class="row d-block mt-3">
|
<div class="row d-block mt-3">
|
||||||
<span class="col-12 col-md-6 text-left small">
|
<span class="col-12 col-md-6 text-left small">
|
||||||
Started {{niceDate(message.start_on)}} ({{ago(parseISO(message.start_on))}} ago)
|
Started {{niceDate(message.start_on)}} ({{ago(message.start_on)}} ago)
|
||||||
</span>
|
</span>
|
||||||
<span class="col-12 col-md-6 text-right float-right small">
|
<span class="col-12 col-md-6 text-right float-right small">
|
||||||
Ends on {{niceDate(message.end_on)}} (in {{ago(parseISO(message.end_on))}})</span>
|
Ends on {{niceDate(message.end_on)}} (in {{ago(message.end_on)}})</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import Vue from "vue";
|
import Vue from "vue";
|
||||||
const { zonedTimeToUtc, utcToZonedTime, startOfToday, lastDayOfMonth, subSeconds, parse, getUnixTime, fromUnixTime, differenceInSeconds, formatDistance } = require('date-fns')
|
const { startOfToday, lastDayOfMonth, subSeconds, getUnixTime, fromUnixTime, formatDistance, isWithinInterval } = require('date-fns')
|
||||||
import formatDistanceToNow from 'date-fns/formatDistanceToNow'
|
import formatDistanceToNow from 'date-fns/formatDistanceToNow'
|
||||||
import format from 'date-fns/format'
|
import format from 'date-fns/format'
|
||||||
import parseISO from 'date-fns/parseISO'
|
import parseISO from 'date-fns/parseISO'
|
||||||
|
@ -28,9 +28,9 @@ export default Vue.mixin({
|
||||||
ago(t1) {
|
ago(t1) {
|
||||||
return formatDistanceToNow(parseISO(t1))
|
return formatDistanceToNow(parseISO(t1))
|
||||||
},
|
},
|
||||||
daysInMonth(t1) {
|
daysInMonth(t1) {
|
||||||
return lastDayOfMonth(t1)
|
return lastDayOfMonth(t1)
|
||||||
},
|
},
|
||||||
nowSubtract(seconds) {
|
nowSubtract(seconds) {
|
||||||
return subSeconds(new Date(), seconds)
|
return subSeconds(new Date(), seconds)
|
||||||
},
|
},
|
||||||
|
@ -70,8 +70,8 @@ export default Vue.mixin({
|
||||||
fromUnix(val) {
|
fromUnix(val) {
|
||||||
return fromUnixTime(val)
|
return fromUnixTime(val)
|
||||||
},
|
},
|
||||||
isBetween(t1, t2) {
|
isBetween(t, start, end) {
|
||||||
return differenceInSeconds(parseISO(t1), parseISO(t2)) >= 0
|
return isWithinInterval(t, {start: parseISO(start), end: parseISO(end)})
|
||||||
},
|
},
|
||||||
hour() {
|
hour() {
|
||||||
return 3600
|
return 3600
|
||||||
|
@ -79,6 +79,9 @@ export default Vue.mixin({
|
||||||
day() {
|
day() {
|
||||||
return 3600 * 24
|
return 3600 * 24
|
||||||
},
|
},
|
||||||
|
maxDate() {
|
||||||
|
return new Date(8640000000000000)
|
||||||
|
},
|
||||||
copy(txt) {
|
copy(txt) {
|
||||||
this.$copyText(txt).then(function (e) {
|
this.$copyText(txt).then(function (e) {
|
||||||
alert('Copied: \n'+txt)
|
alert('Copied: \n'+txt)
|
||||||
|
@ -159,12 +162,12 @@ export default Vue.mixin({
|
||||||
})
|
})
|
||||||
return {data: newSet}
|
return {data: newSet}
|
||||||
},
|
},
|
||||||
humanTime(val) {
|
humanTime(val) {
|
||||||
if (val >= 10000) {
|
if (val >= 10000) {
|
||||||
return Math.floor(val / 10000) + "ms"
|
return Math.floor(val / 10000) + "ms"
|
||||||
}
|
}
|
||||||
return Math.floor(val / 1000) + "μs"
|
return Math.floor(val / 1000) + "μs"
|
||||||
},
|
},
|
||||||
lastDayOfMonth(month) {
|
lastDayOfMonth(month) {
|
||||||
return new Date(Date.UTC(new Date().getUTCFullYear(), month + 1, 0))
|
return new Date(Date.UTC(new Date().getUTCFullYear(), month + 1, 0))
|
||||||
},
|
},
|
||||||
|
|
|
@ -3,8 +3,8 @@
|
||||||
|
|
||||||
<Header/>
|
<Header/>
|
||||||
|
|
||||||
<div v-for="(service, i) in services_no_group" class="col-12 full-col-12">
|
<div class="col-12 full-col-12">
|
||||||
<div class="list-group online_list mb-4">
|
<div v-for="service in services_no_group" v-bind:key="service.id" class="list-group online_list mb-4">
|
||||||
<a class="service_li list-group-item list-group-item-action">
|
<a class="service_li list-group-item list-group-item-action">
|
||||||
<router-link class="no-decoration font-3" :to="serviceLink(service)">{{service.name}}</router-link>
|
<router-link class="no-decoration font-3" :to="serviceLink(service)">{{service.name}}</router-link>
|
||||||
<span class="badge float-right" :class="{'bg-success': service.online, 'bg-danger': !service.online }">{{service.online ? "ONLINE" : "OFFLINE"}}</span>
|
<span class="badge float-right" :class="{'bg-success': service.online, 'bg-danger': !service.online }">{{service.online ? "ONLINE" : "OFFLINE"}}</span>
|
||||||
|
@ -16,16 +16,16 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-for="(group, index) in groups" v-bind:key="index">
|
<div>
|
||||||
<Group :group=group />
|
<Group v-for="group in groups" v-bind:key="group.id" :group=group />
|
||||||
</div>
|
|
||||||
|
|
||||||
<div v-for="(message, index) in messages" v-bind:key="index" v-if="inRange(message) && message.service === 0">
|
|
||||||
<MessageBlock :message="message"/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-12 full-col-12">
|
<div class="col-12 full-col-12">
|
||||||
<div v-for="(service, index) in services" :ref="service.id" v-bind:key="index">
|
<MessageBlock v-for="message in messages" v-bind:key="message.id" :message="message" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-12 full-col-12">
|
||||||
|
<div v-for="service in services" :ref="service.id" v-bind:key="service.id">
|
||||||
<ServiceBlock :in_service=service />
|
<ServiceBlock :in_service=service />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -60,7 +60,7 @@ export default {
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
messages() {
|
messages() {
|
||||||
return this.$store.getters.messages
|
return this.$store.getters.messages.filter(m => this.inRange(m) && m.service === 0)
|
||||||
},
|
},
|
||||||
groups() {
|
groups() {
|
||||||
return this.$store.getters.groupsInOrder
|
return this.$store.getters.groupsInOrder
|
||||||
|
@ -80,9 +80,7 @@ export default {
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
inRange(message) {
|
inRange(message) {
|
||||||
const start = this.isBetween(new Date(), message.start_on)
|
return this.isBetween(this.now(), message.start_on, message.start_on === message.end_on ? this.maxDate().toISOString() : message.end_on)
|
||||||
const end = this.isBetween(message.end_on, new Date())
|
|
||||||
return start && end
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
|
|
||||||
<ServiceTopStats :service="service"/>
|
<ServiceTopStats :service="service"/>
|
||||||
|
|
||||||
<div v-for="(message, index) in $store.getters.serviceMessages(service.id)" v-if="messageInRange(message)">
|
<div>
|
||||||
<MessageBlock :message="message"/>
|
<MessageBlock v-for="message in messagesInRange" v-bind:key="message.id" :message="message"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row mt-5 mb-4">
|
<div class="row mt-5 mb-4">
|
||||||
|
@ -348,7 +348,10 @@ export default {
|
||||||
name: this.service.name,
|
name: this.service.name,
|
||||||
...this.convertToChartData(this.data)
|
...this.convertToChartData(this.data)
|
||||||
}]
|
}]
|
||||||
}
|
},
|
||||||
|
messagesInRange() {
|
||||||
|
return this.$store.getters.serviceMessages(this.service.id).filter(m => this.inRange(m))
|
||||||
|
},
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
service: function(n, o) {
|
service: function(n, o) {
|
||||||
|
@ -412,11 +415,9 @@ export default {
|
||||||
}
|
}
|
||||||
return [{data: arr}]
|
return [{data: arr}]
|
||||||
},
|
},
|
||||||
messageInRange(message) {
|
inRange(message) {
|
||||||
const start = this.isBetween(new Date(), message.start_on)
|
return this.isBetween(this.now(), message.start_on, message.start_on === message.end_on ? this.maxDate().toISOString() : message.end_on)
|
||||||
const end = this.isBetween(message.end_on, new Date())
|
},
|
||||||
return start && end
|
|
||||||
},
|
|
||||||
async getService() {
|
async getService() {
|
||||||
await this.chartHits()
|
await this.chartHits()
|
||||||
await this.serviceFailures()
|
await this.serviceFailures()
|
||||||
|
|
Loading…
Reference in New Issue