Commit 96904b02 authored by Sean McGivern's avatar Sean McGivern

Ignore API requests in performance bar

These don't have performance data saved as they use Grape.
parent e30e54b9
......@@ -11,13 +11,10 @@ export default class PerformanceBarService {
static registerInterceptor(peekUrl, callback) {
const interceptor = response => {
const requestId = 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 cachedResponse = response.headers['x-gitlab-from-cache'] === 'true';
const [fireCallback, requestId, requestUrl] =
PerformanceBarService.callbackParams(response, peekUrl);
if (requestUrl !== peekUrl && requestId && !cachedResponse) {
if (fireCallback) {
callback(requestId, requestUrl);
}
......@@ -38,4 +35,16 @@ export default class PerformanceBarService {
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