You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
2.5 KiB
JavaScript

var data = [];
const day_cache = {};
var is_loaded = false;
function getForDay(day, month, year){
if(!is_loaded) return [];
var key = day + "-" + month + "-" + year;
if(day_cache[key]) return day_cache[key];
const ts = new Date().getTime();
const targetDateStart = new Date(`${year}-${month<10?"0":""}${month}-${day<10? "0":""}${day}`)
const targetDateEnd = new Date(`${year}-${month<10?"0":""}${month}-${day<10? "0":""}${day}`);
targetDateEnd.setDate(targetDateEnd.getDate() + 1);
const timestamp_start = targetDateStart.getTime();
const timestamp_end = targetDateEnd.getTime();
var result = (data)
.filter(function(coords){
if(coords[1]>6000){return false}
const timestamp = coords[0]
//console.log(timestamp_start, timestamp, timestamp_end, timestamp <=timestamp_end && timestamp >= timestamp_start);
return timestamp <=timestamp_end && timestamp >= timestamp_start
})
const te = new Date().getTime();
day_cache[key] = result;
return result;
}
function newData(text){
const lines = text.split("\n");
// measure("map to floats", ()=>lines.map(function(line){
// var coords = line.split(",").map(parseFloat)
// var d = new Date(coords[0]);
// //(coords[0] / 3600) % 24
// //dateParser.hours(coords[0])
// //var hour = d.getHours() + d.getMinutes()/60;
// //coords.push(hour)
// }));
data = text.split("\n")
.map(function(line){
// maps to [timestamp, production, hour, datetime]
var coords = line.split(",").map(parseFloat)
var d = new Date(coords[0]);
//var hour = d.getHours() + d.getMinutes()/60;
//coords.push(hour)
coords.push(0);
// d.setDate(1);
// d.setMonth(1);
// d.setYear(1990); // so two dates always nicely overlap in comparison view
coords.push(d)
return coords;
})
is_loaded = true;
}
WorkerScript.onMessage = function(message) {
if(message.type === "newdata"){
newData(message.data);
WorkerScript.sendMessage({id: message.id, data});
}
if(message.type === "get-for-day"){
WorkerScript.sendMessage({id: message.id, data: getForDay(message.data.day, message.data.month, message.data.year)})
}
if(message.type === "set-timeout"){
WorkerScript.sendMessage({id: message.id})
}
}