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:
Diffstat (limited to 'app/assets/javascripts/environments/graphql/resolvers.js')
-rw-r--r--app/assets/javascripts/environments/graphql/resolvers.js320
1 files changed, 7 insertions, 313 deletions
diff --git a/app/assets/javascripts/environments/graphql/resolvers.js b/app/assets/javascripts/environments/graphql/resolvers.js
index 8cfe44c5a05..017e3ccb45b 100644
--- a/app/assets/javascripts/environments/graphql/resolvers.js
+++ b/app/assets/javascripts/environments/graphql/resolvers.js
@@ -1,320 +1,14 @@
-import { CoreV1Api, Configuration, AppsV1Api, BatchV1Api } from '@gitlab/cluster-client';
-import axios from '~/lib/utils/axios_utils';
-import { s__ } from '~/locale';
-import {
- convertObjectPropsToCamelCase,
- parseIntPagination,
- normalizeHeaders,
-} from '~/lib/utils/common_utils';
-import { humanizeClusterErrors } from '../helpers/k8s_integration_helper';
-
-import pollIntervalQuery from './queries/poll_interval.query.graphql';
-import environmentToRollbackQuery from './queries/environment_to_rollback.query.graphql';
-import environmentToStopQuery from './queries/environment_to_stop.query.graphql';
-import environmentToDeleteQuery from './queries/environment_to_delete.query.graphql';
-import environmentToChangeCanaryQuery from './queries/environment_to_change_canary.query.graphql';
-import isEnvironmentStoppingQuery from './queries/is_environment_stopping.query.graphql';
-import pageInfoQuery from './queries/page_info.query.graphql';
-
-const buildErrors = (errors = []) => ({
- errors,
- __typename: 'LocalEnvironmentErrors',
-});
-
-const mapNestedEnvironment = (env) => ({
- ...convertObjectPropsToCamelCase(env, { deep: true }),
- __typename: 'NestedLocalEnvironment',
-});
-const mapEnvironment = (env) => ({
- ...convertObjectPropsToCamelCase(env, { deep: true }),
- __typename: 'LocalEnvironment',
-});
-
-const mapWorkloadItems = (items, kind) => {
- return items.map((item) => {
- const updatedItem = {
- status: {},
- spec: {},
- };
-
- switch (kind) {
- case 'DeploymentList':
- updatedItem.status.conditions = item.status.conditions || [];
- break;
- case 'DaemonSetList':
- updatedItem.status = {
- numberMisscheduled: item.status.numberMisscheduled || 0,
- numberReady: item.status.numberReady || 0,
- desiredNumberScheduled: item.status.desiredNumberScheduled || 0,
- };
- break;
- case 'StatefulSetList':
- case 'ReplicaSetList':
- updatedItem.status.readyReplicas = item.status.readyReplicas || 0;
- updatedItem.spec.replicas = item.spec.replicas || 0;
- break;
- case 'JobList':
- updatedItem.status.failed = item.status.failed || 0;
- updatedItem.status.succeeded = item.status.succeeded || 0;
- updatedItem.spec.completions = item.spec.completions || 0;
- break;
- case 'CronJobList':
- updatedItem.status.active = item.status.active || 0;
- updatedItem.status.lastScheduleTime = item.status.lastScheduleTime || '';
- updatedItem.spec.suspend = item.spec.suspend || 0;
- break;
- default:
- updatedItem.status = item?.status;
- updatedItem.spec = item?.spec;
- break;
- }
-
- return updatedItem;
- });
-};
-
-const handleClusterError = (err) => {
- const error = err?.response?.data?.message ? new Error(err.response.data.message) : err;
- throw error;
-};
+import { baseQueries, baseMutations } from './resolvers/base';
+import kubernetesQueries from './resolvers/kubernetes';
+import fluxQueries from './resolvers/flux';
export const resolvers = (endpoint) => ({
Query: {
- environmentApp(_context, { page, scope, search }, { cache }) {
- return axios.get(endpoint, { params: { nested: true, page, scope, search } }).then((res) => {
- const headers = normalizeHeaders(res.headers);
- const interval = headers['POLL-INTERVAL'];
- const pageInfo = { ...parseIntPagination(headers), __typename: 'LocalPageInfo' };
-
- if (interval) {
- cache.writeQuery({ query: pollIntervalQuery, data: { interval: parseFloat(interval) } });
- } else {
- cache.writeQuery({ query: pollIntervalQuery, data: { interval: undefined } });
- }
-
- cache.writeQuery({
- query: pageInfoQuery,
- data: { pageInfo },
- });
-
- return {
- availableCount: res.data.available_count,
- environments: res.data.environments.map(mapNestedEnvironment),
- reviewApp: {
- ...convertObjectPropsToCamelCase(res.data.review_app),
- __typename: 'ReviewApp',
- },
- canStopStaleEnvironments: res.data.can_stop_stale_environments,
- stoppedCount: res.data.stopped_count,
- __typename: 'LocalEnvironmentApp',
- };
- });
- },
- folder(_, { environment: { folderPath }, scope, search }) {
- return axios.get(folderPath, { params: { scope, search, per_page: 3 } }).then((res) => ({
- availableCount: res.data.available_count,
- environments: res.data.environments.map(mapEnvironment),
- stoppedCount: res.data.stopped_count,
- __typename: 'LocalEnvironmentFolder',
- }));
- },
- isLastDeployment(_, { environment }) {
- return environment?.lastDeployment?.isLast;
- },
- k8sPods(_, { configuration, namespace }) {
- const coreV1Api = new CoreV1Api(new Configuration(configuration));
- const podsApi = namespace
- ? coreV1Api.listCoreV1NamespacedPod(namespace)
- : coreV1Api.listCoreV1PodForAllNamespaces();
-
- return podsApi
- .then((res) => res?.data?.items || [])
- .catch((err) => {
- handleClusterError(err);
- });
- },
- k8sServices(_, { configuration }) {
- const coreV1Api = new CoreV1Api(new Configuration(configuration));
- return coreV1Api
- .listCoreV1ServiceForAllNamespaces()
- .then((res) => {
- const items = res?.data?.items || [];
- return items.map((item) => {
- const { type, clusterIP, externalIP, ports } = item.spec;
- return {
- metadata: item.metadata,
- spec: {
- type,
- clusterIP: clusterIP || '-',
- externalIP: externalIP || '-',
- ports,
- },
- };
- });
- })
- .catch((err) => {
- handleClusterError(err);
- });
- },
- k8sWorkloads(_, { configuration, namespace }) {
- const appsV1api = new AppsV1Api(configuration);
- const batchV1api = new BatchV1Api(configuration);
-
- let promises;
-
- if (namespace) {
- promises = [
- appsV1api.listAppsV1NamespacedDeployment(namespace),
- appsV1api.listAppsV1NamespacedDaemonSet(namespace),
- appsV1api.listAppsV1NamespacedStatefulSet(namespace),
- appsV1api.listAppsV1NamespacedReplicaSet(namespace),
- batchV1api.listBatchV1NamespacedJob(namespace),
- batchV1api.listBatchV1NamespacedCronJob(namespace),
- ];
- } else {
- promises = [
- appsV1api.listAppsV1DeploymentForAllNamespaces(),
- appsV1api.listAppsV1DaemonSetForAllNamespaces(),
- appsV1api.listAppsV1StatefulSetForAllNamespaces(),
- appsV1api.listAppsV1ReplicaSetForAllNamespaces(),
- batchV1api.listBatchV1JobForAllNamespaces(),
- batchV1api.listBatchV1CronJobForAllNamespaces(),
- ];
- }
-
- const summaryList = {
- DeploymentList: [],
- DaemonSetList: [],
- StatefulSetList: [],
- ReplicaSetList: [],
- JobList: [],
- CronJobList: [],
- };
-
- return Promise.allSettled(promises).then((results) => {
- if (results.every((res) => res.status === 'rejected')) {
- const error = results[0].reason;
- const errorMessage = error?.response?.data?.message ?? error;
- throw new Error(errorMessage);
- }
- for (const promiseResult of results) {
- if (promiseResult.status === 'fulfilled' && promiseResult?.value?.data) {
- const { kind, items } = promiseResult.value.data;
-
- if (items?.length > 0) {
- summaryList[kind] = mapWorkloadItems(items, kind);
- }
- }
- }
-
- return summaryList;
- });
- },
- k8sNamespaces(_, { configuration }) {
- const coreV1Api = new CoreV1Api(new Configuration(configuration));
- const namespacesApi = coreV1Api.listCoreV1Namespace();
-
- return namespacesApi
- .then((res) => {
- return res?.data?.items || [];
- })
- .catch((err) => {
- const error = err?.response?.data?.reason || err;
- throw new Error(humanizeClusterErrors(error));
- });
- },
+ ...baseQueries(endpoint),
+ ...kubernetesQueries,
+ ...fluxQueries,
},
Mutation: {
- stopEnvironmentREST(_, { environment }, { client }) {
- client.writeQuery({
- query: isEnvironmentStoppingQuery,
- variables: { environment },
- data: { isEnvironmentStopping: true },
- });
- return axios
- .post(environment.stopPath)
- .then(() => buildErrors())
- .catch(() => {
- client.writeQuery({
- query: isEnvironmentStoppingQuery,
- variables: { environment },
- data: { isEnvironmentStopping: false },
- });
- return buildErrors([
- s__('Environments|An error occurred while stopping the environment, please try again'),
- ]);
- });
- },
- deleteEnvironment(_, { environment: { deletePath } }) {
- return axios
- .delete(deletePath)
- .then(() => buildErrors())
- .catch(() =>
- buildErrors([
- s__(
- 'Environments|An error occurred while deleting the environment. Check if the environment stopped; if not, stop it and try again.',
- ),
- ]),
- );
- },
- rollbackEnvironment(_, { environment, isLastDeployment }) {
- return axios
- .post(environment?.retryUrl)
- .then(() => buildErrors())
- .catch(() => {
- buildErrors([
- isLastDeployment
- ? s__(
- 'Environments|An error occurred while re-deploying the environment, please try again',
- )
- : s__(
- 'Environments|An error occurred while rolling back the environment, please try again',
- ),
- ]);
- });
- },
- setEnvironmentToStop(_, { environment }, { client }) {
- client.writeQuery({
- query: environmentToStopQuery,
- data: { environmentToStop: environment },
- });
- },
- action(_, { action: { playPath } }) {
- return axios
- .post(playPath)
- .then(() => buildErrors())
- .catch(() =>
- buildErrors([s__('Environments|An error occurred while making the request.')]),
- );
- },
- setEnvironmentToDelete(_, { environment }, { client }) {
- client.writeQuery({
- query: environmentToDeleteQuery,
- data: { environmentToDelete: environment },
- });
- },
- setEnvironmentToRollback(_, { environment }, { client }) {
- client.writeQuery({
- query: environmentToRollbackQuery,
- data: { environmentToRollback: environment },
- });
- },
- setEnvironmentToChangeCanary(_, { environment, weight }, { client }) {
- client.writeQuery({
- query: environmentToChangeCanaryQuery,
- data: { environmentToChangeCanary: environment, weight },
- });
- },
- cancelAutoStop(_, { autoStopUrl }) {
- return axios
- .post(autoStopUrl)
- .then(() => buildErrors())
- .catch((err) =>
- buildErrors([
- err?.response?.data?.message ||
- s__('Environments|An error occurred while canceling the auto stop, please try again'),
- ]),
- );
- },
+ ...baseMutations,
},
});