Skip to content

Instantly share code, notes, and snippets.

@coderek
Created November 14, 2014 00:20
Show Gist options
  • Save coderek/e9f38a8657db03d9f547 to your computer and use it in GitHub Desktop.
Save coderek/e9f38a8657db03d9f547 to your computer and use it in GitHub Desktop.
/**
* get remaining time
* @param {string} start - UTC/ISO time string
* @param {string} end - UTC/ISO time string
*/
function getRemainingTime(start, end) {
start = moment(start), end = moment(end);
var now = moment();
if (now > end) {
return 0;
}
if (now < start) {
return end - start;
}
return now - start;
}
/**
* @param {int} targetsCompleted
* @param {int} totalTargets
*/
function getRemainingTargets(targetsCompleted, totalTargets) {
return totalTargets - targetsCompleted;
}
/**
* @param {int} targetsCompleted
* @param {string} start - start of campaign/ad
*/
function getSpeed(targetsCompleted, start) {
// duration in ms
var duration = moment() - moment(start);
if (duration <= 0) {
return 0;
}
return targetsCompleted / duration;
}
/**
* get status of progress
* @param {float} targetsPerMS - targets completed per ms
* @param {int} remainingTargets - current targets left
* @param {int} remainingTime - number of ms left from now
* @return {string} 'ok' | 'warning' | 'danger'
*/
function performanceStatus (targetsPerMS, remainingTargets, remainingTime) {
var expected = targetsPerMS * remainingTime;
var short = remainingTargets - expected;
if (short > 0) {
return 'ok';
}
short = Math.abs(short);
if (remainingTargets === 0 || short / remainingTargets > 0.1) {
return 'danger';
} else {
return 'warning';
}
}
var targetsPerMS = getSpeed(ad.stats.getTotal(), ad.get('start'));
var remainingTargets = getRemainingTargets(stats.getTotal(), ad.getTotalTargets());
var remainingTime = getRemainingTime(ad.get('start'), ad.get('end'));
var status = performanceStatus(targetsPerMS, remainingTargets, remainingTime);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment