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/controllers/projects/google_cloud/databases_controller.rb')
-rw-r--r--app/controllers/projects/google_cloud/databases_controller.rb129
1 files changed, 127 insertions, 2 deletions
diff --git a/app/controllers/projects/google_cloud/databases_controller.rb b/app/controllers/projects/google_cloud/databases_controller.rb
index 7b1cf6e5ce1..8f7554f248b 100644
--- a/app/controllers/projects/google_cloud/databases_controller.rb
+++ b/app/controllers/projects/google_cloud/databases_controller.rb
@@ -3,14 +3,139 @@
module Projects
module GoogleCloud
class DatabasesController < Projects::GoogleCloud::BaseController
+ before_action :validate_gcp_token!
+ before_action :validate_product, only: :new
+
def index
js_data = {
configurationUrl: project_google_cloud_configuration_path(project),
deploymentsUrl: project_google_cloud_deployments_path(project),
- databasesUrl: project_google_cloud_databases_path(project)
+ databasesUrl: project_google_cloud_databases_path(project),
+ cloudsqlPostgresUrl: new_project_google_cloud_database_path(project, :postgres),
+ cloudsqlMysqlUrl: new_project_google_cloud_database_path(project, :mysql),
+ cloudsqlSqlserverUrl: new_project_google_cloud_database_path(project, :sqlserver),
+ cloudsqlInstances: ::GoogleCloud::GetCloudsqlInstancesService.new(project).execute,
+ emptyIllustrationUrl: ActionController::Base.helpers.image_path('illustrations/pipelines_empty.svg')
}
@js_data = js_data.to_json
- track_event('databases#index', 'success', js_data)
+
+ track_event(:render_page)
+ end
+
+ def new
+ product = permitted_params[:product].to_sym
+
+ @title = title(product)
+
+ @js_data = {
+ gcpProjects: gcp_projects,
+ refs: refs,
+ cancelPath: project_google_cloud_databases_path(project),
+ formTitle: form_title(product),
+ formDescription: description(product),
+ databaseVersions: Projects::GoogleCloud::CloudsqlHelper::VERSIONS[product],
+ tiers: Projects::GoogleCloud::CloudsqlHelper::TIERS
+ }.to_json
+
+ track_event(:render_form)
+ render template: 'projects/google_cloud/databases/cloudsql_form', formats: :html
+ end
+
+ def create
+ enable_response = ::GoogleCloud::EnableCloudsqlService
+ .new(project, current_user, enable_service_params)
+ .execute
+
+ if enable_response[:status] == :error
+ track_event(:error_enable_cloudsql_services)
+ flash[:error] = error_message(enable_response[:message])
+ else
+ permitted_params = params.permit(:gcp_project, :ref, :database_version, :tier)
+ create_response = ::GoogleCloud::CreateCloudsqlInstanceService
+ .new(project, current_user, create_service_params(permitted_params))
+ .execute
+
+ if create_response[:status] == :error
+ track_event(:error_create_cloudsql_instance)
+ flash[:warning] = error_message(create_response[:message])
+ else
+ track_event(:create_cloudsql_instance, permitted_params.to_s)
+ flash[:notice] = success_message
+ end
+ end
+
+ redirect_to project_google_cloud_databases_path(project)
+ end
+
+ private
+
+ def enable_service_params
+ { google_oauth2_token: token_in_session }
+ end
+
+ def create_service_params(permitted_params)
+ {
+ google_oauth2_token: token_in_session,
+ gcp_project_id: permitted_params[:gcp_project],
+ environment_name: permitted_params[:ref],
+ database_version: permitted_params[:database_version],
+ tier: permitted_params[:tier]
+ }
+ end
+
+ def error_message(message)
+ format(s_("CloudSeed|Google Cloud Error - %{message}"), message: message)
+ end
+
+ def success_message
+ s_('CloudSeed|Cloud SQL instance creation request successful. Expected resolution time is ~5 minutes.')
+ end
+
+ def validate_product
+ not_found unless permitted_params[:product].in?(%w[postgres mysql sqlserver])
+ end
+
+ def permitted_params
+ params.permit(:product)
+ end
+
+ def title(product)
+ case product
+ when :postgres
+ s_('CloudSeed|Create Postgres Instance')
+ when :mysql
+ s_('CloudSeed|Create MySQL Instance')
+ else
+ s_('CloudSeed|Create MySQL Instance')
+ end
+ end
+
+ def form_title(product)
+ case product
+ when :postgres
+ s_('CloudSeed|Cloud SQL for Postgres')
+ when :mysql
+ s_('CloudSeed|Cloud SQL for MySQL')
+ else
+ s_('CloudSeed|Cloud SQL for SQL Server')
+ end
+ end
+
+ def description(product)
+ case product
+ when :postgres
+ s_('CloudSeed|Cloud SQL instances are fully managed, relational PostgreSQL databases. '\
+ 'Google handles replication, patch management, and database management '\
+ 'to ensure availability and performance.')
+ when :mysql
+ s_('Cloud SQL instances are fully managed, relational MySQL databases. '\
+ 'Google handles replication, patch management, and database management '\
+ 'to ensure availability and performance.')
+ else
+ s_('Cloud SQL instances are fully managed, relational SQL Server databases. ' \
+ 'Google handles replication, patch management, and database management ' \
+ 'to ensure availability and performance.')
+ end
end
end
end