[PATCH conductor] BZ #784971: CloudForms Diagnostics Tooling

Jason Guiditta jguiditt at redhat.com
Mon Feb 6 20:56:34 UTC 2012


https://bugzilla.redhat.com/show_bug.cgi?id=784971

Add a quick script to add in supporting diagnosis of issues. This
will be expanded and improved in future versions, this just attempts
to add some bare functionality.
---
 aeolus-conductor.spec.in          |    6 ++-
 src/lib/aeolus/debug/aeolus-debug |   89 +++++++++++++++++++++++++++++++++++++
 2 files changed, 94 insertions(+), 1 deletions(-)
 create mode 100755 src/lib/aeolus/debug/aeolus-debug

diff --git a/aeolus-conductor.spec.in b/aeolus-conductor.spec.in
index 74460ca..0eea345 100644
--- a/aeolus-conductor.spec.in
+++ b/aeolus-conductor.spec.in
@@ -117,6 +117,7 @@ getent passwd aeolus >/dev/null || \
 %{__mkdir} -p %{buildroot}%{_localstatedir}/lib/%{name}
 %{__mkdir} -p %{buildroot}%{_localstatedir}/log/%{name}
 %{__mkdir} -p %{buildroot}%{_localstatedir}/run/%{name}
+%{__mkdir} -p %{buildroot}/%{_bindir}
 
 # now copy over the rails source files.  This is a bit verbose, but only
 # takes in the stuff we need (and no backup files, etc)
@@ -162,7 +163,8 @@ rake="lib/tasks"
 rb="app/models app/controllers app/controllers/api app/helpers app/services app/util \
     config config/initializers config/environments db db/migrate \
     features/support features/step_definitions lib spec spec/controllers \
-    spec/factories spec/helpers spec/models spec/services spec/controllers/api lib/aeolus lib/aeolus/event"
+    spec/factories spec/helpers spec/models spec/services spec/controllers/api lib/aeolus \
+    lib/aeolus/event"
 rhtml="app/views/layouts"
 svg="public/images public/images/icons public/javascripts/jquery-svg"
 ttf="public/fonts"
@@ -189,6 +191,7 @@ sass --style compact ./src/app/stylesheets/login.scss %{buildroot}%{app_root}/pu
 # misc files
 %{__cp} src/Rakefile %{buildroot}%{app_root}
 %{__cp} src/config.ru %{buildroot}%{app_root}
+%{__cp} src/lib/aeolus/debug/aeolus-debug %{buildroot}%{_bindir}
 
 %{__mkdir} -p %{buildroot}%{app_root}/config
 %{__cp} src/config/database.pg %{buildroot}%{app_root}/config
@@ -293,6 +296,7 @@ fi
 %{app_root}/db
 %{app_root}/dbomatic
 %{app_root}/lib
+%{_bindir}/aeolus-debug
 %{app_root}/log
 %{app_root}/public
 %{app_root}/Rakefile
diff --git a/src/lib/aeolus/debug/aeolus-debug b/src/lib/aeolus/debug/aeolus-debug
new file mode 100755
index 0000000..cb415f5
--- /dev/null
+++ b/src/lib/aeolus/debug/aeolus-debug
@@ -0,0 +1,89 @@
+#!/usr/bin/env ruby
+
+require "optparse"
+require "fileutils"
+
+NAME="aeolus-debug"
+
+# Set up the options
+options = {}
+
+optparse = OptionParser.new do|opts|
+    opts.banner = "Usage: #{NAME} [options] command"
+
+    options[:basedir] = '/tmp'
+    opts.on('-d', '--dir [DIRECTORY]', 'Directory to place the tarball. Defaults to /tmp' ) do |opt|
+        options[:basedir] = opt
+    end
+
+    opts.on('-h', '--help', 'Display help and exit' ) do
+        puts opts
+        exit
+    end
+
+end
+
+optparse.parse!
+
+# Check that we are running as root
+if Process.uid != 0
+    puts "#{NAME} must be run as root"
+    exit
+end
+
+# Define what we want to collect
+SOURCES = [
+# Conductor
+"/var/log/aeolus**/**/*.log",
+"/etc/aeolus*/**/**",
+"/etc/imagefactory**/**",
+"/var/log/imagefactory**/**/*.log",
+"/etc/iwhd**/**",
+"/var/log/iwhd**/**/*.log",
+"/var/log/deltacloud-core**/**/*.log",
+"/var/log/libvirt**/**",
+"/etc/oz/oz.cfg",
+"/proc/cpuinfo",
+"/proc/meminfo"
+]
+
+# Collect the files
+timename =  "aeolus-debug-#{Time.now.strftime("%Y%m%d%H%M%S")}"
+target_dir = File.join(options[:basedir], timename)
+
+if File.exists?(target_dir)
+    puts "#{target_dir} already exists. Please delete it"
+    exit
+end
+
+FileUtils.mkdir_p(target_dir, :verbose => true)
+
+files = []
+SOURCES.each do |d|
+  files << Dir.glob(d)
+end
+
+files = files.flatten
+puts "File list: #{files}"
+files.each do |source|
+  file_dir = File.file?(source) ? File.dirname(source): source
+  complete_target = File.join(target_dir, file_dir)
+  FileUtils.mkdir_p(complete_target, :verbose => true)
+  FileUtils.cp(source, complete_target, {:verbose=>true,:preserve =>true}) if File.file?(source)
+end
+
+# Below are custom system calls to get more info
+system("rpm -qa | egrep 'aeolus|iwhd|deltacloud|imagefactory|oz' >> #{File.join(target_dir, 'packages')}")
+system("virsh capabilities >> #{File.join(target_dir, 'virsh_capabilities')}")
+
+# Tar the output and log it
+tarfile = target_dir + ".tar.gz"
+pwd = Dir.pwd()
+Dir.chdir(options[:basedir])
+system("tar -czvf #{tarfile} #{timename}")
+Dir.chdir(pwd)
+
+puts "A debug file has been created at #{tarfile}."
+
+# Clean up
+FileUtils.rm_r(target_dir)
-- 
1.7.7.6




More information about the aeolus-devel mailing list