From: Jan Provaznik <[email protected]>

Use Nokogiri for parsing condor output improves noticeably
performance of listing instances in pool.
---
 src/app/util/condormatic.rb |   35 +++++------------------------------
 1 files changed, 5 insertions(+), 30 deletions(-)

diff --git a/src/app/util/condormatic.rb b/src/app/util/condormatic.rb
index 155fa7d..5fba43e 100644
--- a/src/app/util/condormatic.rb
+++ b/src/app/util/condormatic.rb
@@ -17,7 +17,7 @@
 # MA  02110-1301, USA.  A copy of the GNU General Public License is
 # also available at http://www.gnu.org/copyleft/gpl.html.
 
-require 'rexml/document'
+require 'nokogiri'
 
 def condormatic_instance_create(task)
 
@@ -126,35 +126,10 @@ def condormatic_instances_sync_states
       instance.save!
     end
 
-    def find_value_int(job_ele, attrib)
-      if job_ele.attributes['n'] == attrib
-        cmd = job_ele.elements.each('i') do |i|
-          return i.text
-        end
-      end
-      return nil
-    end
-
-    def find_value_str(job_ele, attrib)
-      if job_ele.attributes['n'] == attrib
-        cmd = job_ele.elements.each('s') do |s|
-          return s.text
-        end
-      end
-      return nil
-    end
-
-    doc = REXML::Document.new(xml)
-    doc.elements.each('classads/c') do |jobs_ele|
-      job_name = nil
-      job_state = nil
-
-      jobs_ele.elements.each('a') do |job_ele|
-        value = find_value_str(job_ele, 'Cmd')
-        job_name = value if value != nil
-        value = find_value_int(job_ele, 'JobStatus')
-        job_state = value if value != nil
-      end
+    doc = Nokogiri::XML(xml)
+    doc.xpath('/classads/c').each do |jobs_ele|
+      job_name = (v = jobs_ele.at_xpath('./a...@n="Cmd"]/s')) ? v.text : nil
+      job_state= (v = jobs_ele.at_xpath('./a...@n="JobStatus"]/i')) ? v.text : 
nil
 
       Rails.logger.info "job name is #{job_name}"
       Rails.logger.info "job state is #{job_state}"
-- 
1.7.0.1

_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel

Reply via email to