# frozen_string_literal: true

def remote_file_exists?(full_path)

get_command_output("if [ -e #{full_path} ]; then echo 'true'; fi") == 'true'

end

def get_num_occurrences_in_file(file_path, string)

get_command_output("cat #{file_path} | grep '#{string}' | wc -l").to_i

end

def get_command_output(command)

capture(command.to_s).strip

end

def rails_default_app_name

return fetch(:app_name).to_s if get_rails_env_abbr == 'prod'

"#{get_rails_env_abbr}_#{fetch(:app_name)}"

end

def rails_default_db_name

"#{fetch(:app_name)}_#{get_rails_env_abbr}"

end

def get_rails_env_abbr(rails_env_abbr = nil)

return rails_env_abbr unless rails_env_abbr.nil?

case fetch(:rails_env).to_s
when 'development'
  'dev'
when 'test'
  'test'
else
  'prod'
end

end

def execute_rake_command(task)

within release_path do
  execute :rake, task, "RAILS_ENV=#{fetch(:environment)}"
end

end

def string_between_markers(complete_str, marker1, marker2)

complete_str[/#{Regexp.escape(marker1)}(.*?)#{Regexp.escape(marker2)}/m, 1]

end

namespace :util do

desc 'Report Server Uptimes'
task :uptime do
  on roles(:all) do |host|
    info "Host #{host} (#{host.roles.to_a.join(', ')}):\t#{get_command_output(:uptime)}"
  end
end

desc 'Run rake command'
task :runrake do
  # Usage: cap [development|test|production] util:runrake task=secret
  on roles(:all), in: :sequence, wait: 5 do
    execute_rake_command(ENV['task'])
  end
end

desc 'Report Server klist (Kerberos Tickets)'
task :klist do
  on roles(:app, :web) do
    info '#' * 100
    info '#' * 10 + ' ===> KLIST <=== '
    info '#' * 10 + execute_rake_command('klist').to_s
    info '#' * 100
  end
end

task :query_interactive do
  on roles(:web) do
    info execute_rake_command("[[ $- == *i* ]] && echo 'Interactive' || echo 'Not interactive'")
  end
end

task :query_login do
  on roles(:web) do
    info execute_rake_command("shopt -q login_shell && echo 'Login shell' || echo 'Not login shell'")
  end
end

end