insert_data.sh 6.95 KB
Newer Older
Diego Giovane Pasqualin's avatar
Diego Giovane Pasqualin committed
1 2
#!/bin/bash

3
# This script will call every script needed to insert data.
4 5 6 7 8 9 10
# Parameters are the year and month from the data that will be inserted, and an elasticsearch username and password.
# Also, scripts called by insert_data.sh use a config file, located in every subfolder and called 'config.sh'.
# Those config files have some variables that have to be set:
# - Index: The index prefix to be saved on ElasticSearch.
# - Host: The hostname of the machine runnning ElasticSearch.
# - Filter: An array of n values, that will create n indexes in ElasticSearch, each one filtering data from Portal Transparencia using its corresponding string. Ex: "UNIVERSIDADE FEDERAL DO PARANA"
# - University: An array of n values, with n being the same n as Filter's array. This array should contain the initials from Universities declared in Filter array, in the same order.
11

Diego Giovane Pasqualin's avatar
Diego Giovane Pasqualin committed
12 13 14 15
function usage() {
    echo "Uso: $0 [OPÇÃO] <--inicio YYYY-MM> <--fim YYYY-MM>"
    echo ""
    echo "Conexão com o ElasticSearch"
16
    echo -e "  -E, --sem-elastic\tNão utiliza o ElasticStack para armazenar os dados, implica em --mantem-csv"
Diego Giovane Pasqualin's avatar
Diego Giovane Pasqualin committed
17 18 19 20 21 22
    echo -e "  -u, --usuario\t\tUsuário do ElasticSearch (default: em branco)"
    echo -e "  -s, --senha\t\tSenha do ElasticSearch (default: sem senha)"
    echo -e "  -H, --hostname\tHostname do ElasticSearch (default: localhost)"

    echo ""
    echo "Definição de período de tempo para inserção"
23 24
    echo -e "  -i, --inicio\t\tAno e mês de início dos dados, no formato YYYY-MM (default: current year-month)"
    echo -e "  -f, --fim\t\tAno e mês de fim dos dados, no formato YYYY-MM (default: current year-month)"
Diego Giovane Pasqualin's avatar
Diego Giovane Pasqualin committed
25 26
    echo ""
    echo "Definição das bases a serem inseridas"
27
    echo -e "      --todas-as-bases\tInsere todas as bases (despesas, diarias e servidores)"
Diego Giovane Pasqualin's avatar
Diego Giovane Pasqualin committed
28 29 30 31 32
    echo -e "      --despesas\tInsere dados de despesas gerais das união"
    echo -e "      --diarias\t\tInsere dados de despesas com diárias da união"
    echo -e "      --servidores\tInsere dados de remuneração de servidores"
    echo ""
    echo "Outras opções"
33
    echo -e "      --mantem-csv\tNão remove os arquivos CSV utilizados para inserção no banco"
Diego Giovane Pasqualin's avatar
Diego Giovane Pasqualin committed
34 35 36
    echo ""
}

37 38 39 40 41 42 43 44 45
function echoerr() {
    echo "$@" 1>&2;
}

function echoerr_and_exit() {
    echoerr "$@"
    usage
    exit 1
}
Diego Giovane Pasqualin's avatar
Diego Giovane Pasqualin committed
46 47

function empty_arg_sanity_check() {
48
    local arg_to_check=$1
Diego Giovane Pasqualin's avatar
Diego Giovane Pasqualin committed
49

50 51
    if [[ "$arg_to_check" = -* || "$arg_to_check" = "" ]]; then
        return 1
Diego Giovane Pasqualin's avatar
Diego Giovane Pasqualin committed
52
    else
53 54
        echo $arg_to_check
        return 0
Diego Giovane Pasqualin's avatar
Diego Giovane Pasqualin committed
55 56 57 58 59
    fi
}

function date_sanity_check() {
    local date_to_check=$1
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
    local current_epoch=$(date -d "$(date +%Y-%m-01)" "+%s")
    local given_year=
    local given_month=
    local given_epoch=

    if empty_arg_sanity_check "$date_to_check" | egrep -q '^[0-9]{4}-[0-9]{2}$'; then
      # check if user is trying to insert data from the future
      given_year=$(cut -d- -f1 <<< "$date_to_check")
      given_month=$(cut -d- -f2 <<< "$date_to_check")
      given_epoch=$(date -d "${given_year}-${given_month}-01" "+%s")
      if test $given_epoch -gt $current_epoch; then
          return 2
      fi

      echo $date_to_check
      return 0
Diego Giovane Pasqualin's avatar
Diego Giovane Pasqualin committed
76
    else
77
        return 1
Diego Giovane Pasqualin's avatar
Diego Giovane Pasqualin committed
78 79 80 81
    fi
}

PROGRAM_NAME="${0##*/}"
82
ARG_PARSE=$(getopt -o hu:s:i:f:E --long help,todas-as-bases,despesas,diarias,servidores,inicio,fim,usuario,senha,hostname,sem-elastic,mantem-csv -n $PROGRAM_NAME -- "$@")
Diego Giovane Pasqualin's avatar
Diego Giovane Pasqualin committed
83 84 85 86

if [[ $? -ne 0 ]]; then
    echo "Error while reading command line arguments, exiting."
    exit 1
87 88
fi

89
KEEP_CSV=false
Diego Giovane Pasqualin's avatar
Diego Giovane Pasqualin committed
90 91 92 93 94

DATA_ALL=false
DATA_EXPENSES=false
DATA_TRAVEL_EXPENSES=false
DATA_WORKERS=false
95 96
DATA_START=
DATA_FINISH=
Diego Giovane Pasqualin's avatar
Diego Giovane Pasqualin committed
97 98

ELASTICSTACK=true
99
ELASTIC_USERNAME=
Diego Giovane Pasqualin's avatar
Diego Giovane Pasqualin committed
100 101 102 103
ELASTIC_PASSWORD=
ELASTIC_HOSTNAME="localhost"

while true; do
104
  #  echo "S1='$1' S2='$2'"
Diego Giovane Pasqualin's avatar
Diego Giovane Pasqualin committed
105
    case "$1" in
106 107 108 109
        -E | --sem-elastic )
            ELASTICSTACK=false
            KEEP_CSV=true
            shift ;;
Diego Giovane Pasqualin's avatar
Diego Giovane Pasqualin committed
110 111 112
        --despesas ) DATA_EXPENSES=true; shift ;;
        --diarias ) DATA_TRAVEL_EXPENSES=true ; shift ;;
        --servidores ) DATA_WORKERS=true ; shift ;;
113
        --todas-as-bases )
114 115 116
            DATA_ALL=true
            shift ;;
        --mantem-csv ) KEEP_CSV=true ; shift ;;
Diego Giovane Pasqualin's avatar
Diego Giovane Pasqualin committed
117
        -s | --senha )
118 119 120 121
            ELASTIC_PASSWORD=$(empty_arg_sanity_check "$2")
            if test -z "$ELASTIC_PASSWORD"; then
                echoerr_and_exit "Você não forneceu o valor para '$1'"
            fi
Diego Giovane Pasqualin's avatar
Diego Giovane Pasqualin committed
122 123
            shift 2 ;;
        -H | --hostname )
124 125 126 127
            ELASTIC_HOSTNAME=$(empty_arg_sanity_check "$2")
            if test -z "$ELASTIC_HOSTNAME"; then
                echoerr_and_exit "Você não forneceu o valor para '$1'"
            fi
Diego Giovane Pasqualin's avatar
Diego Giovane Pasqualin committed
128 129
            shift 2 ;;
        -u | --usuario )
130 131 132 133
            ELASTIC_USERNAME=$(empty_arg_sanity_check "$2")
            if test -z "$ELASTIC_USERNAME"; then
                echoerr_and_exit "Você não forneceu o valor para '$1'"
            fi
Diego Giovane Pasqualin's avatar
Diego Giovane Pasqualin committed
134 135
            shift 2 ;;
        -i | --inicio )
136 137 138 139
            DATA_START=$(date_sanity_check "$2")
            if test -z "$DATA_START"; then
                echoerr_and_exit "Data inválida em '$1': '$2'"
            fi
Diego Giovane Pasqualin's avatar
Diego Giovane Pasqualin committed
140 141 142
            shift 2 ;;
        -f | --fim )
            DATA_FINISH=$(date_sanity_check "$2" "--fim")
143 144 145 146
            if test -z "$DATA_FINISH"; then
                echoerr_and_exit "Data inválida em '$1': '$2'"
            fi
            shift 2 ;;
Diego Giovane Pasqualin's avatar
Diego Giovane Pasqualin committed
147 148
        -h | --help )
            usage
149
            exit 0 ;;
Diego Giovane Pasqualin's avatar
Diego Giovane Pasqualin committed
150 151 152 153 154 155 156 157 158
        -- )
            shift
            break ;;
        * )
            break
            ;;
    esac
done

159 160 161
#
# Some more arguments sanity check
#
Diego Giovane Pasqualin's avatar
Diego Giovane Pasqualin committed
162

163 164 165
# start can't be null
if test -z "$DATA_START"; then
    echoerr_and_exit "--inicio não pode ser nulo"
166 167
fi

168 169 170
# if finish is not provided, the user is adding only one month of data
if test -z "$DATA_FINISH"; then
    DATA_FINISH=$DATA_START
171 172
fi

173 174 175 176
start_year=$(cut -d- -f1 <<< "$DATA_START")
start_month=$(cut -d- -f2 <<< "$DATA_START")
finish_year=$(cut -d- -f1 <<< "$DATA_FINISH")
finish_month=$(cut -d- -f2 <<< "$DATA_FINISH")
177

178 179 180 181 182 183 184
for year in $(seq $start_year $finish_year); do
    # choose last month to consider in this year
    if test $year -eq $finish_year; then
        to_month=$finish_month
    else
        to_month="12"
    fi
185

186 187 188 189 190 191
    # find month to start from
    if test $year -eq $start_year; then
        from_month=$start_month
    else
        from_month="01"
    fi
192

193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214
    # insert data for each month
    for month in $(seq -w $from_month $to_month); do

        if test "$DATA_ALL" -o "$DATA_EXPENSES"; then
          echo "Inserting Expenses from ${year}-${month}..."
          (cd expenses && ./insert_expenses.sh $year $month $ELASTIC_USERNAME $ELASTIC_PASSWORD)
        fi

        if test "$DATA_ALL" -o "$DATA_TRAVEL_EXPENSES"; then
          echo "Inserting Travel Allowances from ${year}-${month}..."
          (cd travel_allowances && ./insert_travel_allowances.sh $year $month $ELASTIC_USERNAME $ELASTIC_PASSWORD)
        fi

        if test "$DATA_ALL" -o "$DATA_WORKERS"; then
          echo "Inserting Workers from ${year}-${month}..."
          (cd workers && ./insert_register_payment.sh $year $month $ELASTIC_USERNAME $ELASTIC_PASSWORD)
        fi

    done
done

exit 0