debian-mirror-gitlab/lib/api/admin/batched_background_migrations.rb
2023-03-04 22:38:38 +05:30

152 lines
5.4 KiB
Ruby

# frozen_string_literal: true
module API
module Admin
class BatchedBackgroundMigrations < ::API::Base
feature_category :database
urgency :low
before do
authenticated_as_admin!
end
namespace 'admin' do
resources 'batched_background_migrations/:id' do
desc 'Retrieve a batched background migration' do
success ::API::Entities::BatchedBackgroundMigration
failure [
{ code: 401, message: '401 Unauthorized' },
{ code: 403, message: '403 Forbidden' },
{ code: 404, message: '404 Not found' }
]
tags %w[batched_background_migrations]
end
params do
optional :database,
type: String,
values: Gitlab::Database.all_database_names,
desc: 'The name of the database',
default: 'main'
requires :id,
type: Integer,
desc: 'The batched background migration id'
end
get do
Gitlab::Database::SharedModel.using_connection(base_model.connection) do
present_entity(batched_background_migration)
end
end
end
resources 'batched_background_migrations' do
desc 'Get the list of batched background migrations' do
success ::API::Entities::BatchedBackgroundMigration
failure [
{ code: 401, message: '401 Unauthorized' },
{ code: 403, message: '403 Forbidden' }
]
is_array true
tags %w[batched_background_migrations]
end
params do
optional :database,
type: String,
values: Gitlab::Database.all_database_names,
desc: 'The name of the database, the default `main`',
default: 'main'
end
get do
Gitlab::Database::SharedModel.using_connection(base_model.connection) do
migrations = Database::BatchedBackgroundMigrationsFinder.new(connection: base_model.connection).execute
present_entity(migrations)
end
end
end
resources 'batched_background_migrations/:id/resume' do
desc 'Resume a batched background migration' do
success ::API::Entities::BatchedBackgroundMigration
failure [
{ code: 401, message: '401 Unauthorized' },
{ code: 403, message: '403 Forbidden' },
{ code: 404, message: '404 Not found' },
{ code: 422, message: 'You can resume only `paused` batched background migrations.' }
]
tags %w[batched_background_migrations]
end
params do
optional :database,
type: String,
values: Gitlab::Database.all_database_names,
desc: 'The name of the database',
default: 'main'
requires :id,
type: Integer,
desc: 'The batched background migration id'
end
put do
Gitlab::Database::SharedModel.using_connection(base_model.connection) do
unless batched_background_migration.paused?
msg = 'You can resume only `paused` batched background migrations.'
render_api_error!(msg, 422)
end
batched_background_migration.execute!
present_entity(batched_background_migration)
end
end
end
resources 'batched_background_migrations/:id/pause' do
desc 'Pause a batched background migration' do
success ::API::Entities::BatchedBackgroundMigration
failure [
{ code: 401, message: '401 Unauthorized' },
{ code: 403, message: '403 Forbidden' },
{ code: 404, message: '404 Not found' },
{ code: 422, message: 'You can pause only `active` batched background migrations.' }
]
tags %w[batched_background_migrations]
end
params do
optional :database,
type: String,
values: Gitlab::Database.all_database_names,
desc: 'The name of the database',
default: 'main'
requires :id,
type: Integer,
desc: 'The batched background migration id'
end
put do
Gitlab::Database::SharedModel.using_connection(base_model.connection) do
unless batched_background_migration.active?
msg = 'You can pause only `active` batched background migrations.'
render_api_error!(msg, 422)
end
batched_background_migration.pause!
present_entity(batched_background_migration)
end
end
end
end
helpers do
def batched_background_migration
@batched_background_migration ||= Gitlab::Database::BackgroundMigration::BatchedMigration.find(params[:id])
end
def base_model
database = params[:database] || Gitlab::Database::MAIN_DATABASE_NAME
@base_model ||= Gitlab::Database.database_base_models[database]
end
def present_entity(result)
present result,
with: ::API::Entities::BatchedBackgroundMigration
end
end
end
end
end