Refactors batching

This commit is contained in:
Akshay Nair committed 2020-10-11 23:51:56 +05:30
1 parent 0938dff85a
commit dda977068a
1 file changed
+19 -7
+19 -7
View File
@@ -2,8 +2,6 @@ const R = require('ramda');
const { cpanel } = require('./lib/cpanel'); const { cpanel } = require('./lib/cpanel');
const { DOMAIN_DOMAIN } = require('./constants'); const { DOMAIN_DOMAIN } = require('./constants');
const promiseAll = xs => Promise.all(xs);
const recordToRedirection = ({ name, address }) => ({ const recordToRedirection = ({ name, address }) => ({
domain: `${name}.${DOMAIN_DOMAIN}`, domain: `${name}.${DOMAIN_DOMAIN}`,
redirect: address, redirect: address,
@@ -11,7 +9,13 @@ const recordToRedirection = ({ name, address }) => ({
redirect_wildcard: 1, redirect_wildcard: 1,
redirect_www: 0, redirect_www: 0,
}); });
const recordToZone = R.identity; const recordToZone = ({ name, type, address, ...rec }) => ({
...rec,
name,
type,
address,
cname: type === 'CNAME' ? address : undefined,
})
const zoneToRecord = ({ name, type, cname, address, ...host }) => ({ const zoneToRecord = ({ name, type, cname, address, ...host }) => ({
...host, ...host,
@@ -71,7 +75,12 @@ const batchLazyTasks = count => tasks => tasks.reduce((batches, task) => {
}, []); }, []);
const executeBatch = (batches) => batches.reduce((promise, batch) => { const executeBatch = (batches) => batches.reduce((promise, batch) => {
return promise.then(() => Promise.all(batch.map(fn => fn()))); return promise.then(() => {
console.log('>>> Running batch', batch.length);
return Promise.all(batch.map(fn => fn().catch(e => {
console.error(e);
})));
});
}, Promise.resolve()); }, Promise.resolve());
const getDomainService = ({ cpanel }) => { const getDomainService = ({ cpanel }) => {
@@ -95,11 +104,13 @@ const getDomainService = ({ cpanel }) => {
return list; return list;
}; };
const addRecords = R.compose(batchLazyTasks(10), R.map(R.cond([ const BATCH_SIZE = 10;
const addRecords = R.compose(batchLazyTasks(BATCH_SIZE), R.map(R.cond([
[ R.propEq('type', 'URL'), addRedirection ], [ R.propEq('type', 'URL'), addRedirection ],
[ R.T, addZoneRecord ], [ R.T, addZoneRecord ],
]))); ])));
const editRecords = R.compose(batchLazyTasks(10), R.map(R.cond([ const editRecords = R.compose(batchLazyTasks(BATCH_SIZE), R.map(R.cond([
[ R.propEq('type', 'URL'), editRedirection ], [ R.propEq('type', 'URL'), editRedirection ],
[ R.T, editZoneRecord ], [ R.T, editZoneRecord ],
]))); ])));
@@ -108,7 +119,8 @@ const getDomainService = ({ cpanel }) => {
const remoteHostList = await getHosts(); const remoteHostList = await getHosts();
const { add, edit } = diffRecords(remoteHostList, hosts); const { add, edit } = diffRecords(remoteHostList, hosts);
return executeBatch(addRecords(add).concat(editRecords(edit))); await executeBatch(addRecords(add).concat(editRecords(edit)));
return { additions: add.length, edits: edit.length };
}; };
return { getHosts, updateHosts }; return { getHosts, updateHosts };