[PATCH conductor 6/9] ProviderAccount failure logging and aggregation

ifarkas at redhat.com ifarkas at redhat.com
Thu Aug 16 14:44:06 UTC 2012


From: Imre Farkas <ifarkas at redhat.com>

---
 src/app/models/provider_account.rb | 17 +++++++++++++++++
 src/app/util/taskomatic.rb         |  9 +++++++++
 2 files changed, 26 insertions(+)

diff --git a/src/app/models/provider_account.rb b/src/app/models/provider_account.rb
index 136d365..0da9184 100644
--- a/src/app/models/provider_account.rb
+++ b/src/app/models/provider_account.rb
@@ -60,6 +60,9 @@ class ProviderAccount < ActiveRecord::Base
 
   has_many :provider_priority_group_elements, :as => :value, :dependent => :destroy
 
+  has_many :events, :as => :source, :dependent => :destroy,
+           :order => 'events.id ASC'
+
   # Helpers
   attr_accessor :x509_cert_priv_file, :x509_cert_pub_file
 
@@ -416,6 +419,20 @@ class ProviderAccount < ActiveRecord::Base
     :pushed
   end
 
+  def failure_count(options = {})
+    relation = self.events.where(:status_code => 'provider_account_failure')
+
+    if options[:from].present?
+      relation = relation.where('events.event_time >= :from', :from => options[:from])
+    end
+
+    if options[:to].present?
+      relation = relation.where('events.event_time <= :to', :to => options[:to])
+    end
+
+    relation.count
+  end
+
   def to_polymorphic_path_param(polymorphic_path_extras)
     [provider, self]
   end
diff --git a/src/app/util/taskomatic.rb b/src/app/util/taskomatic.rb
index 0e95e12..1708970 100644
--- a/src/app/util/taskomatic.rb
+++ b/src/app/util/taskomatic.rb
@@ -135,12 +135,21 @@ module Taskomatic
     Rails.logger.error ex.backtrace.join("\n")
     task.state = Task::STATE_FAILED
     task.instance.state = Instance::STATE_CREATE_FAILED
+
     task.instance.events << Event.create(
       :source => task.instance,
       :event_time => DateTime.now,
       :status_code => 'instance_launch_failed',
       :summary => "#{task.instance.name}: #{ex.message.to_s.split("\n").first}"
     )
+
+    task.instance.provider_account.events << Event.create(
+      :source => task.instance.provider_account,
+      :event_time => DateTime.now,
+      :status_code => 'provider_account_failure',
+      :summary => "#{task.instance.name}: #{ex.message.to_s.split("\n").first}"
+    )
+
     raise ex
   end
 
-- 
1.7.11.2




More information about the aeolus-devel mailing list