#!/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 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
function remove_audio_wav( ) {
find /var/spool/asterisk/monitor/ -type f -mtime +$1 -iname *.WAV -exec rm -rf { } \;
}
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 "
}
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
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
}
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 ] ] ; then
days = " $( get_default_days ) "
fi
else
days = " $( get_default_days ) "
set_data_txt " $days "
fi
echo " $days "
}
function set_data_txt( ) {
[ [ ! -f " $caminho_dados_txt " ] ] && >" $caminho_dados_txt "
[ [ -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 " )
errno = $?
days = $( echo " $return_query " | awk 'NR==3 {print $0}' | xargs )
if [ [ ! $days ] ] ; 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 ] ] && insert_prm_log_dias_bd " $days "
else
set_data_txt " $days "
fi
echo " $days "
}
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) "
[ [ ! " $days " ] ] && kill -9 $$
set_logrotate " $days "
remove_audio_wav " $days "
remove_row_bd " $days "