41 lines
1.2 KiB
JavaScript
41 lines
1.2 KiB
JavaScript
import Vue from 'vue';
|
|
import _ from 'underscore';
|
|
import axios from '../../lib/utils/axios_utils';
|
|
|
|
let vueResourceInterceptor;
|
|
|
|
export default class PerformanceBarService {
|
|
static fetchRequestDetails(peekUrl, requestId) {
|
|
return axios.get(peekUrl, { params: { request_id: requestId } });
|
|
}
|
|
|
|
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';
|
|
|
|
if (requestUrl !== peekUrl && requestId && !cachedResponse) {
|
|
callback(requestId, requestUrl);
|
|
}
|
|
|
|
return response;
|
|
};
|
|
|
|
vueResourceInterceptor = (request, next) => next(interceptor);
|
|
|
|
Vue.http.interceptors.push(vueResourceInterceptor);
|
|
|
|
return axios.interceptors.response.use(interceptor);
|
|
}
|
|
|
|
static removeInterceptor(interceptor) {
|
|
axios.interceptors.response.eject(interceptor);
|
|
Vue.http.interceptors = _.without(
|
|
Vue.http.interceptors,
|
|
vueResourceInterceptor,
|
|
);
|
|
}
|
|
}
|