diff --git a/app/controllers/admin/settings_controller.rb b/app/controllers/admin/settings_controller.rb index d605dfa..1b45fd1 100644 --- a/app/controllers/admin/settings_controller.rb +++ b/app/controllers/admin/settings_controller.rb @@ -1,31 +1,61 @@ class Admin::SettingsController < Admin::BaseController + before_action :fetch_configuration_settings, only: [:edit, :update, :reset] + # GET /admin/settings def index @settings = ConfigurationSetting.last || ConfigurationSetting.new end - # GET /admin/settings/1 - def show - end - # GET /admin/settings/new def new @setting = ConfigurationSetting.new end # GET /admin/settings/1/edit def edit end # POST /admin/settings def create + @setting = ConfigurationSetting.new(fetch_params) + if @setting.save + flash[:success] = 'Configuration Submitted' + redirect_to admin_settings_path + else + flash[:error] = 'Configuration was not submitted' + render :new + end end # PATCH /admin/settings/1/update def update + if fetch_params.present? && @setting.update_attributes(fetch_params) + flash[:success] = 'Configuration Submitted' + redirect_to admin_settings_path + else + flash[:error] = 'Configuration was not submitted' + render :edit + end + end + + # DELETE /admin/settings/1/reset + def reset + @setting.destroy + redirect_to admin_settings_path + end + + private + + def fetch_configuration_settings + @setting = ConfigurationSetting.find(params[:id]) end - # DELETE /admin/settings/1/delete - def destroy + def fetch_params + params.require(:configuration_setting). + permit( + job: [:storage, :pool, :messages, :priority, :'Write Bootstrap'], + client: [:catalog, :file_retention, :file_retention_period_type, :job_retention, + :job_retention_period_type, :autoprune] + ) end end diff --git a/app/models/configuration_setting.rb b/app/models/configuration_setting.rb index 4011253..01451d3 100644 --- a/app/models/configuration_setting.rb +++ b/app/models/configuration_setting.rb @@ -1,60 +1,80 @@ # ConfigurationSetting class describes a model that keeps the current Bacula # configuration. # # It has some hard coded settings as defaults. # Archiving's admins can enter new settings concerning: # # * jobs # * clients # # and override the default ones. # # ConfigurationSetting is supposed to have only one record in persisted in the database # which will hold the altered configuration as a patch to the defaults. # Admins can reset this change at any time. class ConfigurationSetting < ActiveRecord::Base serialize :job, JSON serialize :client, JSON JOB = { storage: :File, pool: :Default, messages: :Standard, priority: 10, :'Write Bootstrap' => '"/var/lib/bacula/%c.bsr"' } CLIENT = { catalog: 'MyCatalog', file_retention: 60, file_retention_period_type: 'days', job_retention: 180, job_retention_period_type: 'days', autoprune: 'yes' } RETENTION_PERIODS = %w{seconds minutes hours days weeks months quarters years} AUTOPRUNE_OPTIONS = ['yes', 'no'] # Fetches the current configuration for jobs. # # The current configuration is the last submitted record, patched to the default # settings. # If there is no record, the default settings are returned # # @return [Hash] with settings def self.current_job_settings (last || new).job.symbolize_keys.reverse_merge(JOB.dup) end # Fetches the current configuration for clients. # # The current configuration is the last submitted record, patched to the default # settings. # If there is no record, the default settings are returned # # @return [Hash] with settings def self.current_client_settings (last || new).client.symbolize_keys.reverse_merge(CLIENT.dup) end + + # Fetches the record's configuration for jobs. + # + # The configuration is the record's configuration patched to the default + # settings. + # + # @return [Hash] with settings + def current_job_settings + job.symbolize_keys.reverse_merge(JOB.dup) + end + + # Fetches the record's configuration for clients. + # + # The configuration is the record's configuration patched to the default + # settings. + # + # @return [Hash] with settings + def current_client_settings + client.symbolize_keys.reverse_merge(CLIENT.dup) + end end diff --git a/app/models/pool.rb b/app/models/pool.rb index 295a7c3..301263a 100644 --- a/app/models/pool.rb +++ b/app/models/pool.rb @@ -1,33 +1,37 @@ class Pool < ActiveRecord::Base self.table_name = :Pool self.primary_key = :PoolId alias_attribute :pool_id, :PoolId alias_attribute :name, :Name alias_attribute :num_vols, :NumVols alias_attribute :max_vols, :MaxVols alias_attribute :use_once, :UseOnce alias_attribute :use_catalog, :UseCatalog alias_attribute :accept_any_volume, :AcceptAnyVolume alias_attribute :vol_retention, :VolRetention alias_attribute :vol_use_duration, :VolUseDuration alias_attribute :max_vol_jobs, :MaxVolJobs alias_attribute :max_vol_files, :MaxVolFiles alias_attribute :max_vol_bytes, :MaxVolBytes alias_attribute :auto_prune, :AutoPrune alias_attribute :recycle, :Recycle alias_attribute :action_on_purge, :ActionOnPurge alias_attribute :pool_type, :PoolType alias_attribute :label_type, :LabelType alias_attribute :label_format, :LabelFormat alias_attribute :enabled, :Enabled alias_attribute :scratch_pool_id, :ScratchPoolId alias_attribute :recycle_pool_id, :RecyclePoolId alias_attribute :next_pool_id, :NextPoolId alias_attribute :migration_high_bytes, :MigrationHighBytes alias_attribute :migration_low_bytes, :MigrationLowBytes alias_attribute :migration_time, :MigrationTime has_many :jobs, foreign_key: :PoolId has_many :media, foreign_key: :PoolId + + def self.available_options + pluck(:Name) + end end diff --git a/app/models/storage.rb b/app/models/storage.rb index bb6249e..f99950d 100644 --- a/app/models/storage.rb +++ b/app/models/storage.rb @@ -1,10 +1,14 @@ class Storage < ActiveRecord::Base self.table_name = :Storage self.primary_key = :StorageId alias_attribute :storage_id, :StorageId alias_attribute :name, :Name alias_attribute :auto_changer, :AutoChanger has_many :media, foreign_key: :StorageId + + def self.available_options + pluck(:Name) + end end diff --git a/app/views/admin/settings/_form.html.erb b/app/views/admin/settings/_form.html.erb new file mode 100644 index 0000000..66aa233 --- /dev/null +++ b/app/views/admin/settings/_form.html.erb @@ -0,0 +1,53 @@ +