diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-10-21 15:11:29 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-10-21 15:11:29 +0300 |
commit | 559b1da28e46a9969315beb11ee2d2056f75b06d (patch) | |
tree | fad20c706047f4aca44c1f030cb81d5b1e302cab /app/assets/javascripts/analytics | |
parent | a065770457b66dc856897fc5282bf897b9e4f65b (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/assets/javascripts/analytics')
-rw-r--r-- | app/assets/javascripts/analytics/shared/components/value_stream_metrics.vue | 36 | ||||
-rw-r--r-- | app/assets/javascripts/analytics/shared/utils.js | 28 |
2 files changed, 38 insertions, 26 deletions
diff --git a/app/assets/javascripts/analytics/shared/components/value_stream_metrics.vue b/app/assets/javascripts/analytics/shared/components/value_stream_metrics.vue index ffb61230661..cc7b554f32c 100644 --- a/app/assets/javascripts/analytics/shared/components/value_stream_metrics.vue +++ b/app/assets/javascripts/analytics/shared/components/value_stream_metrics.vue @@ -1,33 +1,11 @@ <script> import { GlSkeletonLoader } from '@gitlab/ui'; -import { flatten, isEqual, keyBy } from 'lodash'; +import { isEqual, keyBy } from 'lodash'; import { createAlert } from '~/flash'; import { sprintf, s__ } from '~/locale'; -import { METRICS_POPOVER_CONTENT } from '../constants'; -import { removeFlash, prepareTimeMetricsData } from '../utils'; +import { fetchMetricsData, removeFlash } from '../utils'; import MetricTile from './metric_tile.vue'; -const requestData = ({ request, endpoint, path, params, name }) => { - return request({ endpoint, params, requestPath: path }) - .then(({ data }) => data) - .catch(() => { - const message = sprintf( - s__( - 'ValueStreamAnalytics|There was an error while fetching value stream analytics %{requestTypeName} data.', - ), - { requestTypeName: name }, - ); - createAlert({ message }); - }); -}; - -const fetchMetricsData = (reqs = [], path, params) => { - const promises = reqs.map((r) => requestData({ ...r, path, params })); - return Promise.all(promises).then((responses) => - prepareTimeMetricsData(flatten(responses), METRICS_POPOVER_CONTENT), - ); -}; - const extractMetricsGroupData = (keyList = [], data = []) => { if (!keyList.length || !data.length) return []; const kv = keyBy(data, 'identifier'); @@ -111,7 +89,15 @@ export default { this.isLoading = false; }) - .catch(() => { + .catch((err) => { + const message = sprintf( + s__( + 'ValueStreamAnalytics|There was an error while fetching value stream analytics %{requestTypeName} data.', + ), + { requestTypeName: err.message }, + ); + + createAlert({ message }); this.isLoading = false; }); }, diff --git a/app/assets/javascripts/analytics/shared/utils.js b/app/assets/javascripts/analytics/shared/utils.js index bc52e38fc81..71b719d1ed2 100644 --- a/app/assets/javascripts/analytics/shared/utils.js +++ b/app/assets/javascripts/analytics/shared/utils.js @@ -1,8 +1,9 @@ +import { flatten } from 'lodash'; import { hideFlash } from '~/flash'; import dateFormat from '~/lib/dateformat'; import { slugify } from '~/lib/utils/text_utility'; import { urlQueryToFilter } from '~/vue_shared/components/filtered_search_bar/filtered_search_utils'; -import { dateFormats } from './constants'; +import { dateFormats, METRICS_POPOVER_CONTENT } from './constants'; export const filterBySearchTerm = (data = [], searchTerm = '', filterByKey = 'name') => { if (!searchTerm?.length) return data; @@ -96,3 +97,28 @@ export const prepareTimeMetricsData = (data = [], popoverContent = {}) => description: popoverContent[metricIdentifier]?.description || '', }; }); + +const requestData = ({ request, endpoint, requestPath, params, name }) => { + return request({ endpoint, params, requestPath }) + .then(({ data }) => data) + .catch(() => { + throw new Error(name); + }); +}; + +/** + * Takes a configuration array of metrics requests (key metrics and DORA) and returns + * a flat array of all the responses. Different metrics are retrieved from different endpoints + * additionally we only support certain metrics for FOSS users. + * + * @param {Array} requests - array of metric api requests to be made + * @param {String} requestPath - path for the group / project we are requesting + * @param {Object} params - optional parameters to filter, including `created_after` and `created_before` dates + * @returns a flat array of metrics + */ +export const fetchMetricsData = (requests = [], requestPath, params) => { + const promises = requests.map((r) => requestData({ ...r, requestPath, params })); + return Promise.all(promises).then((responses) => + prepareTimeMetricsData(flatten(responses), METRICS_POPOVER_CONTENT), + ); +}; |