|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
|
|
|
|
# DOC
|
|
|
|
# ------------------------------------------------------
|
|
|
|
# O PABX manterá logs, informações do banco de dados e áudios de ligação por deterinado dias.
|
|
|
|
#
|
|
|
|
# Esses dias serão definidos pela licença(banco de dados) ou será usado valores default.
|
|
|
|
#
|
|
|
|
# HD < 255 -> 90 dias
|
|
|
|
# HD < 505 -> 186 dias
|
|
|
|
# HD < 755 -> 365 dias
|
|
|
|
# HD > 755 -> 730 dias
|
|
|
|
#
|
|
|
|
# ### Aonde obtém os dias?
|
|
|
|
# 1. Bancos de dados (tabela pbx_parametros coluna prm_log_dias)
|
|
|
|
# 2. /etc/temporizador_de_dados.config deve ter a tag `dias=`
|
|
|
|
# 3. Valores default por tamanho do HD
|
|
|
|
#
|
|
|
|
# O script procurará o valor nesta ordem. Se o banco de dados não estiver definido, o script vai
|
|
|
|
# definir com o valor usado nessa execução no banco de dados (tabela pbx_parametros).
|
|
|
|
#
|
|
|
|
# ### Arquivo /etc/temporizador_de_dados.config?
|
|
|
|
# Esse arquivo será um "backup" das configurações da última execução
|
|
|
|
#
|
|
|
|
# ### Como são definidos logrotate?
|
|
|
|
# O script muda os dias de log através do logrotate. Todo o arquivo dentro do hdaux/utilitarios/scripts/logrotate.d/ que
|
|
|
|
# estiver a string `auto_logrotate_licenca_PABX`
|
|
|
|
#
|
|
|
|
# o rotate irá mudar automaticamente. Esse valor rotate. usado pelo logrotate,
|
|
|
|
# será sempre colocado de acordo com os dias do banco de dados.
|
|
|
|
#
|
|
|
|
# -----------------------------------------------------
|
|
|
|
|
|
|
|
# credenciais do banco de dados
|
|
|
|
#
|
|
|
|
# PASSWORD_DB
|
|
|
|
# USER_DB
|
|
|
|
# PORT_DB
|
|
|
|
# BASE_DB
|
|
|
|
# HOST_DB
|
|
|
|
. /hdaux/utilitarios/scripts/credentials_db.sh
|
|
|
|
|
|
|
|
|
|
|
|
# As querys que serão executadas para permitir apenas o número de dias
|
|
|
|
pbx=("DELETE from pbx_audita_full where full_data_hora < " \
|
|
|
|
"DELETE from pbx_audita where aud_data < " \
|
|
|
|
"DELETE from pbx_eventos_agentes where data_operacao < " \
|
|
|
|
"DELETE from pbx_bilhetes where data_bilhete < " \
|
|
|
|
"DELETE from pbx_bilhetes_complemento where data_registro < " \
|
|
|
|
"DELETE from pbx_ura_movimento where data_reg < " \
|
|
|
|
"DELETE from pbx_pesquisa_movimento where data_reg < " \
|
|
|
|
"DELETE from pbx_classifica_reg where data_reg < " \
|
|
|
|
"DELETE from pbx_abandonadas_semretorno where abdsr_data < " \
|
|
|
|
"DELETE from pbx_campanha_registro where data_cmpr < " \
|
|
|
|
"DELETE from pbx_controle_acesso where acs_data_fim < " \
|
|
|
|
"DELETE from pbx_controle_acesso_item where acsi_data < " \
|
|
|
|
"DELETE from pbx_eventos_transbordo where data_reg < " \
|
|
|
|
"DELETE from pbx_integracao_reg where reg_data < " \
|
|
|
|
"DELETE from pbx_pesquisa_log where plog_data < " \
|
|
|
|
"DELETE from pbx_pesquisa_regitra where data_fim < " \
|
|
|
|
"DELETE from pbx_registra_classificacao where rgc_saida < " \
|
|
|
|
"DELETE from pbx_workflow_reg_envio_mensal where wkf_data_envio < " \
|
|
|
|
"DELETE from pbx_workflow_reg_envio where wkf_data_envio < " \
|
|
|
|
"DELETE from pbx_workflow_reg_envio_email where wkf_data_envio < " \
|
|
|
|
"DELETE from pbx_workflow_reg_envio_email_mensal where wkf_data_envio < "
|
|
|
|
"DELETE from pbx_eventos_dacs where to_timestamp(uid1::real) < "
|
|
|
|
"DELETE from pbx_abandonadas_status where to_timestamp(uniqueid::real) < ")
|
|
|
|
|
|
|
|
|
|
|
|
query_keep_data_days="select prm_log_dias from pbx_parametros;"
|
|
|
|
caminho_dados_txt="/etc/temporizador_de_dados.config"
|
|
|
|
|
|
|
|
# /var/spool/asterisk/monitor/*.WAV
|
|
|
|
# Esta função irá excluir arquivos de gravações depois de $1 (primeiro argumento) dias
|
|
|
|
function remove_audio_wav(){
|
|
|
|
|
|
|
|
find /var/spool/asterisk/monitor/ -type f -mtime +$1 -iname *.WAV -exec rm -rf {} \;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# Redefinir o números de dias que não devem ser excluídos
|
|
|
|
# 50 -> Iria excluir os dias depois desse número de dias
|
|
|
|
function insert_prm_log_dias_bd () {
|
|
|
|
# $1 = days
|
|
|
|
|
|
|
|
PGPASSWORD=$PASSWORD_DB \
|
|
|
|
psql -q -h "$HOST_DB" -U $USER_DB -d $BASE_DB -c "update pbx_parametros set prm_log_dias = $1 where Id = 1"
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# Definir os arquivos de logrotate dentro da pasta /hdaux/utilitarios/scripts/logrotate.d/
|
|
|
|
# Esses arquivos irá definir quantos dias o logrotate manterá os logs
|
|
|
|
# Todos os arquivos que tem '# auto_logrotate_licenca_PABX' na pasta modificado rotate
|
|
|
|
function set_logrotate(){
|
|
|
|
# $1 = número de dias
|
|
|
|
|
|
|
|
|
|
|
|
# é mudado o rotate
|
|
|
|
# Para não ser mudado o rotate remova
|
|
|
|
# o cometário abaixo ou mude a string nos arquivo para logrotate
|
|
|
|
# arquivos na pasta /hdaux/utilitarios/scripts/logrotate.d
|
|
|
|
# auto_logrotate_licenca_PABX
|
|
|
|
|
|
|
|
grep -l "# auto_logrotate_licenca_PABX" /hdaux/utilitarios/scripts/logrotate.d/* |xargs sed -i "s/ rotate \+[0-9]\+.*/ rotate $1/g"
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# apenas se não existir no banco ou no arquivo (/etc/temporizador_de_dados.config)
|
|
|
|
function get_default_days(){
|
|
|
|
# 1048576M = 1G
|
|
|
|
|
|
|
|
size_hd=$(df -B 1048576K / |awk 'NR==2 {print $2}')
|
|
|
|
|
|
|
|
[[ -z size_hd ]] && exit
|
|
|
|
|
|
|
|
if [[ 255 > $size_hd ]]; then
|
|
|
|
echo 90 # dias
|
|
|
|
|
|
|
|
elif [[ 505 > $size_hd ]];then
|
|
|
|
echo 186 # dias
|
|
|
|
|
|
|
|
elif [[ 755 > $size_hd ]];then
|
|
|
|
echo 365 # dias
|
|
|
|
|
|
|
|
else
|
|
|
|
echo 730 #dias
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# Obter o número de dias do /etc/temporizador_de_dados.config
|
|
|
|
function get_data_txt (){
|
|
|
|
|
|
|
|
if [[ -f "$caminho_dados_txt" ]];then
|
|
|
|
days=$( cat "$caminho_dados_txt" | awk -F = '/dias=[0-9]+$/ {print $2}' )
|
|
|
|
|
|
|
|
if [[ -z $days || ! "$days" =~ ^[0-9][0-9]+$ || "$days" -lt 30 ]];then
|
|
|
|
days="$( get_default_days )"
|
|
|
|
fi
|
|
|
|
|
|
|
|
else
|
|
|
|
days="$( get_default_days )"
|
|
|
|
set_data_txt "$days"
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo "$days"
|
|
|
|
}
|
|
|
|
|
|
|
|
# Definir o números de dias em /etc/temporizador_de_dados.config
|
|
|
|
# Esse arquivo será usado caso não tenha no banco
|
|
|
|
function set_data_txt(){
|
|
|
|
|
|
|
|
[[ ! -f "$caminho_dados_txt" ]] && >"$caminho_dados_txt"
|
|
|
|
|
|
|
|
# argumentos dias devem ser acima de
|
|
|
|
# 29 dias para ser válidos
|
|
|
|
[[ 29 -gt $1 ]] && return ;
|
|
|
|
|
|
|
|
[[ -z $(grep -E "^dias=" "$caminho_dados_txt") ]] &&
|
|
|
|
echo "dias=$1" >> "$caminho_dados_txt" ||
|
|
|
|
sed -i "s/^dias=.*/dias=$1/g" "$caminho_dados_txt"
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function get_data_days(){
|
|
|
|
return_query=$(PGPASSWORD=$PASSWORD_DB \
|
|
|
|
psql -q -h "$HOST_DB" -U $USER_DB -d $BASE_DB -c "$query_keep_data_days")
|
|
|
|
|
|
|
|
# erro no sql retorna dias NULL
|
|
|
|
errno=$?
|
|
|
|
[[ $errno -ne 0 ]] && return
|
|
|
|
|
|
|
|
days=$( echo "$return_query" | awk 'NR==3 {print $0}' | xargs )
|
|
|
|
|
|
|
|
# Não será feito nada se o dias forem negativos ou 0
|
|
|
|
# No banco de dados precisa estar positivo para o script continuar
|
|
|
|
if [[ -n $days && $days -lt 1 ]];then
|
|
|
|
set_logrotate 365
|
|
|
|
return
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
if [[ ! "$days" =~ ^[0-9][0-9]+$ || $days -lt 30 ]] ;then
|
|
|
|
# não foi difinido dias no banco de dados
|
|
|
|
days=$(get_data_txt)
|
|
|
|
|
|
|
|
# retorno days vazio por erros ou days vazio por não definido
|
|
|
|
[[ $errno == 0 && $days -gt 30 ]] && insert_prm_log_dias_bd "$days"
|
|
|
|
|
|
|
|
else
|
|
|
|
set_data_txt "$days"
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo "$days"
|
|
|
|
}
|
|
|
|
|
|
|
|
# remover as linhas no banco de dados das tabelas que passaram a quantidades de dias
|
|
|
|
function remove_row_bd(){
|
|
|
|
|
|
|
|
date=$( date -d -"$1 days" +"%Y-%m-%d" )
|
|
|
|
|
|
|
|
for i in `seq 0 $(("${#pbx[@]}" - 1))`; do
|
|
|
|
|
|
|
|
PGPASSWORD=$PASSWORD_DB \
|
|
|
|
psql -q -h "$HOST_DB" -U $USER_DB -d $BASE_DB -c "$(echo "${pbx[$i]} "\'"$date"\') "
|
|
|
|
done
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
days="$(get_data_days)"
|
|
|
|
|
|
|
|
# ultima condição antes de executar
|
|
|
|
# os dias precisam ser
|
|
|
|
# não nulos
|
|
|
|
# números positivos
|
|
|
|
# números acima do 29
|
|
|
|
[[ -z "$days" || ! "$days" =~ ^[0-9][0-9]+$ || $days -lt 30 ]] && kill -9 $$
|
|
|
|
set_logrotate "$days"
|
|
|
|
|
|
|
|
remove_audio_wav "$days"
|
|
|
|
|
|
|
|
remove_row_bd "$days"
|
|
|
|
|