lib/appsignal/cli/diagnose/paths.rb
module Appsignal
class CLI
class Diagnose
class Paths
BYTES_TO_READ_FOR_FILES = 2 * 1024 * 1024 # 2 Mebibytes
def report
{}.tap do |hash|
paths.each do |filename, config|
hash[filename] = path_stat(config[:path])
end
end
end
def paths
@paths ||=
begin
config = Appsignal.config
log_file_path = config.log_file_path
makefile_log_path = File.join("ext", "mkmf.log")
{
:package_install_path => {
:label => "AppSignal gem path",
:path => gem_path
},
:working_dir => {
:label => "Current working directory",
:path => Dir.pwd
},
:root_path => {
:label => "Root path",
:path => config.root_path
},
:log_dir_path => {
:label => "Log directory",
:path => log_file_path ? File.dirname(log_file_path) : ""
},
makefile_log_path => {
:label => "Makefile install log",
:path => File.join(gem_path, makefile_log_path)
},
"appsignal.log" => {
:label => "AppSignal log",
:path => log_file_path
}
}
end
end
private
def path_stat(path)
{
:path => path,
:exists => File.exist?(path)
}.tap do |info|
next unless info[:exists]
stat = File.stat(path)
info[:type] = stat.directory? ? "directory" : "file"
info[:mode] = format("%o", stat.mode)
info[:writable] = stat.writable?
path_uid = stat.uid
path_gid = stat.gid
info[:ownership] = {
:uid => path_uid,
:user => Utils.username_for_uid(path_uid),
:gid => path_gid,
:group => Utils.group_for_gid(path_gid)
}
if info[:type] == "file"
info[:content] = Utils.read_file_content(
path,
BYTES_TO_READ_FOR_FILES
).split("\n")
end
end
end
# Returns the AppSignal gem installation path. The root directory of
# this gem.
def gem_path
File.expand_path("../../../../../", __FILE__)
end
end
end
end
end