Commit 42523a41 authored by Phil Hughes's avatar Phil Hughes

Merge branch '50801-error-getting-performance-bar-results-for-uuid' into 'master'

Resolve "Error getting performance bar results for <UUID>"

Closes #50801

See merge request gitlab-org/gitlab-ce!21411
parents e30e54b9 51f2588f
import Vue from 'vue'; import Vue from 'vue';
import Flash from '../flash';
import PerformanceBarService from './services/performance_bar_service'; import PerformanceBarService from './services/performance_bar_service';
import PerformanceBarStore from './stores/performance_bar_store'; import PerformanceBarStore from './stores/performance_bar_store';
...@@ -46,7 +45,8 @@ export default ({ container }) => ...@@ -46,7 +45,8 @@ export default ({ container }) =>
this.store.addRequestDetails(requestId, res.data.data); this.store.addRequestDetails(requestId, res.data.data);
}) })
.catch(() => .catch(() =>
Flash(`Error getting performance bar results for ${requestId}`), // eslint-disable-next-line no-console
console.warn(`Error getting performance bar results for ${requestId}`),
); );
}, },
}, },
......
...@@ -11,13 +11,10 @@ export default class PerformanceBarService { ...@@ -11,13 +11,10 @@ export default class PerformanceBarService {
static registerInterceptor(peekUrl, callback) { static registerInterceptor(peekUrl, callback) {
const interceptor = response => { const interceptor = response => {
const requestId = response.headers['x-request-id']; const [fireCallback, requestId, requestUrl] =
// Get the request URL from response.config for Axios, and response for PerformanceBarService.callbackParams(response, peekUrl);
// Vue Resource.
const requestUrl = (response.config || response).url;
const cachedResponse = response.headers['x-gitlab-from-cache'] === 'true';
if (requestUrl !== peekUrl && requestId && !cachedResponse) { if (fireCallback) {
callback(requestId, requestUrl); callback(requestId, requestUrl);
} }
...@@ -38,4 +35,16 @@ export default class PerformanceBarService { ...@@ -38,4 +35,16 @@ export default class PerformanceBarService {
vueResourceInterceptor, vueResourceInterceptor,
); );
} }
static callbackParams(response, peekUrl) {
const requestId = response.headers && response.headers['x-request-id'];
// Get the request URL from response.config for Axios, and response for
// Vue Resource.
const requestUrl = (response.config || response).url;
const apiRequest = requestUrl && requestUrl.match(/^\/api\//);
const cachedResponse = response.headers && response.headers['x-gitlab-from-cache'] === 'true';
const fireCallback = requestUrl !== peekUrl && requestId && !apiRequest && !cachedResponse;
return [fireCallback, requestId, requestUrl];
}
} }
---
title: Don't show flash messages for performance bar errors
merge_request: 21411
author:
type: other
import PerformanceBarService from '~/performance_bar/services/performance_bar_service';
describe('PerformanceBarService', () => {
describe('callbackParams', () => {
describe('fireCallback', () => {
function fireCallback(response, peekUrl) {
return PerformanceBarService.callbackParams(response, peekUrl)[0];
}
it('returns false when the request URL is the peek URL', () => {
expect(fireCallback({ headers: { 'x-request-id': '123' }, url: '/peek' }, '/peek'))
.toBeFalsy();
});
it('returns false when there is no request ID', () => {
expect(fireCallback({ headers: {}, url: '/request' }, '/peek'))
.toBeFalsy();
});
it('returns false when the request is an API request', () => {
expect(fireCallback({ headers: { 'x-request-id': '123' }, url: '/api/' }, '/peek'))
.toBeFalsy();
});
it('returns false when the response is from the cache', () => {
expect(fireCallback({ headers: { 'x-request-id': '123', 'x-gitlab-from-cache': 'true' }, url: '/request' }, '/peek'))
.toBeFalsy();
});
it('returns true when all conditions are met', () => {
expect(fireCallback({ headers: { 'x-request-id': '123' }, url: '/request' }, '/peek'))
.toBeTruthy();
});
});
describe('requestId', () => {
function requestId(response, peekUrl) {
return PerformanceBarService.callbackParams(response, peekUrl)[1];
}
it('gets the request ID from the headers', () => {
expect(requestId({ headers: { 'x-request-id': '123' } }, '/peek'))
.toEqual('123');
});
});
describe('requestUrl', () => {
function requestUrl(response, peekUrl) {
return PerformanceBarService.callbackParams(response, peekUrl)[2];
}
it('gets the request URL from the response object', () => {
expect(requestUrl({ headers: {}, url: '/request' }, '/peek'))
.toEqual('/request');
});
it('gets the request URL from response.config if present', () => {
expect(requestUrl({ headers: {}, config: { url: '/config-url' }, url: '/request' }, '/peek'))
.toEqual('/config-url');
});
});
});
});
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