unleash-server
Version:
Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.
33 lines • 1.35 kB
JavaScript
import { differenceInMinutes } from 'date-fns';
import { median } from '../../util/median.js';
export function calculateStageDurations(featureLifeCycles) {
const sortedLifeCycles = featureLifeCycles.sort((a, b) => a.enteredStageAt.getTime() - b.enteredStageAt.getTime());
const groupedByProjectAndStage = sortedLifeCycles.reduce((acc, curr, index, array) => {
const key = `${curr.project}/${curr.stage}`;
if (!acc[key]) {
acc[key] = [];
}
const nextItem = array
.slice(index + 1)
.find((item) => item.feature === curr.feature && item.stage !== curr.stage);
const endTime = nextItem ? nextItem.enteredStageAt : new Date();
const duration = differenceInMinutes(endTime, curr.enteredStageAt);
acc[key].push(duration);
return acc;
}, {});
return calculateMedians(groupedByProjectAndStage);
}
export const calculateMedians = (groupedByProjectAndStage) => {
const medians = [];
Object.entries(groupedByProjectAndStage).forEach(([key, durations]) => {
const [project, stage] = key.split('/');
const duration = median(durations);
medians.push({
project,
stage: stage,
duration,
});
});
return medians;
};
//# sourceMappingURL=calculate-stage-durations.js.map