diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-01-24 15:09:00 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-01-24 15:09:00 +0000 |
commit | c282dba898a4cb0645f88579339502a4e3778727 (patch) | |
tree | 94a6457ce4438e085c9ae43bc51a2b5a29787bf2 /app/assets/javascripts/monitoring | |
parent | 2c2dd5e36c4ed5f09f488be288882d98f9124d12 (diff) | |
download | gitlab-ce-c282dba898a4cb0645f88579339502a4e3778727.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/assets/javascripts/monitoring')
3 files changed, 60 insertions, 11 deletions
diff --git a/app/assets/javascripts/monitoring/queries/getEnvironments.query.graphql b/app/assets/javascripts/monitoring/queries/getEnvironments.query.graphql new file mode 100644 index 00000000000..fd3a4348509 --- /dev/null +++ b/app/assets/javascripts/monitoring/queries/getEnvironments.query.graphql @@ -0,0 +1,10 @@ +query getEnvironments($projectPath: ID!, $search: String) { + project(fullPath: $projectPath) { + data: environments(search: $search) { + environments: nodes { + name + id + } + } + } +} diff --git a/app/assets/javascripts/monitoring/stores/actions.js b/app/assets/javascripts/monitoring/stores/actions.js index 6303ed2b82f..e26e1457f55 100644 --- a/app/assets/javascripts/monitoring/stores/actions.js +++ b/app/assets/javascripts/monitoring/stores/actions.js @@ -1,7 +1,9 @@ import * as types from './mutation_types'; import axios from '~/lib/utils/axios_utils'; import createFlash from '~/flash'; +import { gqClient, parseEnvironmentsResponse, removeLeadingSlash } from './utils'; import trackDashboardLoad from '../monitoring_tracking_helper'; +import getEnvironments from '../queries/getEnvironments.query.graphql'; import statusCodes from '../../lib/utils/http_status'; import { backOff } from '../../lib/utils/common_utils'; import { s__, sprintf } from '../../locale'; @@ -187,26 +189,30 @@ export const fetchDeploymentsData = ({ state, dispatch }) => { }); }; -export const fetchEnvironmentsData = ({ state, dispatch }) => { - if (!state.environmentsEndpoint) { - return Promise.resolve([]); - } - return axios - .get(state.environmentsEndpoint) - .then(resp => resp.data) - .then(response => { - if (!response || !response.environments) { +export const fetchEnvironmentsData = ({ state, dispatch }) => + gqClient + .mutate({ + mutation: getEnvironments, + variables: { + projectPath: removeLeadingSlash(state.projectPath), + search: state.environmentsSearchTerm, + }, + }) + .then(resp => + parseEnvironmentsResponse(resp.data?.project?.data?.environments, state.projectPath), + ) + .then(environments => { + if (!environments) { createFlash( s__('Metrics|There was an error fetching the environments data, please try again'), ); } - dispatch('receiveEnvironmentsDataSuccess', response.environments); + dispatch('receiveEnvironmentsDataSuccess', environments); }) .catch(() => { dispatch('receiveEnvironmentsDataFailure'); createFlash(s__('Metrics|There was an error getting environments information.')); }); -}; /** * Set a new array of metrics to a panel group diff --git a/app/assets/javascripts/monitoring/stores/utils.js b/app/assets/javascripts/monitoring/stores/utils.js index 616d2e9bfd8..56244a4ca66 100644 --- a/app/assets/javascripts/monitoring/stores/utils.js +++ b/app/assets/javascripts/monitoring/stores/utils.js @@ -1,8 +1,41 @@ import { omit } from 'lodash'; +import createGqClient from '~/lib/graphql'; +import { getIdFromGraphQLId } from '~/graphql_shared/utils'; + +export const gqClient = createGqClient(); export const uniqMetricsId = metric => `${metric.metric_id}_${metric.id}`; /** + * Project path has a leading slash that doesn't work well + * with project full path resolver here + * https://gitlab.com/gitlab-org/gitlab/blob/5cad4bd721ab91305af4505b2abc92b36a56ad6b/app/graphql/resolvers/full_path_resolver.rb#L10 + * + * @param {String} str String with leading slash + * @returns {String} + */ +export const removeLeadingSlash = str => (str || '').replace(/^\/+/, ''); + +/** + * GraphQL environments API returns only id and name. + * For the environments dropdown we need metrics_path. + * This method parses the results and add neccessart attrs + * + * @param {Array} response Environments API result + * @param {String} projectPath Current project path + * @returns {Array} + */ +export const parseEnvironmentsResponse = (response = [], projectPath) => + (response || []).map(env => { + const id = getIdFromGraphQLId(env.id); + return { + ...env, + id, + metrics_path: `${projectPath}/environments/${id}/metrics`, + }; + }); + +/** * Metrics loaded from project-defined dashboards do not have a metric_id. * This method creates a unique ID combining metric_id and id, if either is present. * This is hopefully a temporary solution until BE processes metrics before passing to fE |