Browse Source

Round dates when making heatmap api requests

bugfix/performance
Starbeamrainbowlabs 3 years ago
parent
commit
5ef5cec040
Signed by: sbrl
GPG Key ID: 1BE5172E637709C2
  1. 4
      Changelog.md
  2. 4
      client_src/js/Config.mjs
  3. 18
      client_src/js/Helpers/DateHelper.mjs
  4. 3
      client_src/js/Overlay/VoronoiManager.mjs

4
Changelog.md

@ -1,13 +1,15 @@ @@ -1,13 +1,15 @@
The data displayed has been produced by low-cost devices developed by [Connected Humber](https://www.connectedhumber.org/) members as part of a community driven effort to build a network of smart sensors in the Humber Region.
# Changelog
This is the changelog for the air quality web interface and its associated HTTP API.
- `[API]` refers to changes to the [HTTP API](https://aq.connectedhumber.org/__nightdocs/05-API-Docs.html).
- `[Code]` refers to internal changes to the code that have no direct impact on the web interface or the HTTP API, but are significant enough to warrant note.
- `[Docs]` refers to changes to the [documentation](https://aq.connectedhumber.org/__nightdocs/00-Welcome.html).
## v0.13
- Round dates before making API requests to improve caching potential
## v0.12
- Added loading animation while the map is loading
- Added device sensor information to the device info tab in the popup

4
client_src/js/Config.mjs

@ -10,6 +10,10 @@ export default { @@ -10,6 +10,10 @@ export default {
// The default zoom level to use when loading the page.
default_zoom: 12,
// The number of minutes to round dates to when making time-based HTTP API requests.
// Very useful for improving cache hit rates.
date_rounding_interval: 6,
heatmap: {
// The radius fo blobs on the heatmap
blob_radius: 0.02

18
client_src/js/Helpers/DateHelper.mjs

@ -46,7 +46,23 @@ function human_time(seconds) @@ -46,7 +46,23 @@ function human_time(seconds)
}
}
/**
* Rounds a Date to match the specified number of minutes.
* Useful when making API requests to improve caching.
* @param {Date} date The date to round.
* @param {int} interval_minutes The number of minutes to round it to. Should be less than 60.
* @return {void} Doesn't return anything - it mutates the original Date object instead.
*/
function round_date_interval(date, interval_minutes) {
date.setSeconds(0);
date.setMilliseconds(0);
date.setMinutes(
Math.floor(date.getMinutes() / interval_minutes) * interval_minutes
);
}
export {
human_duration_unit,
human_time_since, human_time
human_time_since, human_time,
round_date_interval
};

3
client_src/js/Overlay/VoronoiManager.mjs

@ -12,6 +12,7 @@ import Specs from './OverlaySpecs.mjs'; @@ -12,6 +12,7 @@ import Specs from './OverlaySpecs.mjs';
import Vector2 from '../Helpers/Vector2.mjs';
import GetFromUrl from '../Helpers/GetFromUrl.mjs';
import { round_date_interval } from '../Helpers/DateHelper.mjs';
class VoronoiManager {
@ -52,6 +53,8 @@ class VoronoiManager { @@ -52,6 +53,8 @@ class VoronoiManager {
this.last_datetime = datetime;
this.last_reading_type = reading_type;
round_date_interval(this.last_datetime, Config.date_rounding_interval);
this.spec = Specs[reading_type] || Specs["unknown"];
if(typeof this.spec.chroma == "undefined")
this.spec.chroma = chroma.scale(Object.values(this.spec.gradient))

Loading…
Cancel
Save