diff --git a/client/src/components/GraphModal.vue b/client/src/components/GraphModal.vue index 8e4798a..a986f37 100644 --- a/client/src/components/GraphModal.vue +++ b/client/src/components/GraphModal.vue @@ -13,9 +13,9 @@ watch([() => props.metricKey, mode], async ([key]) => { if(!key) return; const past = new Date(), future = new Date(); if(mode.value === 'hourly') { - past.setHours(past.getHours() - 24); - future.setHours(future.getHours() + 24); - rows.value = await api.hourly(past, future); + past.setHours(past.getHours() - 24, 0, 0, 0); + future.setHours(future.getHours() + 24, 0, 0, 0); + rows.value = await api.hourly(past, future, props.metricKey || undefined); } else { past.setDate(past.getDate() - 3); future.setDate(future.getDate() + 3); diff --git a/client/src/services/api.ts b/client/src/services/api.ts index 2ddf213..f2d5ebb 100644 --- a/client/src/services/api.ts +++ b/client/src/services/api.ts @@ -26,14 +26,14 @@ async function get(path: string, params: Record = {}): Promis export const api = { position: (fields?: string) => get<{latitude: number, longitude: number, altitude: number}>('/api/position', fields ? {fields} : {}), current: (fields?: string) => get('/api/current', fields ? {fields} : {}), - hourly: (start?: Date, end?: Date, fields?: string) => get('/api/hourly', { - ...(start ? {start: start.toISOString().slice(0, 10)} : {}), - ...(end ? {end: end.toISOString().slice(0, 10)} : {}), + hourly: (start?: Date | string, end?: Date | string, fields?: string) => get('/api/hourly', { + ...(start ? {start: typeof start == 'string' ? start : start.toISOString()} : {}), + ...(end ? {end: typeof end == 'string' ? end : end.toISOString()} : {}), ...(fields ? {fields} : {}) }), daily: (start?: Date, end?: Date, fields?: string) => get('/api/daily', { - ...(start ? {start: start.toISOString().slice(0, 10)} : {}), - ...(end ? {end: end.toISOString().slice(0, 10)} : {}), + ...(start ? {start: typeof start == 'string' ? start : start.toISOString()} : {}), + ...(end ? {end: typeof end == 'string' ? end : end.toISOString()} : {}), ...(fields ? {fields} : {}) }), }; diff --git a/server/src/influx.mjs b/server/src/influx.mjs index a06a4aa..012cb51 100644 --- a/server/src/influx.mjs +++ b/server/src/influx.mjs @@ -70,6 +70,7 @@ export async function queryHourly(start, end) { from(bucket: "${c.INFLUX_BUCKET}") |> range(start: ${start.toISOString()}, stop: ${end.toISOString()}) |> filter(fn: (r) => ${MEASUREMENTS.map(m => `r._measurement == "${m}"`).join(' or ')}) + |> group(columns: ["_field"]) |> aggregateWindow(every: 1h, fn: mean, createEmpty: false) |> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value") `;