# encoding: utf-8 require_library %w{ facter } module FeduxOrgStdlib class SupportInformation private attr_reader :logger public def initialize(logger: FeduxOrgStdlib::Logging::Logger.new) @logger = logger end # Output support information as string # # @return [String] # The available information def to_s result = [] max_field_length = determine_max_field_length(facter_fields) result << format("%#{max_field_length}s | %s", 'Information', 'Value') result << format("%s + %s", '-' * max_field_length, '-' * 40) result.concat system_information.sort_by { |key, value| key }.map { |key, value| format("%#{max_field_length}s | %s", key, value) } result << "" result << "" result << "" max_field_length = determine_max_field_length(rubygems_information.keys) result << format("%#{max_field_length}s | %s", 'Information', 'Value') result << format("%s + %s", '-' * max_field_length, '-' * 40) result.concat rubygems_information.sort_by { |key, value| key }.map { |key, value| format("%#{max_field_length}s | %s", key, value) } result << "" result << "" result << "" max_field_length = determine_max_field_length(installed_rubygems.keys) result << format("%#{max_field_length}s | %s", 'Name', 'version') result << format("%s + %s", '-' * max_field_length, '-' * 40) result.concat installed_rubygems.sort_by { |key, value| key }.map { |key, value| format("%#{max_field_length}s | %s", key, value) } result.join "\n" end private def rubygems_information result = {} result[:ruby] = Gem.ruby result[:ruby_engine] = Gem.ruby_engine result[:ruby_api_version] = Gem.ruby_engine result[:rubygems_version] = Gem.rubygems_version result end def installed_rubygems result = {} Gem::Specification.find_all.each_with_object(result) { |e, a| a[e.name] = e.version } result end def system_information Timeout::timeout(10) do Facter.to_hash.keep_if { |key,_| facter_fields.include?(key.to_s) } end rescue Timeout::Error logger.warn 'Getting environment information took to long. Please make sure the name resolver is available. This might cause the latency.' {} end def determine_max_field_length(list) list.inject(0) { |memo, f| memo = f.size if f.size > memo ; memo} end def facter_fields %w[ architecture filesystems hardwareisa hardwaremodel is_virtual kernel kernelmajversion kernelrelease kernelversion memoryfree memoryfree_mb memorysize memorysize_mb memorytotal operatingsystem operatingsystemrelease osfamily path physicalprocessorcount processor0 processor1 processorcount ps rubysitedir rubyversion selinux swapfree swapfree_mb swapsize swapsize_mb timezone uptime uptime_days uptime_hours uptime_seconds virtual ] end end end