Files
old-spike/server/lib/tasks/design_data_generator.js
2016-03-11 19:01:59 -06:00

116 lines
3.5 KiB
JavaScript

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)
.then((energy_data)=>{
console.log('Energy data length')
console.log(energy_data.length)
return JSON.stringify({data: energy_data});
});
}
}
export default DesignDataGenerator;