#!/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"