Commit 309c9841 authored by Mike Greiling's avatar Mike Greiling

process mocked performance data responses from mr_widget_service class

parent 4238ef34
...@@ -36,8 +36,54 @@ export default class MRWidgetService extends CEWidgetService { ...@@ -36,8 +36,54 @@ export default class MRWidgetService extends CEWidgetService {
} }
fetchReport(endpoint) { // eslint-disable-line fetchReport(endpoint) { // eslint-disable-line
if (endpoint === '/performance_head' || endpoint === '/performance_base') { if (endpoint === '/performance_head') {
return Promise.resolve([]); return new Promise((resolve) => {
setTimeout(resolve, 1000, [
{
subject: '/some/path',
metrics: [
{
name: 'Sitespeed Score',
value: 85,
},
],
},
{
subject: '/some/other/path',
metrics: [
{
name: 'Sitespeed Score',
value: 80,
},
],
},
]);
});
}
if (endpoint === '/performance_base') {
return new Promise((resolve) => {
setTimeout(resolve, 1000, [
{
subject: '/some/path',
metrics: [
{
name: 'Sitespeed Score',
value: 84,
},
],
},
{
subject: '/some/other/path',
metrics: [
{
name: 'Sitespeed Score',
value: 80,
},
],
},
]);
});
} }
return Vue.http.get(endpoint).then(res => res.json()); return Vue.http.get(endpoint).then(res => res.json());
......
...@@ -97,25 +97,42 @@ export default class MergeRequestStore extends CEMergeRequestStore { ...@@ -97,25 +97,42 @@ export default class MergeRequestStore extends CEMergeRequestStore {
} }
comparePerformanceMetrics(headMetrics, baseMetrics) { comparePerformanceMetrics(headMetrics, baseMetrics) {
// eslint-disable-next-line const headMetricsIndexed = MergeRequestStore.normalizePerformanceMetrics(headMetrics);
console.log(headMetrics, baseMetrics); const baseMetricsIndexed = MergeRequestStore.normalizePerformanceMetrics(baseMetrics);
this.performanceMetrics.improved = [ const improved = [];
{ const degraded = [];
name: 'Overall Score',
score: 50, Object.keys(headMetricsIndexed).forEach((subject) => {
delta: 0, const subjectMetrics = headMetricsIndexed[subject];
path: '/foo/bar', Object.keys(subjectMetrics).forEach((metric) => {
}, const headMetricData = subjectMetrics[metric];
];
this.performanceMetrics.degraded = [ if (baseMetricsIndexed[subject] && baseMetricsIndexed[subject][metric]) {
{ const baseMetricData = baseMetricsIndexed[subject][metric];
name: 'Overall Score', const metricData = {
score: 53, name: metric,
delta: -1, path: subject,
path: '/foo/bar/bin', score: headMetricData.value,
}, delta: headMetricData.value - baseMetricData.value,
]; };
if (headMetricData.value >= baseMetricData.value) {
improved.push(metricData);
} else {
degraded.push(metricData);
}
} else {
improved.push({
name: metric,
path: subject,
score: headMetricData.value,
});
}
});
});
this.performanceMetrics = { improved, degraded };
} }
/** /**
...@@ -175,4 +192,18 @@ export default class MergeRequestStore extends CEMergeRequestStore { ...@@ -175,4 +192,18 @@ export default class MergeRequestStore extends CEMergeRequestStore {
static filterByFingerprint(firstArray, secondArray) { static filterByFingerprint(firstArray, secondArray) {
return firstArray.filter(item => !secondArray.find(el => el.fingerprint === item.fingerprint)); return firstArray.filter(item => !secondArray.find(el => el.fingerprint === item.fingerprint));
} }
// normalize performance metrics by indexing on performance subject and metric name
static normalizePerformanceMetrics(performanceData) {
const indexedSubjects = {};
performanceData.forEach(({ subject, metrics }) => {
const indexedMetrics = {};
metrics.forEach(({ name, ...data }) => {
indexedMetrics[name] = data;
});
indexedSubjects[subject] = indexedMetrics;
});
return indexedSubjects;
}
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment