Skip to content
Snippets Groups Projects
Commit 96904b02 authored by Sean McGivern's avatar Sean McGivern
Browse files

Ignore API requests in performance bar

These don't have performance data saved as they use Grape.
parent e30e54b9
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -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);
}
 
Loading
Loading
@@ -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');
});
});
});
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment