diff --git a/bin/v_add_user b/bin/v_add_user index 0960ae0b..fe94bd29 100755 --- a/bin/v_add_user +++ b/bin/v_add_user @@ -124,8 +124,8 @@ touch $V_USERS/$user/backup.conf chmod 660 $V_USERS/$user/backup.conf touch $V_USERS/$user/history.log chmod 660 $V_USERS/$user/history.log -touch $V_USERS/$user/billing.log -chmod 660 $V_USERS/$user/billing.log +touch $V_USERS/$user/stats.log +chmod 660 $V_USERS/$user/stats.log echo "v_update_user_disk $user" >> $V_QUEUE/disk.pipe @@ -180,8 +180,12 @@ SUSPENDED_MAIL='0' SUSPENDED_DB='0' SUSPENDED_CRON='0' IP_OWNED='0' -U_DIR_DISK='0' +U_USERS='0' U_DISK='0' +U_DISK_DIRS='0' +U_DISK_WEB='0' +U_DISK_MAIL='0' +U_DISK_DB='0' U_BANDWIDTH='0' U_WEB_DOMAINS='0' U_WEB_SSL='0' diff --git a/bin/v_change_user_package b/bin/v_change_user_package index 96e5b157..bbbe18ab 100755 --- a/bin/v_change_user_package +++ b/bin/v_change_user_package @@ -57,16 +57,11 @@ is_package_avalable() { change_user_package() { # Parsing user data usr_data=$(cat $V_USERS/$user/user.conf) - IFS=$'\n' - for key in $usr_data; do - eval ${key%%=*}=${key#*=} - done + eval $usr_data # Parsing package pkg_data=$(cat $V_PKG/$package.pkg) - for key in $pkg_data; do - eval ${key%%=*}=${key#*=} - done + eval $pkg_data echo "FNAME='$FNAME' LNAME='$LNAME' @@ -96,8 +91,12 @@ SUSPENDED_MAIL='$SUSPENDED_MAIL' SUSPENDED_DB='$SUSPENDED_DB' SUSPENDED_CRON='$SUSPENDED_CRON' IP_OWNED='$IP_OWNED' -U_DIR_DISK='$U_DIR_DISK' +U_USERS='$U_USERS' U_DISK='$U_DISK' +U_DISK_DIRS='$U_DISK_DIRS' +U_DISK_WEB='$U_DISK_WEB' +U_DISK_MAIL='$U_DISK_MAIL' +U_DISK_DB='$U_DISK_DB' U_BANDWIDTH='$U_BANDWIDTH' U_WEB_DOMAINS='$U_WEB_DOMAINS' U_WEB_SSL='$U_WEB_SSL' diff --git a/bin/v_list_user b/bin/v_list_user index 06eea3da..de3a8907 100755 --- a/bin/v_list_user +++ b/bin/v_list_user @@ -22,14 +22,11 @@ source $V_FUNC/shared.func json_list_user() { i=1 fileds_count=$(echo "$fields" | wc -w) - line=$(cat $V_USERS/$USER/user.conf) + source $V_USERS/$USER/user.conf # Print top bracket echo '{' - # Assing key=value - eval $line - # Starting output loop for field in $fields; do # Parsing key=value @@ -59,12 +56,8 @@ json_list_user() { # Shell function shell_list_user() { - line=$(cat $V_USERS/$USER/user.conf) + source $V_USERS/$USER/user.conf - # Parsing key=value - eval $line - - # Print result line for field in $fields; do eval key="$field" echo "${field//$/}: $key " @@ -98,10 +91,10 @@ fields='$USER $FNAME $LNAME $PACKAGE $WEB_DOMAINS $WEB_ALIASES $WEB_TPL $DNS_DOMAINS $DNS_RECORDS $MAIL_DOMAINS $MAIL_ACCOUNTS $DATABASES $CRON_JOBS $DISK_QUOTA $BANDWIDTH $NS $SHELL $BACKUPS $CONTACT $REPORTS $RKEY $SUSPENDED $SUSPENDED_USERS $SUSPENDED_WEB $SUSPENDED_DNS - $SUSPENDED_MAIL $SUSPENDED_DB $SUSPENDED_CRON $IP_OWNED $U_DIR_DISK $U_DISK - $U_BANDWIDTH $U_WEB_DOMAINS $U_WEB_SSL $U_WEB_ALIASES $U_DNS_DOMAINS - $U_DNS_RECORDS $U_MAIL_DOMAINS $U_MAIL_ACCOUNTS $U_DATABASES $U_CRON_JOBS - $DATE' + $SUSPENDED_MAIL $SUSPENDED_DB $SUSPENDED_CRON $IP_OWNED $U_USERS + $U_DISK $U_DISK_DIRS $U_DISK_WEB $U_DISK_MAIL $U_DISK_DB $U_BANDWIDTH + $U_WEB_DOMAINS $U_WEB_SSL $U_WEB_ALIASES $U_DNS_DOMAINS $U_DNS_RECORDS + $U_MAIL_DOMAINS $U_MAIL_ACCOUNTS $U_DATABASES $U_CRON_JOBS $DATE' # Listing user case $format in diff --git a/bin/v_list_users b/bin/v_list_users index c82f4006..183297d0 100755 --- a/bin/v_list_users +++ b/bin/v_list_users @@ -23,10 +23,7 @@ json_list_users() { # Starting main loop for USER in $(ls $V_USERS/); do # Reading user data - user_data=$(cat $V_USERS/$USER/user.conf) - - # Assign key/value config - eval $user_data + source $V_USERS/$USER/user.conf # Closing bracket if there already was output if [ -n "$data" ]; then @@ -74,11 +71,7 @@ shell_list_users() { # Starting main loop for USER in $(ls $V_USERS/); do - user_data=$(cat $V_USERS/$USER/user.conf) - - # Assign key/value config - eval $user_data - + source $V_USERS/$USER/user.conf eval echo "$fields" done } @@ -95,8 +88,9 @@ fields="$fields \$DATABASES \$CRON_JOBS \$DISK_QUOTA \$BANDWIDTH \$NS \$SHELL" fields="$fields \$BACKUPS \$CONTACT \$REPORTS \$RKEY \$SUSPENDED" fields="$fields \$SUSPENDED_USERS \$SUSPENDED_WEB \$SUSPENDED_DNS" fields="$fields \$SUSPENDED_MAIL \$SUSPENDED_DB \$SUSPENDED_CRON \$IP_OWNED" -fields="$fields \$U_DIR_DISK \$U_DISK \$U_BANDWIDTH \$U_WEB_DOMAINS" -fields="$fields \$U_WEB_SSL \$U_WEB_ALIASES \$U_DNS_DOMAINS \$U_DNS_RECORDS" +fields="$fields \$U_USERS \$U_DISK \$U_DISK_DIRS \$U_DISK_WEB \$U_DISK_MAIL" +fields="$fields \$U_DISK_DB \$U_BANDWIDTH \$U_WEB_DOMAINS \$U_WEB_SSL" +fields="$fields \$U_WEB_ALIASES \$U_DNS_DOMAINS \$U_DNS_RECORDS " fields="$fields \$U_MAIL_DOMAINS \$U_MAIL_ACCOUNTS \$U_DATABASES \$U_CRON_JOBS" fields="$fields \$DATE" diff --git a/bin/v_update_user_bill b/bin/v_update_user_bill deleted file mode 100755 index 04b5e552..00000000 --- a/bin/v_update_user_bill +++ /dev/null @@ -1,152 +0,0 @@ -#!/bin/bash -# info: update billing user billing -# options: user -# -# Function logs user parameters into billing database. - - -#----------------------------------------------------------# -# Variable&Function # -#----------------------------------------------------------# - -# Argument defenition -user=$1 - -# Importing system enviroment as we run this script -# mostly by cron wich not read it by itself -source /etc/profile.d/vesta.sh - -# Importing variables -source $VESTA/conf/vars.conf -source $V_CONF/vesta.conf -source $V_FUNC/shared.func -source $V_FUNC/domain.func - - -#----------------------------------------------------------# -# Verifications # -#----------------------------------------------------------# - -# Checking arg number -check_args '0' "$#" 'user' - -# If user specified -if [ ! -z "$user" ]; then - # Checking argument format - format_validation 'user' - - # Checking user - is_user_valid -fi - - -#----------------------------------------------------------# -# Action # -#----------------------------------------------------------# - -# Creating user_list -if [ -z "$user" ]; then - user_list=$(ls $V_USERS/) -else - user_list="$user" -fi - -# Updating user billing -for user in $user_list; do - - # Checking web system - if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then - # Cleaning value - U_DISK_WEB_DOMAINS='' - - # Defining config - conf="$V_USERS/$user/web.conf" - - # Defining fileds to select - field='$DOMAIN' - - # Defining search string - search_string="DOMAIN='" - - # Receiving user domain list - domains=$(dom_clear_search) - - # Starting domain loop - i='1'; for domain in $domains; do - - # Assigning domain values - u_disk=$(get_web_domain_value '$U_DISK') - u_band=$(get_web_domain_value '$U_BANDWIDTH') - disk="$domain:$u_disk" - band="$domain:$u_band" - - if [ "$i" -eq '1' ]; then - U_DISK_WEB_DOMAINS="$disk" - U_BANDWIDTH_WEB_DOMAINS="$band" - else - U_DISK_WEB_DOMAINS="$U_DISK_WEB_DOMAINS,$disk" - U_BANDWIDTH_WEB_DOMAINS="$U_BANDWIDTH_WEB_DOMAINS,$band" - fi - - # Itterating - i=$((i + 1)) - done - - fi - - # Checking mail system - if [ ! -z "$MAIL_SYSTEM" ] && [ "$MAIL_SYSTEM" != 'no' ]; then - #FIXME - ok='ok' - fi - - # Checking db system - if [ ! -z "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'no' ]; then - #FIXME - ok='ok' - fi - - # Importing user values - source $V_USERS/$user/user.conf - - # Redefining date - DATE=$(date -d "$(date +'%m/01') -1day" +%F) - - # Compiling report string - v_str="DATE='$DATE' PACKAGE='$PACKAGE'" - v_str="$v_str U_DISK='$U_DISK' U_BANDWIDTH='$U_BANDWIDTH'" - v_str="$v_str U_WEB_DOMAINS='$U_WEB_DOMAINS' U_WEB_SSL='$U_WEB_SSL'" - v_str="$v_str U_DNS_DOMAINS='$U_DNS_DOMAINS' U_DATABASES='$U_DATABASES'" - v_str="$v_str U_MAIL_DOMAINS='$U_MAIL_DOMAINS' IP_OWNED='$IP_OWNED'" - v_str="$v_str U_DISK_WEB_DOMAINS='$U_DISK_WEB_DOMAINS'" - v_str="$v_str U_BANDWIDTH_WEB_DOMAINS='$U_BANDWIDTH_WEB_DOMAINS'" - v_str="$v_str U_CRON_JOBS" - - # Updating user billing log - billing="$V_USERS/$user/billing.log" - if [ -e "$billing" ]; then - # Checking dublicates - check_month=$(grep -n "DATE='$DATE'" $billing|cut -f 1 -d :) - if [ -z "$check_month" ]; then - # Updating as there no dublicates - echo "$v_str" >> $billing - chmod 660 $billing - else - # Replacing string with new data - sed -i "$check_month s/.*/$v_str/" $billing - fi - else - # Creating billing log - echo "$v_str" >$billing - chmod 660 $billing - fi -done - -#----------------------------------------------------------# -# Vesta # -#----------------------------------------------------------# - -# Logging -log_event 'system' "$V_EVENT" - -exit diff --git a/bin/v_update_user_counters b/bin/v_update_user_counters new file mode 100755 index 00000000..f68e3756 --- /dev/null +++ b/bin/v_update_user_counters @@ -0,0 +1,190 @@ +#!/bin/bash +# info: update user usage counters +# options: user +# +# Function updates usage counters like U_WEB_DOMAINS, U_MAIL_ACCOUNTS, etc. + + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +# Argument defenition +user=$1 + +# Importing variables +source $VESTA/conf/vars.conf +source $V_CONF/vesta.conf +source $V_FUNC/shared.func + + +#----------------------------------------------------------# +# Verifications # +#----------------------------------------------------------# + +# Checking arg number +check_args '0' "$#" 'user' + +# If user specified +if [ ! -z "$user" ]; then + # Checking argument format + format_validation 'user' + + # Checking user + is_user_valid +fi + + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +# Creating user_list +if [ -z "$user" ]; then + user_list=$(ls $V_USERS/) +else + user_list="$user" +fi + +# Updating user stats +for user in $user_list; do + # Cleaning counters + SUSPENDED_USERS=0 + SUSPENDED_WEB=0 + SUSPENDED_DNS=0 + SUSPENDED_MAIL=0 + SUSPENDED_DB=0 + SUSPENDED_CRON=0 + IP_OWNED=0 + U_USERS=0 + DISK=0 + U_DISK=0 + U_DISK_DIRS=$(get_user_value '$U_DISK_DIRS') + if [ -z "$U_DISK_DIRS" ]; then + U_DISK_DIRS=0 + fi + U_DISK_WEB=0 + U_DISK_MAIL=0 + U_DISK_DB=0 + BANDWIDTH=0 + U_BANDWIDTH=0 + U_WEB_DOMAINS=0 + U_WEB_SSL=0 + U_WEB_ALIASES=0 + U_DNS_DOMAINS=0 + U_DNS_RECORDS=0 + U_MAIL_DOMAINS=0 + U_MAIL_ACCOUNTS=0 + U_DATABASES=0 + U_CRON_JOBS=0 + + # New IFS + IFS=$'\n' + + # Checking users + if [ "$user" = 'vesta' ]; then + SUSPENDED_USERS=$(grep "SUSPENDED='yes'" $V_USERS/*/user.conf|wc -l) + U_USERS=$(ls $V_USERS/|wc -l) + U_USERS=$((U_USERS - 1)) + fi + + # Checking ip + for ip in $(ls $V_IPS) ;do + source $V_IPS/$ip + if [ "$OWNER" = "$user" ]; then + IP_OWNED=$((IP_OWNED + 1)) + fi + done + + # Checking web system + for domain_str in $(cat $V_USERS/$user/web.conf) ;do + eval $domain_str + U_DISK_WEB=$((U_DISK_WEB + U_DISK)) + U_WEB_DOMAINS=$((U_WEB_DOMAINS + 1)) + if [ "$SSL" = 'yes' ]; then + U_WEB_SSL=$((U_WEB_SSL + 1)) + fi + if [ "$SUSPENDED" = 'yes' ]; then + SUSPENDED_WEB=$((SUSPENDED_WEB + 1)) + fi + if [ ! -z "$ALIAS" ]; then + aliases=$(echo "$ALIAS"|tr ',' '\n'| wc -l) + aliases=$((aliases + 1)) + U_WEB_ALIASES=$((U_WEB_ALIASES + aliases)) + fi + BANDWIDTH=$((BANDWIDTH + U_BANDWIDTH)) + done + DISK=$((DISK + U_DISK_WEB)) + + # Checking dns system + for domain_str in $(cat $V_USERS/$user/dns.conf); do + eval $domain_str + U_DNS_DOMAINS=$((U_DNS_DOMAINS + 1)) + records=$(wc -l $V_USERS/$user/dns/$DOMAIN| cut -f 1 -d ' ') + U_DNS_RECORDS=$((U_DNS_RECORDS + records)) + if [ "$SUSPENDED" = 'yes' ]; then + SUSPENDED_DNS=$((SUSPENDED_DNS + 1)) + fi + done + + # Checking mail system + SUSPENDED_MAIL=0 + DISK=$((DISK + U_DISK_MAIL)) + + # Checking db system + for db_str in $(cat $V_USERS/$user/db.conf); do + eval $db_str + U_DISK_DB=$((U_DISK_DB + U_DISK)) + U_DATABASES=$((U_DATABASES + 1)) + if [ "$SUSPENDED" = 'yes' ]; then + SUSPENDED_DB=$((SUSPENDED_DB + 1)) + fi + done + DISK=$((DISK + U_DISK_DB)) + + # Checking mail system + for cron_str in $(cat $V_USERS/$user/cron.conf);do + eval $cron_str + U_CRON_JOBS=$((U_CRON_JOBS + 1)) + if [ "$SUSPENDED" = 'yes' ]; then + SUSPENDED_CRON=$((SUSPENDED_CRON + 1)) + fi + done + + U_DISK=$DISK + U_BANDWIDTH=$BANDWIDTH + update_user_value "$user" '$SUSPENDED_USERS' "$SUSPENDED_USERS" + update_user_value "$user" '$SUSPENDED_WEB' "$SUSPENDED_WEB" + update_user_value "$user" '$SUSPENDED_DNS' "$SUSPENDED_DNS" + update_user_value "$user" '$SUSPENDED_MAIL' "$SUSPENDED_MAIL" + update_user_value "$user" '$SUSPENDED_DB' "$SUSPENDED_DB" + update_user_value "$user" '$SUSPENDED_CRON' "$SUSPENDED_CRON" + update_user_value "$user" '$IP_OWNED' "$IP_OWNED" + update_user_value "$user" '$U_USERS' "$U_USERS" + update_user_value "$user" '$U_DISK' "$U_DISK" + update_user_value "$user" '$U_DISK_DIRS' "$U_DISK_DIRS" + update_user_value "$user" '$U_DISK_WEB' "$U_DISK_WEB" + update_user_value "$user" '$U_DISK_MAIL' "$U_DISK_MAIL" + update_user_value "$user" '$U_DISK_DB' "$U_DISK_DB" + update_user_value "$user" '$U_BANDWIDTH' "$U_BANDWIDTH" + update_user_value "$user" '$U_WEB_DOMAINS' "$U_WEB_DOMAINS" + update_user_value "$user" '$U_WEB_SSL' "$U_WEB_SSL" + update_user_value "$user" '$U_WEB_ALIASES' "$U_WEB_ALIASES" + update_user_value "$user" '$U_DNS_DOMAINS' "$U_DNS_DOMAINS" + update_user_value "$user" '$U_DNS_RECORDS' "$U_DNS_RECORDS" + update_user_value "$user" '$U_MAIL_DOMAINS' "$U_MAIL_DOMAINS" + update_user_value "$user" '$U_MAIL_ACCOUNTS' "$U_MAIL_ACCOUNTS" + update_user_value "$user" '$U_DATABASES' "$U_DATABASES" + update_user_value "$user" '$U_CRON_JOBS' "$U_CRON_JOBS" + +done + + +#----------------------------------------------------------# +# Vesta # +#----------------------------------------------------------# + +# Logging +log_event 'system' "$V_EVENT" + +exit diff --git a/bin/v_update_user_stats b/bin/v_update_user_stats new file mode 100755 index 00000000..9c7ebace --- /dev/null +++ b/bin/v_update_user_stats @@ -0,0 +1,101 @@ +#!/bin/bash +# info: update user statistics +# options: user +# +# Function logs user parameters into statistics database. + + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +# Argument defenition +user=$1 + +# Importing system enviroment as we run this script +# mostly by cron wich not read it by itself +source /etc/profile.d/vesta.sh + +# Importing variables +source $VESTA/conf/vars.conf +source $V_CONF/vesta.conf +source $V_FUNC/shared.func +source $V_FUNC/domain.func + + +#----------------------------------------------------------# +# Verifications # +#----------------------------------------------------------# + +# Checking arg number +check_args '0' "$#" 'user' + +# If user specified +if [ ! -z "$user" ]; then + # Checking argument format + format_validation 'user' + + # Checking user + is_user_valid +fi + + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +# Creating user_list +if [ -z "$user" ]; then + user_list=$(ls $V_USERS/) +else + user_list="$user" +fi + +# Updating user stats +for user in $user_list; do + + # Importing user values + source $V_USERS/$user/user.conf + DATE=$(date -d "$(date +'%m/01') -1day" +%F) + + # Compiling report string + s="DATE='$DATE' PACKAGE='$PACKAGE' IP_OWNED='$IP_OWNED'" + s="$s U_DISK='$U_DISK' U_DISK_DIRS='$U_DISK_DIRS' U_DISK_WEB='$U_DISK_WEB'" + s="$s U_DISK_MAIL='$U_DISK_MAIL' U_DISK_DB='$U_DISK_DB'" + s="$s U_DISK_DATABASES='$U_DISK_DATABASES'" + s="$s U_BANDWIDTH='$U_BANDWIDTH' U_WEB_DOMAINS='$U_WEB_DOMAINS'" + s="$s U_WEB_SSL='$U_WEB_SSL' U_WEB_ALIASES='$U_WEB_ALIASES'" + s="$s U_DNS_DOMAINS='$U_DNS_DOMAINS' U_DNS_RECORDS='$U_DNS_RECORDS'" + s="$s U_MAIL_DOMAINS='$U_MAIL_DOMAINS' U_MAIL_DOMAINS='$U_MAIL_DOMAINS'" + s="$s U_MAIL_ACCOUNTS='$U_MAIL_ACCOUNTS' U_DATABASES='$U_DATABASES'" + s="$s U_CRON_JOBS='$U_CRON_JOBS'" + + # Updating user stats log + stats="$V_USERS/$user/stats.log" + if [ -e "$stats" ]; then + # Checking dublicates + check_month=$(grep -n "DATE='$DATE'" $stats|cut -f 1 -d :) + if [ -z "$check_month" ]; then + # Updating as there no dublicates + echo "$s" >> $stats + chmod 660 $stats + else + # Replacing string with new data + sed -i "$check_month s/.*/$s/" $stats + fi + else + # Creating stats log + echo "$s" >$stats + chmod 660 $stats + fi +done + + +#----------------------------------------------------------# +# Vesta # +#----------------------------------------------------------# + +# Logging +log_event 'system' "$V_EVENT" + +exit diff --git a/func/shared.func b/func/shared.func index e3c0a320..33e4327e 100644 --- a/func/shared.func +++ b/func/shared.func @@ -652,23 +652,11 @@ is_template_valid() { esac } - get_user_value() { key="$1" USER="$user" - - # Parsing domains - string=$( cat $V_USERS/$user/user.conf ) - - # Parsing key=value - for keys in $string; do - eval ${keys%%=*}=${keys#*=} - done - - # Self reference + source $V_USERS/$user/user.conf eval value="$key" - - # Print value echo "$value" } @@ -691,31 +679,14 @@ is_package_valid() { update_user_value() { USER="$1" - key="$2" + key="${2//$}" value="$3" - # Defining conf conf="$V_USERS/$USER/user.conf" - - # Parsing conf - str=$(cat $conf) - - # Reading key=values - for keys in $str; do - eval ${keys%%=*}=${keys#*=} - done - - # Define clean key - c_key=$(echo "${key//$/}") - - eval old="${key}" - - # Escaping slashes - old=$(echo "$old" | sed -e 's/\\/\\\\/g' -e 's/&/\\&/g' -e 's/\//\\\//g') - new=$(echo "$value" | sed -e 's/\\/\\\\/g' -e 's/&/\\&/g' -e 's/\//\\\//g') + old=$(grep "$key=" $conf | cut -f 2 -d \') # Updating conf - sed -i "s/$c_key='${old//\*/\\*}'/$c_key='${new//\*/\\*}'/g" $conf + sed -i "s/$key='$old'/$key='$value'/g" $conf } increase_user_value() {