[PATCH conductor] BZ #784971: CloudForms Diagnostics Tooling

Richard Su rwsu at redhat.com
Mon Feb 6 21:58:47 UTC 2012


On 02/06/2012 12:56 PM, Jason Guiditta wrote:
> 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)

Conditional ack. Worked as defined. But aeolus-debug missed a few log files:

/var/log/iwhd.log
/var/log/imagefactory.log
/var/log/mongodb/mongodb.log




More information about the aeolus-devel mailing list