@dynamic-data/oura-mockups
Version:
Oura Mockup Data Generators
408 lines (361 loc) • 14.9 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var utils = require('@dynamic-data/utils');
var MOCK = require('@dynamic-data/oura-data');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var MOCK__default = /*#__PURE__*/_interopDefaultLegacy(MOCK);
var randGen = new utils.MersenneTwister();
var ActivitySummaryModel = {
summary_date: function summary_date(d, i) {
return utils.getNewDate(d, i, "DATE");
},
day_end: function day_end(d, i) {
return utils.getNewDate(d, i, "DATE"); //return '2016-09-04T03:59:59+03:00';
},
daily_movement: function daily_movement() {
return utils.convertToInt(randGen.random(), 1000, 15000);
},
steps: function steps(m) {
var steps = utils.convertToInt(randGen.random(), 20, 60);
return Math.ceil(m * steps / 100);
},
cal_total: function cal_total() {
return utils.convertToInt(randGen.random(), 2000, 3500);
},
cal_active: function cal_active(m) {
var cals = utils.convertToInt(randGen.random(), 20, 60);
return Math.ceil(m * cals / 100);
}
};
var ReadinessSummaryModel = {
summary_date: function summary_date(d, i) {
return utils.getNewDate(d, i, "DATE");
},
period_id: function period_id() {
return utils.convertToInt(randGen.random(), 0, 100);
},
score: function score(score_previous_night, score_sleep_balance, score_previous_day, score_activity_balance, score_resting_hr, score_hrv_balance, score_recovery_index, score_temperature) {
return Math.round((score_previous_night + score_sleep_balance + score_previous_day + score_activity_balance + score_resting_hr + score_hrv_balance + score_recovery_index + score_temperature) / 8);
},
score_previous_night: function score_previous_night() {
return utils.convertToInt(randGen.random(), 0, 100);
},
score_sleep_balance: function score_sleep_balance() {
return utils.convertToInt(randGen.random(), 0, 100);
},
score_previous_day: function score_previous_day() {
return utils.convertToInt(randGen.random(), 0, 100);
},
score_activity_balance: function score_activity_balance() {
return utils.convertToInt(randGen.random(), 0, 100);
},
score_resting_hr: function score_resting_hr() {
return utils.convertToInt(randGen.random(), 0, 100);
},
score_hrv_balance: function score_hrv_balance() {
return utils.convertToInt(randGen.random(), 0, 100);
},
score_recovery_index: function score_recovery_index() {
return utils.convertToInt(randGen.random(), 0, 100);
},
score_temperature: function score_temperature() {
return utils.convertToInt(randGen.random(), 0, 100);
},
rest_mode_state: function rest_mode_state() {
return utils.pickRandomValue([0, 1, 2, 3, 4], randGen);
}
};
var SleepSummaryModel = {
summary_date: function summary_date(d, i) {
return utils.getNewDate(d, i, "DATE");
},
bedtime_start: function bedtime_start(d, start, range) {
return utils.getSleepDate(d, start, range);
},
bedtime_end: function bedtime_end(d, sleepTimeRangeInMins) {
var sleepTime = utils.convertToInt(randGen.random(), sleepTimeRangeInMins[0], sleepTimeRangeInMins[1]);
var startTime = new Date(d).getTime();
var endTime = startTime + sleepTime * 60 * 1000;
return utils.toIsoString(new Date(endTime));
},
score: function score(score_alignment, score_deep, score_rem, score_latency, score_efficiency, score_disturbances, score_total) {
return Math.round(0.1 * score_alignment + 0.1 * score_deep + 0.1 * score_rem + 0.1 * score_latency + 0.1 * score_efficiency + 0.15 * score_disturbances + 0.35 * score_total);
},
score_alignment: function score_alignment() {
return utils.convertToInt(randGen.random(), 60, 90);
},
score_deep: function score_deep() {
return utils.convertToInt(randGen.random(), 60, 90);
},
score_rem: function score_rem() {
return utils.convertToInt(randGen.random(), 60, 90);
},
score_latency: function score_latency() {
return utils.convertToInt(randGen.random(), 60, 90);
},
score_efficiency: function score_efficiency() {
return utils.convertToInt(randGen.random(), 60, 90);
},
score_disturbances: function score_disturbances() {
return utils.convertToInt(randGen.random(), 60, 90);
},
score_total: function score_total() {
return utils.convertToInt(randGen.random(), 60, 90);
},
restless: function restless() {
return utils.convertToInt(randGen.random(), 60, 90);
},
efficiency: function efficiency(duration, total) {
return Math.round(total / duration * 100);
},
duration: function duration(startTime, endTime) {
var startTimeTS = new Date(startTime).getTime();
var endTimeTS = new Date(endTime).getTime();
return Math.ceil((endTimeTS - startTimeTS) / 1000); // secs
},
total: function total(duration) {
return duration - utils.convertToInt(randGen.random(), 500, 2000);
},
deep: function deep(total, light, rem) {
return total - light - rem;
},
awake: function awake(duration, total) {
return duration - total;
},
light: function light(totalSleep) {
var p = utils.convertToInt(randGen.random(), 40, 70) / 100;
return Math.ceil(totalSleep * p);
},
rem: function rem(sleepSecs) {
var p = utils.convertToInt(randGen.random(), 40, 70) / 100;
return Math.ceil(sleepSecs * p);
},
hr_lowest: function hr_lowest(hr_5min) {
//console.log("HR 5min ARG ", hr_5min)
//let hr = hr_5min.filter(hr => hr !== 0);
var hrs = hr_5min.slice(); //Avoids Sorting original array
var hr = hrs.sort(function (a, b) {
return a - b;
}); //Sorts lowest to highest number instead of digits (e.g. without the function, the array would show [100,20] instead of [20,100])
return hr[0]; //console.log("LOWEST HR", hr);
},
hr_average: function hr_average(hr_5min) {
return utils.getAverage(hr_5min);
},
temperature_delta: function temperature_delta() {
return utils.convertToInt(randGen.random(), 0, 5000) / 1000 - 2.5;
},
hypnogram_5min: function hypnogram_5min(bedtime_start, bedtime_end) {
var bedtimeStart = new Date(bedtime_start);
var bedtimeEnd = new Date(bedtime_end);
var timeIntervals = bedtimeEnd - bedtimeStart;
timeIntervals = Math.floor(timeIntervals / 300000);
var hypnogramString = "";
for (var i = 0; i < timeIntervals; i++) {
hypnogramString += utils.convertToInt(randGen.random(), 0, 4).toString();
}
return hypnogramString;
},
hr_5min: function hr_5min(bedtime_start, bedtime_end) {
var bedtimeStart = new Date(bedtime_start);
var bedtimeEnd = new Date(bedtime_end);
var timeIntervals = bedtimeEnd - bedtimeStart;
timeIntervals = Math.floor(timeIntervals / 300000);
var hrArr = []; // otherwise the heart rate list values are always same and hr_lowest/average is always same too
var startValue = utils.convertToInt(randGen.random(), 40, 60);
for (var i = 0; i < timeIntervals; i++) {
hrArr.push(utils.convertToInt(randGen.random(), startValue, 90));
} //console.log("HR_5min ", timeIntervals, hrArr);
return hrArr;
},
rmssd_5min: function rmssd_5min(bedtime_start, bedtime_end) {
var bedtimeStart = new Date(bedtime_start);
var bedtimeEnd = new Date(bedtime_end);
var timeIntervals = bedtimeEnd - bedtimeStart;
timeIntervals = Math.floor(timeIntervals / 300000);
var rmssdArr = [];
for (var i = 0; i < timeIntervals; i++) {
rmssdArr.push(utils.convertToInt(randGen.random(), 0, 100));
}
return rmssdArr;
}
};
var dataModels = {
ActivitySummary: {
data: MOCK__default["default"].ActivitySummary,
mockup: ActivitySummaryModel
},
ActivitySummaryAsync: {
data: MOCK__default["default"].ActivitySummaryAsync,
mockup: ActivitySummaryModel
},
// CSV header is same as JSON attributes
ReadinessSummary: {
data: MOCK__default["default"].ReadinessSummary,
mockup: ReadinessSummaryModel
},
ReadinessSummaryAsync: {
data: MOCK__default["default"].ReadinessSummaryAsync,
mockup: ReadinessSummaryModel
},
SleepSummary: {
data: MOCK__default["default"].SleepSummary,
mockup: SleepSummaryModel
},
SleepSummaryAsync: {
data: MOCK__default["default"].SleepSummaryAsync,
mockup: SleepSummaryModel
},
SleepData: {
data: MOCK__default["default"].SleepData,
mockup: SleepSummaryModel
},
SleepDataAsync: {
data: MOCK__default["default"].SleepDataAsync,
mockup: SleepSummaryModel
}
};
function getModelCSVHeader(dataModel) {
return dataModels[dataModel].data[0].split("\t");
}
function getActivityMockupData(dataModel, dataDate, seed) {
var mockupData = {};
var mockupModel = dataModels[dataModel].mockup;
mockupData = dataModels[dataModel].data;
if (seed === null) {
randGen = new utils.MersenneTwister();
} else {
randGen = new utils.MersenneTwister(seed);
}
["summary_date", "daily_movement", "cal_total", "day_start", "day_end", "steps", "cal_active"].forEach(function (key, i) {
switch (key) {
case "summary_date":
var date = new Date(dataDate);
mockupData[key] = "".concat(date.getFullYear(), "-").concat(('0' + (date.getMonth() + 1)).slice(-2), "-").concat(('0' + date.getDate()).slice(-2));
break;
case "daily_movement":
mockupData[key] = mockupModel[key]();
break;
case "cal_total":
mockupData[key] = mockupModel[key]();
break;
case "day_start":
var dayStartTime = mockupData[key].split("T")[1];
mockupData[key] = mockupData["summary_date"] + "T" + dayStartTime;
break;
case "day_end":
var dayEndTime = mockupData[key].split("T")[1];
var dayEndDate = mockupModel[key](mockupData["summary_date"], 1);
mockupData[key] = dayEndDate + "T" + dayEndTime;
break;
case "steps":
mockupData[key] = mockupModel[key](mockupData["daily_movement"]);
break;
case "cal_active":
mockupData[key] = mockupModel[key](mockupData["cal_total"]);
break;
}
});
return mockupData;
}
function getReadinessMockupData(dataModel, dataDate) {
var seed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
var mockupData = {};
var mockupModel = dataModels[dataModel].mockup;
mockupData = dataModels[dataModel].data;
if (seed === null) {
randGen = new utils.MersenneTwister();
} else {
randGen = new utils.MersenneTwister(seed);
}
["summary_date", "period_id", "score_previous_night", "score_sleep_balance", "score_previous_day", "score_activity_balance", "score_resting_hr", "score_hrv_balance", "score_recovery_index", "score_temperature", "score", "rest_mode_state"].forEach(function (key, i) {
switch (key) {
case "summary_date":
var date = new Date(dataDate);
mockupData[key] = "".concat(date.getFullYear(), "-").concat(('0' + (date.getMonth() + 1)).slice(-2), "-").concat(('0' + date.getDate()).slice(-2));
break;
case "score":
mockupData[key] = mockupModel[key](mockupData["score_previous_night"], mockupData["score_sleep_balance"], mockupData["score_previous_day"], mockupData["score_activity_balance"], mockupData["score_resting_hr"], mockupData["score_hrv_balance"], mockupData["score_recovery_index"], mockupData["score_temperature"]);
break;
default:
mockupData[key] = mockupModel[key]();
break;
}
});
return mockupData;
}
function getSleepMockupData(dataModel, dataDate) {
var seed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
var mockupData = {};
var mockupModel = dataModels[dataModel].mockup;
mockupData = dataModels[dataModel].data;
if (seed === null) {
randGen = new utils.MersenneTwister();
} else {
randGen = new utils.MersenneTwister(seed);
}
["summary_date", "bedtime_start", "timestamp", "timezone", "bedtime_end", "duration", "total", "awake", "light", "rem", "deep", "score_alignment", "score_deep", "score_rem", "score_latency", "score_efficiency", "score_disturbances", "score_total", "restless", "efficiency", "score", "temperature_delta", "hypnogram_5min", "hr_5min", "rmssd_5min", "hr_lowest", "hr_average"].forEach(function (key, i) {
switch (key) {
case "summary_date":
var date = new Date(dataDate);
mockupData[key] = "".concat(date.getFullYear(), "-").concat(('0' + (date.getMonth() + 1)).slice(-2), "-").concat(('0' + date.getDate()).slice(-2));
break;
case "timezone":
mockupData[key] = 0; // all dates are utc
break;
case "score":
mockupData[key] = mockupModel[key](mockupData["score_alignment"], mockupData["score_deep"], mockupData["score_rem"], mockupData["score_latency"], mockupData["score_efficiency"], mockupData["score_disturbances"], mockupData["score_total"]);
break;
case "bedtime_start":
mockupData[key] = mockupModel[key](mockupData["summary_date"], 22, 3);
break;
// sleepData model has this attribute...
case "timestamp":
mockupData[key] = mockupData["bedtime_start"];
break;
case "bedtime_end":
// sleep time 5-9h
mockupData[key] = mockupModel[key](mockupData["bedtime_start"], [5 * 60, 9 * 60]);
break;
case "duration":
mockupData[key] = mockupModel[key](mockupData["bedtime_start"], mockupData["bedtime_end"]);
break;
case "awake":
case "efficiency":
mockupData[key] = mockupModel[key](mockupData["duration"], mockupData["total"]);
break;
case "total":
mockupData[key] = mockupModel[key](mockupData["duration"]);
break;
case "light":
mockupData[key] = mockupModel[key](mockupData["total"]);
break;
case "rem":
mockupData[key] = mockupModel[key](mockupData["total"] - mockupData["light"]);
break;
case "deep":
mockupData[key] = mockupModel[key](mockupData["total"], mockupData["light"], mockupData["rem"]);
break;
case "hr_lowest":
case "hr_average":
mockupData[key] = mockupModel[key](mockupData["hr_5min"]);
break;
case "hypnogram_5min":
case "hr_5min":
case "rmssd_5min":
mockupData[key] = mockupModel[key](mockupData["bedtime_start"], mockupData["bedtime_end"]);
break;
case "rmssd_5min":
mockupData[key] = mockupModel[key](mockupData["duration"], mockupData["total"]);
break;
default:
mockupData[key] = mockupModel[key]();
break;
}
});
return mockupData;
}
exports.getActivityMockupData = getActivityMockupData;
exports.getModelCSVHeader = getModelCSVHeader;
exports.getReadinessMockupData = getReadinessMockupData;
exports.getSleepMockupData = getSleepMockupData;