Added passenger support. Partialy 1
This commit is contained in:
230
func_ruby/main.rb
Normal file
230
func_ruby/main.rb
Normal file
@@ -0,0 +1,230 @@
|
||||
#!/opt/brepo/ruby33/bin/ruby
|
||||
|
||||
require "date"
|
||||
require "envbash"
|
||||
require "interface"
|
||||
require "json"
|
||||
require "csv"
|
||||
|
||||
date_internal = DateTime.now
|
||||
di = date_internal.strftime("%d%m%Y%H%M")
|
||||
# Internal variables
|
||||
$HOMEDIR = "/home"
|
||||
$BACKUP = "/backup"
|
||||
$BACKUP_GZIP = 9
|
||||
$BACKUP_DISK_LIMIT = 95
|
||||
$BACKUP_LA_LIMIT = %x(cat /proc/cpuinfo | grep processor | wc -l)
|
||||
$RRD_STEP = 300
|
||||
$BIN = "#{$HESTIA}/bin"
|
||||
$HESTIA_INSTALL_DIR = "#{$HESTIA}/install/rpm"
|
||||
$HESTIA_COMMON_DIR = "#{$HESTIA}/install/common"
|
||||
$HESTIA_BACKUP = "/root/hst_backups/#{di}"
|
||||
$HESTIA_PHP = "#{$HESTIA}/php/bin/php"
|
||||
$USER_DATA = "#{$HESTIA}/data/users/#{$user}"
|
||||
$WEBTPL = "#{$HESTIA}/data/templates/web"
|
||||
$MAILTPL = "#{$HESTIA}/data/templates/mail"
|
||||
$DNSTPL = "#{$HESTIA}/data/templates/dns"
|
||||
$RRD = "#{$HESTIA}/web/rrd"
|
||||
$SENDMAIL = "#{$HESTIA}/web/inc/mail-wrapper.php"
|
||||
$HESTIA_GIT_REPO = "https://dev.brepo.ru/bayrepo/hestiacp"
|
||||
$HESTIA_THEMES = "#{$HESTIA}/web/css/themes"
|
||||
$HESTIA_THEMES_CUSTOM = "#{$HESTIA}/web/css/themes/custom"
|
||||
$SCRIPT = File.basename($PROGRAM_NAME)
|
||||
|
||||
# Return codes
|
||||
OK = 0
|
||||
E_ARGS = 1
|
||||
E_INVALID = 2
|
||||
E_NOTEXIST = 3
|
||||
E_EXISTS = 4
|
||||
E_SUSPENDED = 5
|
||||
E_UNSUSPENDED = 6
|
||||
E_INUSE = 7
|
||||
E_LIMIT = 8
|
||||
E_PASSWORD = 9
|
||||
E_FORBIDEN = 10
|
||||
E_DISABLED = 11
|
||||
E_PARSING = 12
|
||||
E_DISK = 13
|
||||
E_LA = 14
|
||||
E_CONNECT = 15
|
||||
E_FTP = 16
|
||||
E_DB = 17
|
||||
E_RRD = 18
|
||||
E_UPDATE = 19
|
||||
E_RESTART = 20
|
||||
E_PERMISSION = 21
|
||||
E_MODULE = 22
|
||||
|
||||
$ARGUMENTS = ""
|
||||
ARGV.each_with_index do |item, index|
|
||||
if !$HIDE.nil? && $HIDE == index
|
||||
$ARGUMENTS = "#{$ARGUMENTS} '******'"
|
||||
else
|
||||
$ARGUMENTS = "#{$ARGUMENTS} #{item}"
|
||||
end
|
||||
end
|
||||
|
||||
class File
|
||||
class << self
|
||||
def append(path, content)
|
||||
File.open(path, "a") { |f| f << content }
|
||||
end
|
||||
|
||||
def append!(path, content)
|
||||
File.open(path, "a") { |f| f << (content + "\n") }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def hestia_print_error_message_to_cli(error_message)
|
||||
puts "Error: #{error_message}"
|
||||
end
|
||||
|
||||
def load_global_bash_variables(*scripts)
|
||||
local_arr = {}
|
||||
|
||||
scripts.each do |script|
|
||||
EnvBash.load(script, into: local_arr) if File.exist? script
|
||||
end
|
||||
diff_arr = local_arr.reject { |key, _value| ENV.key? key }
|
||||
|
||||
diff_arr.each do |key, val|
|
||||
e_val = val.gsub(/'/) { |_c| "\\'" }
|
||||
str_data = "$#{key}='#{e_val}'"
|
||||
eval str_data
|
||||
end
|
||||
end
|
||||
|
||||
def new_timestamp()
|
||||
date = DateTime.now
|
||||
$time = date.strftime("%T")
|
||||
$date = date.strftime("%d-%m-%Y")
|
||||
end
|
||||
|
||||
def log_event(error_string, args)
|
||||
if $time.nil?
|
||||
date = DateTime.now
|
||||
log_time = date.strftime("%Y-%m-%d %T")
|
||||
log_time = "#{log_time} #{File.basename($PROGRAM_NAME)}"
|
||||
else
|
||||
log_time = "#{$date} #{$time} #{File.basename($PROGRAM_NAME)}"
|
||||
end
|
||||
code_number = error_string.to_i
|
||||
if code_number.zero?
|
||||
File.append! "#{$HESTIA}/log/system.log", "#{log_time} #{args}" unless $HESTIA.nil?
|
||||
else
|
||||
File.append! "#{$HESTIA}/log/error.log", "#{log_time} #{args} [Error #{error_string}]" unless $HESTIA.nil?
|
||||
end
|
||||
end
|
||||
|
||||
def check_result(error_code:, error_message:, custom_error: -1, silent: false, callback_func: nil)
|
||||
if error_code != OK
|
||||
loc_error = custom_error != -1 ? custom_error : error_code
|
||||
return callback_func(error_code, error_message) if callback_func
|
||||
|
||||
hestia_print_error_message_to_cli error_message unless silent
|
||||
log_event loc_error, $ARGUMENTS
|
||||
exit error_code
|
||||
end
|
||||
OK
|
||||
end
|
||||
|
||||
def check_args(req_params, params, usage)
|
||||
if req_params > params.length
|
||||
puts "Usage #{File.basename($PROGRAM_NAME)} #{usage}"
|
||||
check_result error_code: E_ARGS, error_message: "not enought arguments", silent: true
|
||||
else
|
||||
OK
|
||||
end
|
||||
end
|
||||
|
||||
def check_hestia_demo_mode
|
||||
File.open("/usr/local/hestia/conf/hestia.conf") do |f|
|
||||
until f.eof?
|
||||
item = f.gets.strip
|
||||
conf_data = item.split("=").map(&:strip!)
|
||||
if conf_data.length > 1 && conf_data[0] == "DEMO_MODE" && conf_data[1].downcase == "yes"
|
||||
hestia_print_error_message_to_cli "Unable to perform operation due to security restrictions that are in place."
|
||||
exit(1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def hestia_check_privileged_user
|
||||
if Process.uid != 0
|
||||
hestia_print_error_message_to_cli "Script must run under privileged user"
|
||||
log_event E_PERMISSION, $ARGUMENTS
|
||||
exit(1)
|
||||
end
|
||||
end
|
||||
|
||||
def hestia_format_cli_table(in_array)
|
||||
arr_max_len = {}
|
||||
in_array.each do |elem|
|
||||
elem.each_with_index do |item, index|
|
||||
arr_max_len[index] = item.to_s.length unless arr_max_len.key? index
|
||||
arr_max_len[index] = item.to_s.length if arr_max_len.key?(index) && (arr_max_len[index] < item.to_s.length)
|
||||
end
|
||||
end
|
||||
in_array.each do |elem|
|
||||
elem.each_with_index do |item, index|
|
||||
print " %s " % item.to_s.ljust(arr_max_len[index])
|
||||
end
|
||||
print "\n"
|
||||
end
|
||||
end
|
||||
|
||||
def hestia_print_array_of_hashes(in_array = nil, format = "shell", header = nil)
|
||||
return if in_array.nil? && (format == "json" || format == "plain" || format == "csv")
|
||||
case format
|
||||
when "json"
|
||||
puts in_array.to_json
|
||||
when "plain"
|
||||
in_array.each do |item|
|
||||
data_wrapper = []
|
||||
item.each do |key, val|
|
||||
data_wrapper << val.to_s
|
||||
end
|
||||
puts data_wrapper.join("\t")
|
||||
end
|
||||
when "csv"
|
||||
data_wrapper = in_array.map do |row|
|
||||
row.values.to_csv
|
||||
end
|
||||
puts data_wrapper
|
||||
else
|
||||
headers = nil
|
||||
unless header.nil?
|
||||
headers = header.split(",").map(&:strip)
|
||||
end
|
||||
if !in_array.nil? && headers.nil?
|
||||
headers = []
|
||||
in_array.first.each_key do |key|
|
||||
headers << key.to_s
|
||||
end
|
||||
end
|
||||
data_out = []
|
||||
unless headers.nil?
|
||||
data_out << headers
|
||||
data_out << headers.map { |i| "-" * i.to_s.length }
|
||||
end
|
||||
unless in_array.nil?
|
||||
in_array.each do |val|
|
||||
row = []
|
||||
headers.each do |item|
|
||||
row << if val.key? item
|
||||
val[item]
|
||||
elsif val.key? item.to_sym
|
||||
val[item.to_sym]
|
||||
else
|
||||
""
|
||||
end
|
||||
end
|
||||
data_out << row
|
||||
end
|
||||
end
|
||||
hestia_format_cli_table(data_out)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user