summaryrefslogtreecommitdiff
path: root/backend/params.js
diff options
context:
space:
mode:
authorschneefux <schneefux+commit@schneefux.xyz>2018-05-07 09:06:04 +0200
committerschneefux <schneefux+commit@schneefux.xyz>2018-05-07 09:06:04 +0200
commit5caf4e48174533710243e8eeaf52567795ec9d01 (patch)
tree1396f09bd14c3c4e1af3164ef924f2190b3f949f /backend/params.js
parentded191658af266a764332b9a1b72d628de3d5b6e (diff)
downloadbrokentalents-5caf4e48174533710243e8eeaf52567795ec9d01.tar.gz
brokentalents-5caf4e48174533710243e8eeaf52567795ec9d01.zip
move files to backend subdir, push data in submodule
Diffstat (limited to 'backend/params.js')
-rw-r--r--backend/params.js39
1 files changed, 39 insertions, 0 deletions
diff --git a/backend/params.js b/backend/params.js
new file mode 100644
index 0000000..5edf658
--- /dev/null
+++ b/backend/params.js
@@ -0,0 +1,39 @@
+#!/usr/bin/node
+
+const R = require('ramda'),
+ moment = require('moment');
+
+function paramsForHourSample(config) {
+ const requestArgsForRegionStartEnd = R.curry((region, start, end) => [
+ `/shards/${region}/matches`, {
+ 'sort': '-createdAt',
+ 'filter[gameMode]': R.join(',', config.modes),
+ 'filter[createdAt-start]': start.toISOString(),
+ 'filter[createdAt-end]': end.toISOString(),
+ 'page[limit]': config.matchesPerRequest,
+ 'page[offset]': '0',
+ }
+ ]);
+
+ const intervalMinutes = moment.duration(config.interval, config.intervalUnit).as('minutes');
+ const requestsPerMinutePerRegion = Math.floor(config.requestsPerInterval / config.regions.length);
+ const splitDurationMinutes = Math.floor(intervalMinutes / requestsPerMinutePerRegion);
+ const splitMoments = (hour) => R.map(
+ (offsetIndex) => [
+ hour.clone().minutes(offsetIndex * splitDurationMinutes),
+ hour.clone().minutes((offsetIndex + 1) * splitDurationMinutes),
+ ],
+ R.range(0, requestsPerMinutePerRegion),
+ );
+
+ return R.pipe(
+ splitMoments,
+ R.xprod(config.regions),
+ R.map(R.unnest),
+ R.map(R.apply(requestArgsForRegionStartEnd)),
+ );
+}
+
+module.exports = {
+ paramsForHourSample,
+};