statping/frontend/src/graphing.js

77 lines
2.2 KiB
JavaScript

import axios from 'axios'
import API from './API'
import subSeconds from 'date-fns/subSeconds'
import getUnixTime from 'date-fns/getUnixTime'
class Graphing {
constructor () {
}
subtract(seconds) {
return getUnixTime(subSeconds(new Date(), seconds))
}
now() {
return getUnixTime(new Date())
}
async hits(service, days, group='24h') {
const query = await API.service_hits(service.id, this.subtract(86400 * days), this.now(), group, false)
let total = 0;
let high = 0;
let low = 99999999;
query.map((d) => {
if (high <= d.amount) {
high = d.amount
}
if (low >= d.amount && d.amount !== 0) {
low = d.amount
}
total += d.amount;
});
const average = total / query.length;
return {chart: query, average: average, total: total, high: high, low: low}
}
async pings(service, days, group='24h') {
const query = await API.service_ping(service.id, this.subtract(86400 * days), this.now(), group)
let total = 0;
let high = 0;
let low = 99999999;
query.map((d) => {
if (high <= d.amount) {
high = d.amount
}
if (low >= d.amount && d.amount !== 0) {
low = d.amount
}
total += d.amount;
});
const average = total / query.length;
return {chart: query, average: average, total: total, high: high, low: low}
}
async failures(service, days, group='24h') {
const query = await API.service_failures_data(service.id, this.subtract(86400 * days), this.now(), group)
let total = 0;
let high = 0;
let lowest = 99999999;
query.map((d) => {
if (d.amount >= high) {
high = d.amount
}
if (lowest >= d.amount) {
lowest = d.amount
}
total += d.amount;
});
const average = total / query.length;
return {data: query, average: average, total: total, high: high, low: lowest}
}
}
const graphing = new Graphing()
export default graphing