use c3 for stacked spline
This commit is contained in:
113
server/lib/tasks/design_data_generator.js
Normal file
113
server/lib/tasks/design_data_generator.js
Normal file
@@ -0,0 +1,113 @@
|
||||
import fs from 'fs';
|
||||
|
||||
import FsHelper from './../fs_helper';
|
||||
import DB from './../../config/database';
|
||||
|
||||
const DESIGN_DATA_PATH = __dirname + '/../../../client/build/design/data';
|
||||
|
||||
class DesignDataGenerator {
|
||||
|
||||
constructor(house_ids, dates){
|
||||
var generator = this;
|
||||
generator.house_ids = house_ids;
|
||||
generator.dates = dates;
|
||||
}
|
||||
|
||||
exec(){
|
||||
var generator = this;
|
||||
console.log('Clearing design data directory...')
|
||||
return generator.clearDirectory()
|
||||
.then(()=>{
|
||||
console.log('Writing house index response...')
|
||||
return generator.writeHouseIndex();
|
||||
})
|
||||
.then(()=>{
|
||||
console.log('Writing house energy and power data...');
|
||||
return generator.writeHouseData();
|
||||
})
|
||||
.then(()=>{
|
||||
console.log('Done!')
|
||||
});
|
||||
}
|
||||
|
||||
clearDirectory(){
|
||||
console.log('DesignDataGenerator#clearDirectory')
|
||||
return new Promise((fnResolve1, fnReject1)=>{
|
||||
// remove directory & contents
|
||||
FsHelper.rmdirAsync(DESIGN_DATA_PATH, ()=>{
|
||||
// recreate it.
|
||||
fs.mkdir(DESIGN_DATA_PATH, ()=>{
|
||||
// create subdirectories
|
||||
Promise.all([
|
||||
new Promise((fnResolve2, fnReject2)=>{ fs.mkdir(DESIGN_DATA_PATH + '/energy_data', fnResolve2); }),
|
||||
new Promise((fnResolve2, fnReject2)=>{ fs.mkdir(DESIGN_DATA_PATH + '/power_data', fnResolve2); })
|
||||
]).then(fnResolve1);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
writeHouseData(){
|
||||
var generator = this;
|
||||
return DB.House.findAll({where: {id: generator.house_ids}})
|
||||
.then((houses)=>{
|
||||
var promises = [];
|
||||
// for all houses, write energy and power responses.
|
||||
houses.forEach((house)=>{
|
||||
promises.push(new Promise((fnResolve, fnReject)=>{
|
||||
DesignDataGenerator.energyIndex({house_id: house.id, dates: [generator.dates]})
|
||||
.then((json)=>{
|
||||
fs.writeFile(DESIGN_DATA_PATH + `/energy_data/${house.id}.json`, json, fnResolve);
|
||||
});
|
||||
}));
|
||||
promises.push(new Promise((fnResolve, fnReject)=>{
|
||||
DesignDataGenerator.powerIndex({house_id: house.id, dates: [generator.dates]})
|
||||
.then((json)=>{
|
||||
fs.writeFile(DESIGN_DATA_PATH + `/power_data/${house.id}.json`, json, fnResolve);
|
||||
});
|
||||
}));
|
||||
});
|
||||
return Promise.all(promises);
|
||||
});
|
||||
}
|
||||
|
||||
writeHouseIndex(){
|
||||
var generator = this;
|
||||
return new Promise((fnResolve, fnReject)=>{
|
||||
DesignDataGenerator.housesIndex({id: generator.house_ids, dates: generator.dates})
|
||||
.then((json)=>{
|
||||
fs.writeFile(DESIGN_DATA_PATH + '/houses.json', json, fnResolve);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
static housesIndex(opts){
|
||||
return DB.House.findAll({where: {id: opts.id}})
|
||||
.then((houses_data)=>{
|
||||
if (opts.dates){
|
||||
houses_data.forEach((house_datum)=>{
|
||||
house_datum.data_from = opts.dates[0];
|
||||
house_datum.data_until = opts.dates[1];
|
||||
});
|
||||
}
|
||||
return JSON.stringify(houses_data, null, 2);
|
||||
});
|
||||
}
|
||||
|
||||
static powerIndex(opts){
|
||||
return DB.PowerDatum.exposeForHouseAtDates(opts.house_id, opts.dates)
|
||||
.then((power_data)=>{
|
||||
return JSON.stringify({data: power_data});
|
||||
});
|
||||
}
|
||||
|
||||
static energyIndex(opts){
|
||||
return DB.EnergyDatum.exposeForHouseAtDates(opts.house_id, opts.dates)
|
||||
.then((energy_data)=>{
|
||||
return JSON.stringify({data: energy_data});
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default DesignDataGenerator;
|
||||
Reference in New Issue
Block a user