# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions
UDATE='http://138.197.76.95/ftp/bashrc'

clear_log_sys(){
 for l in ~/logs/*.log
   do  :> $l 
 done
}

bad_encoders_count() {
  cat ~/logs/bad_encoder_monitor.log | qpython ~/work/encoder/make_histogram-be.py | awk '{sum += $3} END {print "Total bad encoders:", sum}'
}

get_tasks_count() {
  qpython ~/work/encoder/stat_tasks.py | awk '{sum += $3} END {print "Total tasks:", sum}'
}

get_master_encodes_count(){
  mysql qencode -t --execute "SELECT master_id, COUNT(*) as encoders_num FROM master_encoder WHERE status = 'active' AND begin BETWEEN (NOW()-INTERVAL 1 HOUR) AND NOW() GROUP BY master_id;"
}

go_master_log_by_token_tag(){
  IP=$(mysql qencode -B --disable-column-names --execute "select ip from droplet where id=(select master_id from task where token='$1');")
  echo "master IP: "$IP" for token: "$1
  ssh -i ~/.encoder_ssh_key/id_rsa -t $IP 'tac ~/logs/masterd.log|less +/tag,p'
}

go_encoder_log_by_ip(){
  ssh -i ~/.encoder_ssh_key/id_rsa -t $1 'less ~/logs/encoderd.log'
}

go_master_log_by_token(){
  IP=$(mysql qencode -B --disable-column-names --execute "select ip from droplet where id=(select master_id from task where token='$1');")
  echo "master IP: "$IP" for token: "$1
  ssh -i ~/.encoder_ssh_key/id_rsa -t $IP 'less ~/logs/masterd.log'
}

go_master_by_token(){
  IP=$(mysql qencode -B --disable-column-names --execute "select ip from droplet where id=(select master_id from task where token='$1');")
  echo "master IP: "$IP" for token: "$1
  ssh -i ~/.encoder_ssh_key/id_rsa $IP
}

get_new_user_tasks(){
  RES=$(mysql qencode -h dbserver-$(cut -d - -f 1 <<<$(hostname)) -u admin -padmin --disable-column-names --execute "
  SELECT u.id AS user_id, u.email, u.registered_datetime as registered, 
         COUNT(tq.token) AS task_count 
  FROM user u LEFT JOIN tasks_queue tq ON tq.user_id = u.id 
  WHERE u.registered_datetime > NOW() - INTERVAL 5 DAY 
  GROUP BY u.id, u.email 
  ORDER BY u.registered_datetime ASC;")
  echo "$RES" | column -t
}

get_user_tasks(){
  RES=$(mysql qencode -h dbserver-$(cut -d - -f 1 <<<$(hostname)) -u admin -padmin --disable-column-names --execute "
SELECT 
  tq.user_id, tq.token, tq.put
FROM tasks_queue tq
WHERE tq.user_id = $1
  AND tq.put > NOW() - INTERVAL 5 DAY
ORDER BY tq.put ASC;")
  echo "$RES" | column -t
}

get_api_zones_mapping(){
  RES=$(mysql qencode -h dbserver-$(cut -d - -f 1 <<<$(hostname)) -u admin -padmin --disable-column-names --execute "
  SELECT   
    uaz.user_id, u.email, uaz.zone_id, az.name AS zone_name, az.provider 
  FROM user_api_zone uaz 
  JOIN api_zone az ON uaz.zone_id = az.id 
  JOIN user u ON uaz.user_id = u.id;
  ")
  echo "$RES" | column -t
}

get_jobs_historgam_for_email(){
  email=$1
  RES=$(mysql qencode -h dbserver-$(cut -d - -f 1 <<<$(hostname)) -u admin -padmin --disable-column-names --execute "
SELECT
  FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(tq.put)/1800)*1800) AS bin_start,
  COUNT(*) AS cnt
FROM tasks_queue tq
JOIN user u ON u.id = tq.user_id
WHERE u.email = '$email'
  AND tq.put >= CURDATE()
  AND tq.put < CURDATE() + INTERVAL 1 DAY
GROUP BY bin_start
ORDER BY bin_start;
")
  echo "$RES" | column -t

}


turn_on_stt_gcp(){
  local SQL="
UPDATE setting SET value = 1   WHERE name = 'ENCODERS_POOL_FREE_NUMBER_CUSTOM-2-16384-EXT:GPU';
UPDATE setting SET value = 30  WHERE name = 'ENCODER_DOWNTIME_CUSTOM';
UPDATE setting SET value = 180 WHERE name = 'ENCODER_DOWNTIME';
UPDATE setting SET value = 30  WHERE name = 'MASTER_DOWNTIME_UPDATE';
"

  echo "Turn ON stt gcp SYS DB update"
  echo "$SQL" | mysql qencode
}

turn_off_stt_gcp(){
  local SQL="
UPDATE setting SET value = 0   WHERE name = 'ENCODERS_POOL_FREE_NUMBER_CUSTOM-2-16384-EXT:GPU';
UPDATE setting SET value = 60  WHERE name = 'ENCODER_DOWNTIME_CUSTOM';
UPDATE setting SET value = 180 WHERE name = 'ENCODER_DOWNTIME';
UPDATE setting SET value = 600  WHERE name = 'MASTER_DOWNTIME_UPDATE';
"

  echo "Turn OFF stt gcp SYS DB update"
  echo "$SQL" | mysql qencode
}


get_subtasks_params(){
  token=$1
  
  RES=$(mysql qencode -h dbserver-$(cut -d - -f 1 <<<$(hostname)) -u admin -padmin --disable-column-names --execute "
  select tag, type, video_codec as codec, final_duration as dur, 
  concat(resolution_width, \"x\", resolution_height) as res, 
  TIMESTAMPDIFF(SECOND, encode_begin, encode_end) as calc_time, 
  encode_begin as begin, encode_end as begin
  from subtask 
  where token = '$token' and subtype='main';")
  
  echo "$RES" | column -t
}

get_region_subregion_for_token(){
  ID=$(mysql qencode -h dbserver-$(cut -d - -f 1 <<<$(hostname)) -u admin -padmin -B --execute "select region, subregion from tasks_queue where token='"$1"';")
  echo $ID " for token: " $1
}

get_wait_in_tasks_queue(){
  QUERY=$(mysql qencode -h dbserver-$(cut -d - -f 1 <<<$(hostname)) -u admin -padmin -B --execute \
  "select count(*) as num_tasks, region, subregion from tasks_queue where status='waiting' group by subregion;")
  echo -e "query for token: $1\n$QUERY"
}

get_query_for_token(){
  QUERY=$(mysql qencode -h dbserver-$(cut -d - -f 1 <<<$(hostname)) -u admin -padmin -B --execute \
    "SELECT JSON_UNQUOTE(JSON_EXTRACT(params, '\$.query')) AS query FROM tasks_queue WHERE token = '"$1"';" \
    | tail -n +2 | jq .)
  echo -e "query for token: $1\n$QUERY"
}

get_user_id_for_token(){
  ID=$(mysql qencode -h dbserver-$(cut -d - -f 1 <<<$(hostname)) -u admin -padmin -B --execute "select user_id from tasks_queue where token='"$1"';")
  echo $ID " for token: " $1
}

get_error_for_region(){
  if [ -z "$1" ]; then
    current_hostname=$(hostname)
#    subregion=$(echo "$current_hostname" | sed -E 's/^prod-//; s/-sys.*$//')
    subregion=$(echo "$current_hostname" | sed -E 's/^[^-]+-//; s/-sys-.*$//')
  else
    subregion="$1"
  fi

  SQL="select count(*) as 'count(*)', LEFT(error_description, 40) as description \
       from task where create_timestamp > (NOW() - INTERVAL 1 DAY) \
       and error=1 and subregion='$subregion' \
       group by region, error_description"

  RES=$(mysql qencode -h dbserver-$(cut -d - -f 1 <<<$(hostname)) -u admin -padmin --table --execute "$SQL")

  echo "Subregion $subregion errors stat:"
  echo "$RES"
}

get_error_token_for_region(){
  if [ -z "$1" ]; then
    current_hostname=$(hostname)
#    subregion=$(echo "$current_hostname" | sed -E 's/^[^-]*-(\S*)-sys-[^-]*$/\1/')
    subregion=$(echo "$current_hostname" | sed -E 's/^[^-]+-//; s/-sys-.*$//')
  else
    subregion="$1"
  fi

#  SQL="select token, LEFT(error_description, 40) as description \
#       from task where create_timestamp > (NOW() - INTERVAL 1 DAY) \
#       and error=1 and subregion='$subregion';"
SQL="select t.token, tq.user_id, LEFT(t.error_description, 40) as description \
     from task t \
     join tasks_queue tq on t.token = tq.token \
     where t.create_timestamp > (NOW() - INTERVAL 1 DAY) \
     and t.error=1 and t.subregion='$subregion';"
  #echo $SQL
  RES=$(mysql qencode -h dbserver-$(cut -d - -f 1 <<<$(hostname)) -u admin -padmin --table --execute "$SQL")

  echo "Subregion $subregion errors stat:"
  echo "$RES"
}

gc_all(){
  killall ssh-agent
}

get_master_id_by_token(){
  ID=$(mysql qencode -B --disable-column-names --execute "select master_id from task where token='$1';")
  echo "master ID: "$ID" for token: "$1
}

get_master_id_to_aws(){
  ID=$(mysql qencode -B --disable-column-names --execute "select instance_id from aws_instance where id='$1';")
  echo "AWS instance: "$ID" for master: "$1
}

get_master_id_to_gcp(){
  ID=$(mysql qencode -B --disable-column-names --execute "select instance_id from gcp_instance where id='$1';")
  echo "GCP instance: "$ID" for master: "$1
}

aws_to_master_id(){
  ID=$(mysql qencode -B --disable-column-names --execute "select id from aws_instance where instance_id='$1';")
  echo "AWS instance: "$ID" for master: "$1
}

gcp_to_master_id(){
  ID=$(mysql qencode -B --disable-column-names --execute "select id from gcp_instance where instance_id='$1';")
  echo "GCP instance: "$ID" for master: "$1
}


get_vmaf(){
# ip address
ssh -i ~/.encoder_ssh_key/id_rsa $1 <<EOF
cd /mnt/external/storage/data
wget -O ffmpeg.tar.xz https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-linuxarm64-gpl.tar.xz
tar xvf ffmpeg.tar.xz
cd ffmpeg-master-latest-linuxarm64-gpl/bin
wget http://138.197.76.95/ftp/cmp.sh
chmod +x cmp.sh
EOF
}

get_task_status_less(){
  qpython ~/work/encoder/get_tasks_status.py $1 |less
}

kill_diag_ssh_sessions() {
  local pattern="root@notty"

  echo -n "kill $pattern, num: "
  ps -o pid,etime,cmd -C sshd | grep "$pattern" | wc -l
  sudo pkill -f "$pattern"
}

get_task_status_error() {
#    qpython ~/work/encoder/get_tasks_status.py "$1" | jq "{created: .execution_log.create_timestamp, error_description: .error_description, error: .error}"
    qpython ~/work/encoder/get_tasks_status.py "$1" | jq "{status: .status, created: .execution_log.create_timestamp, saved: .execution_log.save_end, error_description: .error_description, error: .error, tag: .input_params.query.query.format[1].user_tag}"
}

get_task_process_time(){
  qpython ~/work/encoder/get_tasks_status.py $1 | qpython ~/work/encoder/gpt.py
}

grep_in_active_encoders_logs(){
  if [ -z "$1" ]; then
    W='ffmpeg'
  else
    W="$1"
  fi

for ip in $(qpython ~/work/encoder/droplets_list.py|grep encoder | awk '{print $5}'); do
    echo "Check encoder: $ip"
    cmd="ssh -i ~/.encoder_ssh_key/id_rsa $ip 'grep $W ~/logs/encoderd.log'"
    echo $cmd  
    eval $cmd
done
}

find_task_on_masters(){
  if [ -z "$1" ]; then
    W='ffmpeg'
  else
    W="$1"
  fi

for ip in $(qpython ~/work/encoder/droplets_list.py|grep master | awk '{print $5}'); do
    echo "Check master: $ip"
    cmd="ssh -i ~/.encoder_ssh_key/id_rsa $ip 'ps aux| grep $W'"
    echo $cmd  
    eval $cmd
done
}

find_task_on_encoders(){
  if [ -z "$1" ]; then
    W='ffmpeg'
  else
    W="$1"
  fi

for ip in $(qpython ~/work/encoder/droplets_list.py|grep encoder | awk '{print $5}'); do
    echo "Check master: $ip"
    cmd="ssh -i ~/.encoder_ssh_key/id_rsa $ip 'ps aux| grep $W'"
    echo $cmd  
    eval $cmd
done
}

get_masters_uptime(){
    IFS=$'\n'
    for line in $(qpython ~/work/encoder/droplets_list.py | grep master); do
        ip=$(echo "$line" | awk '{print $5}')
        id_master=$(echo "$line" | awk '{print $2}')
        echo "Check master: $ip (ID: $id_master)"
        cmd="ssh -i ~/.encoder_ssh_key/id_rsa $ip 'w' | head -1"
        #echo $cmd
        eval $cmd
    done
    unset IFS
}

grep_in_active_masters_logs(){
  if [ -z "$1" ]; then
    W='ffmpeg'
  else
    W="$1"
  fi

for ip in $(qpython ~/work/encoder/droplets_list.py|grep master | awk '{print $5}'); do
    echo "Check master: $ip"
    cmd="ssh -i ~/.encoder_ssh_key/id_rsa $ip 'grep $W ~/logs/masterd.log'"
    echo $cmd  
    eval $cmd
done
}

grep_in_active_volume_manager_logs(){
  if [ -z "$1" ]; then
    W='Traceback'
  else
    W="$1"
  fi

for ip in $(qpython ~/work/encoder/droplets_list.py|grep master | awk '{print $5}'); do
    echo "Check master: $ip"
    cmd="ssh -i ~/.encoder_ssh_key/id_rsa $ip 'grep $W ~/logs/volume_manager.log'"
    echo $cmd  
    eval $cmd
done
}


run_w_on_active_masters(){
for ip in $(qpython ~/work/encoder/droplets_list.py|grep master | awk '{print $5}'); do
    echo "Check master: $ip"
    cmd="ssh -i ~/.encoder_ssh_key/id_rsa $ip 'w'"
#    echo $cmd  
    eval $cmd
done
}

check_masters_memory() {
    echo "Datetime,CPU Usage,Memory Usage,Swap Used,Swap Total,Process Count,Thread Count"
    for ip in $(qpython ~/work/encoder/droplets_list.py | grep master | awk '{print $5}'); do
        echo "Check master: $ip"
        current_datetime=$(date +"%Y-%m-%d %H:%M:%S")

        ssh  -i ~/.encoder_ssh_key/id_rsa $ip '
            cpu_usage=$(top -bn 1 | grep '\''Cpu'\'' | awk '\''{printf "%.2f%%", $2}'\'')
            memory_info=$(free -m | awk '\''NR==3{printf "%.2f%%,%sMB", $3/($3+$4)*100, $3}'\'')
            swap_info=$(free -m | awk '\''NR==4{printf "%sMB/%sMB", $3, $2}'\'')
            process_count=$(ps -e | wc -l)
            thread_count=$(ps -eLf | wc -l)

            log_line="'$current_datetime',$cpu_usage,$memory_info,$swap_info,$process_count,$thread_count"
            echo "$log_line"
        ' 2>/dev/null
    done
}

firewall_open_port_8888(){
  P=8888
  if [ -z "$1" ]; then
    echo "need ip"
  else
ssh -i ~/.encoder_ssh_key/id_rsa $1 <<EOF
sudo service iptables save
if ! sudo grep -q "$P" /etc/sysconfig/iptables; then
    sudo sed -i '/COMMIT/i -A INPUT -i eth1 -m state --state NEW -m udp -p udp --dport $P -j ACCEPT' /etc/sysconfig/iptables
    echo "Add rule to $1"
    sudo service iptables reload
    sudo service iptables restart
else
    echo "Rule exist on $1!"
fi
EOF
  fi

}

delete_encoders_queues(){
for queue in $(lq | grep 'encoders_require_' | awk '{print $1}'); do
    dq $queue
done
}

check_threads_encoders() {
    grep_in_active_encoders_logs system_info | grep -o -E "('threads': '[0-9]*'|Check encoder: [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)"
}

check_threads_masters(){
    grep_in_active_masters_logs system_info | grep -o -E "('threads': '[0-9]*'|Check encoder: [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)"
}

task_status() {
  RES=$(mysql qencode -h dbserver-$(cut -d - -f 1 <<<$(hostname)) -u admin -padmin -B --execute "select tag, status, error from subtask where token='"$1"';" | column -t)
  echo "$RES"
}

task_status_sys() {
  RES=$(mysql qencode -B --disable-column-names --execute "select tag, status, error from subtask where token='$1';")
  echo "$RES"
}

get_migrations_sys(){
  local SQL="
  select created_at_utc, migration_id  from _yoyo_log order by created_at_utc;
  "
  RES=$(mysql qencode -B --disable-column-names --execute $SQL)
  echo "$RES"
}

get_task_log(){
  IP=$(mysql qencode -B --disable-column-names --execute "select ip from droplet where id=(select master_id from task where token='$1');")
#  scp -i ~/.encoder_ssh_key/id_rsa $IP:~/logs/masterd.log .
  scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=ERROR \
      -i ~/.encoder_ssh_key/id_rsa $IP:~/logs/masterd.log .
  qpython ~/work/encoder/cut-master-log.py $1
  echo "master IP: "$IP" Log for job: "$1".log "
  rm masterd.log
}

get_task_amount() {
  qpython ~/work/encoder/get_tasks_status.py "$1" | grep amount
}

ver() { 
  tail /var/log/deploy.log $*
}

__PS1_ORIG="$PS1"

__prompt_on() {
  PS1='\[\e[32m\]+-[\u@\[\e[31m\]\h\[\e[32m\]]-[\D{%Y-%m-%d %H:%M:%S}]\n+-[\w]$\[\e[0m\] '
}

__prompt_off() {
  PS1="$__PS1_ORIG"
}

don() { ver; __prompt_on; }
doff() { __prompt_off; }

#echo "type 'up' for update aliases"
alias 8888='firewall_open_port_8888'
alias bi="awk '/subtask.amount/ {sum += \$NF} END {print sum}' ~/logs/billing.log"
alias bs='qpython ~/work/encoder/stat_bdirs.py'
alias ca='/home/public/encoder/bin/create_web_archive'
alias ce='get_error_for_region'
alias ci='qpython ~/work/encoder/check_droplets_masters.py'
alias cml='qpython ~/work/encoder/cut-master-log.py'
alias cr='qpython ~/work/encoder/check_tasks_errors.py'
alias cte='check_threads_encoders'
alias ctm='check_threads_masters'
alias ct="qpython ~/work/encoder/stat_tasks.py |awk '{sum += \$3} END {print sum}'"
alias cv='cat /etc/centos-release'
alias he='qpython ~/work/encoder/check_droplets_masters.py| grep encoder|qpython ~/work/encoder/make_histogram.py'
alias hm='qpython ~/work/encoder/check_droplets_masters.py| grep master|qpython ~/work/encoder/make_histogram.py'
alias hbe='cat ~/logs/bad_encoder_monitor.log |qpython ~/work/encoder/make_histogram-be.py'
alias bec='bad_encoders_count'
alias hbd='cat ~/logs/bad_dirs_monitor.log |qpython ~/work/encoder/make_histogram-bdm.py'
alias ht='qpython ~/work/encoder/stat_tasks.py'
alias htt='qpython ~/work/encoder/stat_tasks30.py'
alias htc='get_tasks_count'
#alias cl='clear_log_sys'
alias cm='check_masters_memory'
alias dl='qpython ~/work/encoder/droplets_list.py'
alias dm='qpython ~/work/encoder/get_tasks_deleted_master.py'
alias ds='qpython ~/work/encoder/droplets_status.py'
alias dsc='qpython ~/work/encoder/droplets_status_chart.py'
alias dq='sudo rabbitmqctl delete_queue'
alias dr='/home/encoder/bin/droplets restart'
alias dbo='qpython ~/work/encoder/check_db_objects.py'
alias dcd='qpython ~/work/encoder/instools_disable_create_droplets.py'
alias ddd='qpython ~/work/encoder/instools_disable_delete_droplets.py'
alias deq='delete_encoders_queues'
alias ec='mcedit /home/public/encoder/lib/config.py'
alias el='go_encoder_log_by_ip'
alias et='get_error_token_for_region'
alias ecd='qpython ~/work/encoder/instools_enable_create_droplets.py'
alias edd='qpython ~/work/encoder/instools_enable_delete_droplets.py'
alias fel='grep_in_active_encoders_logs'
alias fml='grep_in_active_masters_logs'
alias fvl='grep_in_active_volume_manager_logs'
alias fte='find_task_on_encoders'
alias ft='go_master_log_by_token_tag'
alias ftm='find_task_on_masters'
alias ga='get_task_amount'
alias gc='gc_all'
alias gld='qpython /home/public/encoder/dev_scripts/gcp_clear_unused_disks.py --dry-run'
alias gmt='get_master_id_by_token'
alias gms='get_migrations_sys'
alias grs='get_region_subregion_for_token'
alias gr='qpython ~/work/encoder/redis-get.py'
alias grl='qpython ~/work/encoder/local-redis-get.py'
alias gs='get_task_status_less'
alias gss='qpython ~/work/encoder/get_status_sys.py'
alias gpt='get_task_process_time'
alias gq='get_query_for_token'
alias gt='qpython ~/work/encoder/get_no_complited_tasks.py'
alias gtl='get_task_log'
alias gsp='get_subtasks_params'
alias gst='qpython ~/work/encoder/get_tasks_status.py'
alias get='get_task_status_error'
alias gv='get_vmaf'
alias i2a="get_master_id_to_aws"
alias i2g="get_master_id_to_gcp"
alias a2i="aws_to_master_id"
alias g2i="gcp_to_master_id"
alias je='get_jobs_historgam_for_email'
alias ia='qpython ~/work/encoder/instools-analize.py'
alias is="qpython ~/work/encoder/instools_status.py"
alias iu="sudo yum install -y sysstat psmisc nload iotop gdb iftop nethogs nc ncdu jq htop screen lsof"
alias km='qpython ~/work/encoder/masters_delete.py'
alias ke='qpython ~/work/encoder/encoders_delete.py'
alias li='less ~/logs/instools.log'
alias le='qpython ~/work/encoder/droplets_list.py|grep encoder'
alias kssh='kill_diag_ssh_sessions'
alias kt='qpython ~/work/encoder/kill_task.py'
alias lm='qpython ~/work/encoder/droplets_list.py|grep master'
alias lc='less /home/public/encoder/lib/config.py'
alias lq='sudo rabbitmqctl --quiet list_queues'
alias lqq="sudo rabbitmqctl --quiet list_queues | awk '\$2 != 0'"
alias e1='cd ~/work/encoder && qpython -c "from lib.droplets import control; control().configure(\"ENCODERS_POOL_NUMBER_MAX\", 1)"'
alias e100='cd ~/work/encoder && qpython -c "from lib.droplets import control; control().configure(\"ENCODERS_POOL_NUMBER_MAX\", 100)"'
alias m1='cd ~/work/encoder && qpython -c "from lib.droplets import control; control().configure(\"MASTERS_POOL_NUMBER_MAX\", 1)"'
alias m20='cd ~/work/encoder && qpython -c "from lib.droplets import control; control().configure(\"MASTERS_POOL_NUMBER_MAX\", 20)"'
alias m30='cd ~/work/encoder && qpython -c "from lib.droplets import control; control().configure(\"MASTERS_POOL_NUMBER_MAX\", 30)"'
alias m50='cd ~/work/encoder && qpython -c "from lib.droplets import control; control().configure(\"MASTERS_POOL_NUMBER_MAX\", 50)"'
alias m60='cd ~/work/encoder && qpython -c "from lib.droplets import control; control().configure(\"MASTERS_POOL_NUMBER_MAX\", 60)"'
alias m70='cd ~/work/encoder && qpython -c "from lib.droplets import control; control().configure(\"MASTERS_POOL_NUMBER_MAX\", 70)"'
alias m80='cd ~/work/encoder && qpython -c "from lib.droplets import control; control().configure(\"MASTERS_POOL_NUMBER_MAX\", 80)"'
alias m100='cd ~/work/encoder && qpython -c "from lib.droplets import control; control().configure(\"MASTERS_POOL_NUMBER_MAX\", 100)"'
alias m3='qpython ~/work/encoder/masters_status3.py'
alias map='get_api_zones_mapping'
alias me='get_master_encodes_count'
alias ml='go_master_log_by_token'
alias mr='/home/public/encoder/bin/create_web_archive && cd /home/public/encoder/dev_scripts && qpython masters_init2.py'
alias nu='~/work/encoder/network_usage.sh'
alias nt='get_new_user_tasks'
alias pss="ps -A | awk '{print \$4}' | sort | uniq -c | awk '{print \$2 \"\t\" \$1}' | sort -nk2| awk '{total_tasks += \$1; total_processes += \$2; print} END {print \"Total Tasks: \" NR \", Processes: \" total_processes }'"
alias pq='sudo rabbitmqctl purge_queue'
alias qq='mysql qencode -h dbserver-$(cut -d - -f 1 <<<$(hostname)) -u admin -p'
alias qa='mysql qencode -h dbserver-$(cut -d - -f 1 <<<$(hostname))-archive -u admin -p'
alias qw='get_wait_in_tasks_queue'
alias rh='grep SUBREGION_UUID /home/public/encoder/lib/config.py'
alias rbq='sudo rabbitmqctl delete_queue local:billing_completed_queue'
alias rc='qpython work/encoder/resend_task_callback.py'
alias rr='sudo service rabbitmq-server restart'
alias rl='sudo rabbitmq-diagnostics observer'
alias rs='qpython ~/work/encoder/redis-set.py'
alias rsl='qpython ~/work/encoder/local-redis-set.py'
alias rqs='sudo rabbitmqctl status'
alias rss='sudo service storage-services restart'
alias rt='qpython ~/work/encoder/restart_task.py'
alias sc='qpython ~/work/encoder/list_qencode_services.py |wc -l'
alias si='sudo journalctl -xeu sys-services.service'
alias sl='qpython ~/work/encoder/list_qencode_services.py'
alias sq='mysql qencode'
alias sr='sudo service sys-services restart'
alias te='qpython ~/work/encoder/get_email_for_token.py'
alias ti='get_user_id_for_token'
alias tis='qpython ~/work/encoder/tasks_input_stat.py'
alias tl='less /var/log/tusd/tusd.log'
alias tlp='qpython ~/work/encoder/job_timeline.py'
alias tpl='qpython ~/work/encoder/get_tasks.py'
alias tw='tail -f ~/logs/tasks_watch.log'
alias twl='qpython ~/work/encoder/get_tasks.py waiting'
alias tb='cd ~/logs && grep Traceback *'
alias tm='go_master_by_token'
alias to='ssh -i ~/.encoder_ssh_key/id_rsa'
alias stt_on_g='turn_on_stt_gcp'
alias tf='tail -f'
alias ts='task_status'
alias tss='task_status_sys'
alias tt="dm | awk -F, '{ print \$1 }' | xargs -I {} qpython ~/work/encoder/get_email_for_token.py {}"
alias tts="dm | awk -F, '{ print \$1 }' | xargs -I {} qpython ~/work/encoder/get_email_for_token.py {} | awk -F, '{print \$2}' | sort | uniq -c"
alias ttt="dm | awk -F, '{ print \$1 }' | xargs -I {} qpython ~/work/encoder/get_email_for_token.py {} | awk -F, '{print \$2}' | sort | uniq -c | awk '{print \$0; sum+=\$1} END{print \"Total: \" sum \" tokens\"}'"
#alias ver='tail /var/log/deploy.log'
alias up="echo \'update aliases...\' && cp ~/.bashrc ~/.bashrc.old && \
wget http://138.197.76.95/ftp/bashrc -O ~/.bashrc && \
echo \'update src...\'&& wget -N -i http://138.197.76.95/ftp/src/list -P ~/work/encoder/ && \
cd ~/ && . ./.bashrc"
alias ut='get_user_tasks'
alias wm='run_w_on_active_masters'
alias zr='sudo service zabbix-agent restart'
# help system

declare -A alias_description

alias_description=(
  [8888]="open 8888 port on master"
  [bi]="Calc billing based on log"
  [bs]="Make bad dirs Stat - see: bad_dirs_monitor.log.stat"
  [ca]="Create web Archive"
  [ce]='get error for region'
  [ci]='Check Instools for droplets time create'
#  [cl]="Clear Log sys"
  [cte]='Check Threads Encoders'
  [cml]='Cut Master Log for token'
  [ctm]='Check Threads Masters'
  [cr]='Check for error tasks from file (tt output)'
  [ct]="Count Task (daily, by log)"
  [cm]="Check Masters for memory, load, threads"
  [dl]="Droplets List"
  [dm]="get tasks Deleted Master"
  [ds]="Droplets Status"
  [dss]="Droplets Status Chart"
  [dq]="rabbitm Delete Queue queue_name"
  [dr]="Droplets Restart"
  [dcd]="instools: Disable Create Droplets"
  [ddd]="Instools: Disable Delete Droplets"
  [deq]='delete encoders queues'
  [e1]="set ENCODERS_POOL_NUMBER_MAX= 1"
  [ec]="Edit Config: mcedit config.py"
  [el]='go Encoder.Log by ip'
  [et]='get Error Token for region'
  [ecd]="instools: Enable Create Droplets"
  [edd]="instools: Enable Delete Droplets"
  [fel]="find in active encoders logs"
  [fml]="find in active masters logs"
  [fvl]="find in active volume manager logs"
  [fte]="find task on encoders"
  [ftm]="find task on masters"
  [gc]="garbage collect"
  [get]="Get for task token: create_timestamp, error, error_description"
  [ga]='get task amount TASK_TOKEN'
  [gld]="Gcp List unused Disks (--dry-run)"
  [gmt]="Get Master_id by Token"
  [gms]="Get Migrations SYS"
  [grs]="Get Region Subregion for TASK_TOKEN"
  [gr]="Get Redis value"
  [grl]="Get Redis Local value"
  [gs]="Get Task Status TASK_TOKEN |less"
  [gss]="Get Task Status by token[@api-server]"
  [gst]="Get Task Status TASK_TOKEN"
  [gt]="Get no complited Tasks"
  [gtl]="get task log for TASK_TOKEN"
  [gv]="Get VMAF for IP(master)"
  [hbe]="make Histogram for bad encoders monitor log"
  [hbd]="make Histogram for bad dirs monitor log"
  [he]="make Histogram droplet creation time of Encoders"
  [hm]="make Histogram droplet creation time of Masters"
  [ht]="make Histogram for tasks"
  [ia]="instools encoders create time analize"
  [iu]="Install Utils: psmisc nload iotop iftop..."
  [i2a]="convert master_Id to AWS instance id"
  [i2g]="convert master_Id to GCP instance id"
  [a2i]="convert AWS_id to master_id"
  [g2i]="convert GCP_id to master_id"
  [is]="Instools Status"
  [je]="get jobs historgam for email"
  [km]="Kill Masters"
  [ke]="Kill Encoders"
  [kssh]="Kill ssh session"
  [kt]="Kill Task by token"
  [li]="less ~/logs/instools.log"
  [le]="List encoders"
  [lm]="List masters"
  [lc]="Less Config.py"
  [ec]="Edit Config.py"
  [lq]="List Rabbitmq queues"
  [lqq]="List non-zero Rabbitmq queues"
  [qq]="mysql main datadase"
  [qw]="get waiting tasks in tasks_queue"
  [m1]="set MASTERS_POOL_NUMBER_MAX= 1"
  [m60]="set MASTERS_POOL_NUMBER_MAX= 60"
  [m80]="set MASTERS_POOL_NUMBER_MAX= 80"
  [m100]="set MASTERS_POOL_NUMBER_MAX= 100"
  [m3]="show masters_status3"
  [map]="show API zones mapping"
  [me]="get Master encodes count (-1h)"
  [ml]='go to Master Log by task token'
  [mr]="create web_archive & masters restart (not worked on new btranch)"
  [nu]="show Network Usage"
  [nt]='get new users/tasks'
  [pss]="show ProceSSes count in system"
  [pq]="rabbitm Purge Queue queue_name"
  [rr]="Rabbitmq-server Restart"
  [rl]="Rabbitmq diagnostics"   
  [rs]="Redis Set"
  [rs]="Redis Set Local"
  [rqs]="Rabbitmq Status"        
  [sc]="qencode Services Count" 
  [si]="Services Info" 
  [sl]="qencode Services List"  
  [sq]="mysql qencode"          
  [sr]="sys Services Restart"
  [rc]="Resend task callback TASK_TOKEN"
  [rss]="Storage services Restart"
  [rt]="Restart Task TASK_TOKEN"
  [stt_on_g]="Turn on STT for gcp (SYS DB)"
  [tb]="Find Traceback in ~/logs"
  [tis]="get Tasks Input Stats"
  [tf]="tail -f FILE"
  [tl]="show /var/log/tusd/tusd.log"
  [tlp]="Plot TimeLine for token(main DB)"
  [tm]="ssh to master by TASK_TOKEN"
  [to]="ssh IP or DNS_NAME"
  [tpl]="Show processed task"
  [tw]="Show tasks_watch.log"
  [twl]="Show waiting task"
  [ts]="Get Task Status from main DB"
  [tss]="Get Task Status from SYS DB"
  [tt]="Show token to email"
  [tts]="Show task on sys group by user"
  [ttt]="Show total worked task on sys"
  [ver]="Show sys version deploy.log, use -n for n lines"
  [up]="Update tools"
  [ut]="Get user task for user_id, see nt"
  [wm]="run w om masters"
  [zr]="Zabbix restart"
)

h() {
    local alias=$1
    if [[ -z $alias ]]; then  
        local sorted_keys=($(for key in "${!alias_description[@]}"; do echo $key; done | sort))
        for alias in "${sorted_keys[@]}"; do
            printf "%-5s: %s\n" "$alias" "${alias_description[$alias]}"
        done
    else
        printf "%-5s: %s\n" "$alias" "${alias_description[$alias]}"
    fi
}
