From: martyntaylor mtaylor@redhat.com
--- src/app/controllers/pool_controller.rb | 30 +++++++++++++++++++++++------- src/app/models/instance_observer.rb | 4 ++-- src/app/models/quota.rb | 1 + src/app/models/task.rb | 3 ++- src/spec/models/task_spec.rb | 5 ----- 5 files changed, 28 insertions(+), 15 deletions(-)
diff --git a/src/app/controllers/pool_controller.rb b/src/app/controllers/pool_controller.rb index 7ff39b7..75e2bcd 100644 --- a/src/app/controllers/pool_controller.rb +++ b/src/app/controllers/pool_controller.rb @@ -160,15 +160,31 @@ class PoolController < ApplicationController
if !Quota.exists?(@pool.quota_id) require_privilege(Privilege::QUOTA_MODIFY, @pool) - @quota = Quota.new(params[:quota]) - @quota.save! - - @pool.quota_id = @quota.id - @pool.save!
- flash[:notice] = "Quota Created!" - redirect_to :action => 'quota', :id => @pool + # Populate Current Pool totals to Quota + @pool.instances.each do |instance| + hwp = HardwareProfile.find(instance.hardware_profile_id) + if instance.state == Instance::STATE_RUNNING + @quota.running_instances += 1 + @quota.running_memory += hwp.memory + #TODO Add CPUs + end + + if InstanceObserver::ACTIVE_STATES.include?(instance.state) + @quota.total_instances += 1 + @quota.total_storage += hwp.storage + end + end + + if @quota.save + flash[:notice] = "Quota Created!" + @pool.quota_id = @quota.id + @pool.save! + redirect_to :action => 'quota', :id => @pool + else + render :action => :new_quota + end else errors.add("quota_id", "There already exists a quota for this pool") render :action => :new_quota diff --git a/src/app/models/instance_observer.rb b/src/app/models/instance_observer.rb index 9b0461a..725a3a7 100644 --- a/src/app/models/instance_observer.rb +++ b/src/app/models/instance_observer.rb @@ -35,9 +35,9 @@ class InstanceObserver < ActiveRecord::Observer
hwp = HardwareProfile.find(an_instance.hardware_profile_id) pool = Pool.find(an_instance.pool_id) - quota = Quota.find(pool.quota_id)
- if(quota) + if(Quota.exists?(pool.quota_id)) + quota = Quota.find(pool.quota_id) if state_to == Instance::STATE_RUNNING #TODO update running cpus quota.running_instances += 1 diff --git a/src/app/models/quota.rb b/src/app/models/quota.rb index 5e16065..57662a7 100644 --- a/src/app/models/quota.rb +++ b/src/app/models/quota.rb @@ -37,6 +37,7 @@ class Quota < ActiveRecord::Base validates_numericality_of :maximum_total_storage validates_numericality_of :maximum_total_instances
+ def can_create_instance?(instance) hwp = HardwareProfile.find(instance.hardware_profile_id)
diff --git a/src/app/models/task.rb b/src/app/models/task.rb index ebbde40..feec26a 100644 --- a/src/app/models/task.rb +++ b/src/app/models/task.rb @@ -116,7 +116,8 @@ class Task < ActiveRecord::Base
def validate errors.add("created_at", "Task started but does not have the creation time set") if time_started and created_at.nil? - errors.add("time_started", "Task ends but does not have the start time set") if time_ended and time_started.nil? + # Removed check on time_started exisiting. if time_ended does. This can now occur, when the task fails before is starts. e.g. When Over Qutoa + #errors.add("time_started", "Task ends but does not have the start time set") if time_ended and time_started.nil? errors.add("time_ended", "Tasks ends before it's started") unless time_ended.nil? or time_started.nil? or time_ended > time_started errors.add("time_started", "Tasks starts before it's created") unless time_started.nil? or created_at.nil? or time_started > created_at end diff --git a/src/spec/models/task_spec.rb b/src/spec/models/task_spec.rb index d392cb2..c5e7188 100644 --- a/src/spec/models/task_spec.rb +++ b/src/spec/models/task_spec.rb @@ -43,11 +43,6 @@ describe Task do @task.should_not be_valid end
- it "should have 'started' time set if it ended" do - @task.attributes = @valid_attributes.except :time_started - @task.should_not be_valid - end - it "should not be valid if it started before it was created" do @task.attributes = @valid_attributes @task.time_started = @task.created_at - 1.minute