debian-mirror-gitlab/app/assets/javascripts/performance_bar/stores/performance_bar_store.js

77 lines
2.1 KiB
JavaScript
Raw Normal View History

2018-05-09 12:01:36 +05:30
export default class PerformanceBarStore {
constructor() {
this.requests = [];
}
2019-12-21 20:55:43 +05:30
addRequest(requestId, requestUrl) {
2018-05-09 12:01:36 +05:30
if (!this.findRequest(requestId)) {
2020-01-01 13:55:28 +05:30
const shortUrl = PerformanceBarStore.truncateUrl(requestUrl);
2018-05-09 12:01:36 +05:30
this.requests.push({
id: requestId,
url: requestUrl,
2020-01-01 13:55:28 +05:30
truncatedUrl: shortUrl,
2019-12-21 20:55:43 +05:30
details: {},
hasWarnings: false,
2018-05-09 12:01:36 +05:30
});
}
return this.requests;
}
findRequest(requestId) {
2021-03-08 18:12:59 +05:30
return this.requests.find((request) => request.id === requestId);
2018-05-09 12:01:36 +05:30
}
addRequestDetails(requestId, requestDetails) {
const request = this.findRequest(requestId);
2019-12-21 20:55:43 +05:30
request.details = requestDetails.data;
request.hasWarnings = requestDetails.has_warnings;
2018-05-09 12:01:36 +05:30
return request;
}
2020-01-01 13:55:28 +05:30
setRequestDetailsData(requestId, metricKey, requestDetailsData) {
const selectedRequest = this.findRequest(requestId);
if (selectedRequest) {
selectedRequest.details = {
...selectedRequest.details,
[metricKey]: requestDetailsData,
};
}
}
2018-05-09 12:01:36 +05:30
requestsWithDetails() {
2021-03-08 18:12:59 +05:30
return this.requests.filter((request) => request.details);
2018-05-09 12:01:36 +05:30
}
canTrackRequest(requestUrl) {
2021-04-29 21:17:54 +05:30
// We want to store at most 2 unique requests per URL, as additional
// requests to the same URL probably aren't very interesting.
//
// GraphQL requests are the exception: because all GraphQL requests
// go to the same URL, we set a higher limit of 10 to allow
// capturing different queries a page may make.
const requestsLimit = requestUrl.endsWith('/api/graphql') ? 10 : 2;
return this.requests.filter((request) => request.url === requestUrl).length < requestsLimit;
2018-05-09 12:01:36 +05:30
}
2020-01-01 13:55:28 +05:30
static truncateUrl(requestUrl) {
const [rootAndQuery] = requestUrl.split('#');
const [root, query] = rootAndQuery.split('?');
const components = root.replace(/\/$/, '').split('/');
let truncated = components[components.length - 1];
if (truncated.match(/^\d+$/)) {
truncated = `${components[components.length - 2]}/${truncated}`;
}
if (query) {
truncated += `?${query}`;
}
return truncated;
}
2018-05-09 12:01:36 +05:30
}