2018-05-09 12:01:36 +05:30
|
|
|
import axios from '../../lib/utils/axios_utils';
|
2019-02-15 15:39:39 +05:30
|
|
|
import { parseBoolean } from '~/lib/utils/common_utils';
|
2018-05-09 12:01:36 +05:30
|
|
|
|
|
|
|
export default class PerformanceBarService {
|
2020-11-24 15:15:51 +05:30
|
|
|
static interceptor = null;
|
|
|
|
|
2018-05-09 12:01:36 +05:30
|
|
|
static fetchRequestDetails(peekUrl, requestId) {
|
|
|
|
return axios.get(peekUrl, { params: { request_id: requestId } });
|
|
|
|
}
|
|
|
|
|
|
|
|
static registerInterceptor(peekUrl, callback) {
|
2020-11-24 15:15:51 +05:30
|
|
|
PerformanceBarService.interceptor = response => {
|
2018-12-13 13:39:08 +05:30
|
|
|
const [fireCallback, requestId, requestUrl] = PerformanceBarService.callbackParams(
|
|
|
|
response,
|
|
|
|
peekUrl,
|
|
|
|
);
|
2018-05-09 12:01:36 +05:30
|
|
|
|
2018-11-20 20:47:30 +05:30
|
|
|
if (fireCallback) {
|
2018-05-09 12:01:36 +05:30
|
|
|
callback(requestId, requestUrl);
|
|
|
|
}
|
|
|
|
|
|
|
|
return response;
|
|
|
|
};
|
|
|
|
|
2020-11-24 15:15:51 +05:30
|
|
|
return axios.interceptors.response.use(PerformanceBarService.interceptor);
|
2018-05-09 12:01:36 +05:30
|
|
|
}
|
|
|
|
|
2020-11-24 15:15:51 +05:30
|
|
|
static removeInterceptor() {
|
|
|
|
axios.interceptors.response.eject(PerformanceBarService.interceptor);
|
|
|
|
PerformanceBarService.interceptor = null;
|
2018-05-09 12:01:36 +05:30
|
|
|
}
|
2018-11-20 20:47:30 +05:30
|
|
|
|
|
|
|
static callbackParams(response, peekUrl) {
|
|
|
|
const requestId = response.headers && response.headers['x-request-id'];
|
2020-11-24 15:15:51 +05:30
|
|
|
const requestUrl = response.config?.url;
|
2019-02-15 15:39:39 +05:30
|
|
|
const cachedResponse =
|
|
|
|
response.headers && parseBoolean(response.headers['x-gitlab-from-cache']);
|
2020-11-24 15:15:51 +05:30
|
|
|
const fireCallback = requestUrl !== peekUrl && Boolean(requestId) && !cachedResponse;
|
2018-11-20 20:47:30 +05:30
|
|
|
|
|
|
|
return [fireCallback, requestId, requestUrl];
|
|
|
|
}
|
2018-05-09 12:01:36 +05:30
|
|
|
}
|