Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-10-21 15:11:29 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2022-10-21 15:11:29 +0300
commit559b1da28e46a9969315beb11ee2d2056f75b06d (patch)
treefad20c706047f4aca44c1f030cb81d5b1e302cab /app/assets/javascripts/analytics
parenta065770457b66dc856897fc5282bf897b9e4f65b (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.vue36
-rw-r--r--app/assets/javascripts/analytics/shared/utils.js28
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),
+ );
+};