summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/analytics/shared/utils.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/analytics/shared/utils.js')
-rw-r--r--app/assets/javascripts/analytics/shared/utils.js28
1 files changed, 27 insertions, 1 deletions
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),
+ );
+};