From: Jan Provaznik <jprovazn(a)redhat.com>
Use Nokogiri for parsing condor output improves noticeably
performance of listing instances in pool.
---
src/app/util/condormatic.rb | 17 +++++------------
1 files changed, 5 insertions(+), 12 deletions(-)
diff --git a/src/app/util/condormatic.rb b/src/app/util/condormatic.rb
index 155fa7d..484f53f 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)
@@ -144,17 +144,10 @@ def condormatic_instances_sync_states
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"]')) ? v.text :
nil
+ job_state= (v = jobs_ele.at_xpath('./a[@n="JobStatus"]')) ?
v.text : nil
Rails.logger.info "job name is #{job_name}"
Rails.logger.info "job state is #{job_state}"
--
1.7.0.1