From 8ac9a3be271fe5b8ec5d63f4dad5639601810dc9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Gaidamour?= <jeremie.gaidamour@inria.fr>
Date: Wed, 2 Mar 2016 11:34:58 +0100
Subject: [PATCH] [dev] Pretty output

---
 generators/oar-properties/oar-properties.rb | 57 +++++++++++++++------
 1 file changed, 41 insertions(+), 16 deletions(-)

diff --git a/generators/oar-properties/oar-properties.rb b/generators/oar-properties/oar-properties.rb
index 09fae64784d..8f6db41f008 100755
--- a/generators/oar-properties/oar-properties.rb
+++ b/generators/oar-properties/oar-properties.rb
@@ -17,7 +17,7 @@ require '../oar-properties/lib/lib-oar-properties'
 require '../lib/input_loader'
 
 options = {}
-options[:sites] = %w{grenoble lille luxembourg lyon nantes reims rennes sophia}
+options[:sites] = %w{grenoble lille luxembourg lyon nancy nantes reims rennes sophia}
 options[:diff]  = false
 
 OptionParser.new do |opts|
@@ -33,6 +33,7 @@ OptionParser.new do |opts|
 
   opts.on('-s', '--sites a,b,c', Array, 'Select site(s)',
                                         "Default: "+options[:sites].join(", ")) do |s|
+    raise "Wrong argument for -s option." unless (s - options[:sites]).empty?
     options[:sites] = s
   end
 
@@ -67,17 +68,14 @@ OptionParser.new do |opts|
     options[:diff] = d
   end
     
-#  opts.on("-n", "--dry-run", "Perform a trial run with no changes made") do |n|
-#    options[:dryrun] = n
-#  end
-
   ###
 
   opts.separator ""
   opts.separator "Common options:"
 
-  opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
-    options[:verbose] = v
+  opts.on("-v", "--[no-]verbose", "Run verbosely", "Multiple -v options increase the verbosity. The maximum is 3.") do |v|
+    options[:verbose] ||= 0
+    options[:verbose] = options[:verbose] + 1
   end
   
   # Print an options summary.
@@ -87,7 +85,7 @@ OptionParser.new do |opts|
   end
 end.parse!
 
-pp options
+puts "Options: #{options}" if options[:verbose]
 
 nodelist_properties = {} # ["ref"]  : properties from the reference-repo
                          # ["oar"]  : properties from the OAR server
@@ -121,6 +119,8 @@ options[:sites].each { |site_uid|
 #
 # Diff
 #
+header ||= false
+prev_diff = {}
 
 nodelist_properties["to_be_updated"] = {}
 
@@ -130,23 +130,48 @@ nodelist_properties["ref"].each { |site_uid, site_properties|
       
     node_properties_oar = nodelist_properties["oar"][site_uid][node_uid]
       
-    diff      = diff_node_properties(node_properties_ref, node_properties_oar)
+    diff      = diff_node_properties(node_properties_oar, node_properties_ref)
     diff_keys = diff.map{ |hashdiff_array| hashdiff_array[1] }
     
     nodelist_properties["to_be_updated"][node_uid] = node_properties_ref.select { |key, value| diff_keys.include?(key) }
     
-    if (options[:verbose])
-      #puts "#{node_uid}: #{diff}"
+    case options[:verbose]
+    when 1
       puts "#{node_uid}: #{diff_keys}"
+    when 2
+      # Give more details
+      # puts "#{node_uid}: #{diff}"
+      if !header
+        header=true
+        puts "Output format: ['~', 'key', 'old value', 'new value']"
+      end
+      if diff.size==0
+        puts "  #{node_uid}: OK"
+      elsif diff == prev_diff
+        puts "  #{node_uid}: as above"
+      else
+        puts "  #{node_uid}:"
+        diff.each { |d| puts "    #{d}" } 
+      end
+      prev_diff = diff
+    when 3
+      # Even more details
+      puts JSON.pretty_generate({node_uid => {"old values" => node_properties_oar, "new values" => node_properties_oar}})
     end
-    
   }
   
 }
 
-
 #
-# Example
+# Output commands
 #
-#puts oarcmd_set_node_properties("graphene-1", node_properties["oar"])
-#puts oarcmd_set_node_properties("graphene-1", node_properties["to_be_updated"])
+
+# nodelist_properties["ref"].each { |site_uid, site_properties| 
+  
+#   site_properties.each_filtered_node_uid(options[:clusters], options[:nodes]) { |node_uid, node_properties_ref|
+      
+#     puts oarcmd_set_node_properties("graphene-1", node_properties["oar"])
+#     puts oarcmd_set_node_properties("graphene-1", node_properties["to_be_updated"])
+
+#   }
+# }
-- 
GitLab