From: martyntaylor mtaylor@redhat.com
--- src/app/models/task.rb | 6 +++++- src/app/models/task_observer.rb | 7 ++++++- src/spec/models/task_observer_spec.rb | 21 +++++++++++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/src/app/models/task.rb b/src/app/models/task.rb index 9f23ef2..5c5bf34 100644 --- a/src/app/models/task.rb +++ b/src/app/models/task.rb @@ -95,7 +95,11 @@ class Task < ActiveRecord::Base end
def submission_time - time.started - time.submitted + time_started - time_submitted + end + + def runtime + time_ended - time_started end
def validate diff --git a/src/app/models/task_observer.rb b/src/app/models/task_observer.rb index ca11bc1..d1834c4 100644 --- a/src/app/models/task_observer.rb +++ b/src/app/models/task_observer.rb @@ -1,5 +1,8 @@ class TaskObserver < ActiveRecord::Observer - def after_save(a_task) + + END_STATES = [ Task::STATE_CANCELED, Task::STATE_FAILED, Task::STATE_FINISHED ] + + def after_save(a_task) if a_task.changed? change = a_task.changes['state'] if change @@ -13,6 +16,8 @@ class TaskObserver < ActiveRecord::Observer a_task.time_started = Time.now elsif state_to == Task::STATE_PENDING a_task.time_submitted = Time.now + elsif END_STATES.include?(state_to) + a_task.time_ended = Time.now end end
diff --git a/src/spec/models/task_observer_spec.rb b/src/spec/models/task_observer_spec.rb index 5d31693..98f899a 100644 --- a/src/spec/models/task_observer_spec.rb +++ b/src/spec/models/task_observer_spec.rb @@ -21,4 +21,25 @@ describe TaskObserver do @task.time_submitted.should >= @timestamp end
+ it "should set ended timestamp when the task has finished" do + @task.state = Task::STATE_FINISHED + @task.save + + @task.time_ended.should >= @timestamp + end + + it "should set ended timestamp when the task is cancelled" do + @task.state = Task::STATE_CANCELED + @task.save + + @task.time_ended.should >= @timestamp + end + + it "should set ended timestamp when the task has failed" do + @task.state = Task::STATE_FAILED + @task.save + + @task.time_ended.should >= @timestamp + end + end \ No newline at end of file
deltacloud-devel@lists.fedorahosted.org