Merge branch 'dev_users_info'

This commit is contained in:
creme 2020-02-26 14:18:12 +01:00
commit 61ab1d6b3f
Signed by: creme
GPG Key ID: C147C3B7FBDF08D0
1 changed files with 65 additions and 40 deletions

View File

@ -19,6 +19,47 @@ TMP_JSON='/tmp/users_info.json_tmp'
clear_lastline() { sed -i '$ s/,$//' "$TMP_JSON" ; } clear_lastline() { sed -i '$ s/,$//' "$TMP_JSON" ; }
progress_userarray() {
for field in "${!line_to_set[@]}"; do
field_name="${field//,*/}"
field_count="${field//*,/}"
if [[ ":${field_is_array[*]}:" =~ $field_name ]] && ! [[ ":${field_finished[*]}:" =~ $field_name ]]; then
# begin of user def. array
if [ -z "$field_in_progress" ] && [ "$field_count" -eq 0 ]; then
fin_count='0'
field_in_progress="$field_name"
cat << EOM >> "$TMP_JSON"
"$field_name": [
"${line_to_set[$field]}",
EOM
elif [ "$field_in_progress" = "$field_name" ] && [ "$field_count" = "$(( $fin_count + 1 ))" ]; then
# continue user def. array
fin_count="$(( $fin_count + 1 ))"
cat << EOM >> "$TMP_JSON"
"${line_to_set[$field]}",
EOM
if [ "$field_count" = "${hc_field_entry[$field_name]}" ]; then
# end of user def. array
# remove trailing ',' on last user entry
clear_lastline
cat << EOM >> "$TMP_JSON"
],
EOM
unset field_in_progress
field_finished+=( "$field_name" )
else
progress_userarray
fi
elif ! [ "$field_in_progress" = "$field_name" ] && ! [[ ":${field_queue[*]}:" =~ $field_name ]]; then
field_queue+=( "$field_name" )
fi
fi
done
}
cat << EOM > "$TMP_JSON" cat << EOM > "$TMP_JSON"
{ {
"timestamp": "$(date +'%s')", "timestamp": "$(date +'%s')",
@ -116,35 +157,39 @@ EOM
fi fi
# user custom infos from .envs file (max. 10 entrys) # user custom infos from .envs file (max. 10 entrys)
if [ -f "$INFO_FILE" ]; then if [ -f "$INFO_FILE" ]; then
count_entry='0' # use to limit entrys count_entry='0'
count_field_entry='0' # use to separat array line by line
unset field_exists; declare -a field_exists=() # contains field names to limit entrys unset field_exists ; declare -a field_exists=() # contains field names to limit entrys
unset field_is_array; declare -a field_is_array=() # contains array fields to printf correct json entrys unset field_is_array ; declare -a field_is_array=() # contains array fields to printf correct json entrys
unset line_to_set; declare -A line_to_set # contains user info lines unset line_to_set ; declare -A line_to_set # contains user info lines
unset hc_field_entry ; declare -A hc_field_entry # contains highest_count_field_entry
# check 'INFO_FILE' and add entrys to 'line_to_set' array # check 'INFO_FILE' and add entrys to 'line_to_set' array
while read -r LINE ; do while read -r LINE ; do
if [[ -n "$LINE" ]] && ! [[ "$LINE" = '#'* ]] \ if [ -n "$LINE" ] && ! [[ "$LINE" = '#'* ]] \
&& ! [[ "$LINE" = 'desc='* ]] && ! [[ "$LINE" = 'ssh_pubkey='* ]]; then && ! [[ "$LINE" = 'desc='* ]] && ! [[ "$LINE" = 'ssh_pubkey='* ]]; then
user_field="${LINE//=*/}" user_field="${LINE//=*/}"
user_value="${LINE//*=/}" user_value="${LINE//*=/}"
if ! [[ ":${field_exists[*]}:" =~ $user_field ]]; then if ! [[ ":${field_exists[*]}:" =~ $user_field ]]; then
# entry will be a single line # entry will be a single line
count_entry="$(( "$count_entry" + 1 ))"; [ "$count_entry" -le '10' ] || continue count_field_entry='0'
count_entry="$(( "$count_entry" + 1 ))" ; [ "$count_entry" -lt '10' ] || continue
field_exists+=( "$user_field" ) field_exists+=( "$user_field" )
line_to_set["$user_field","$count_field_entry"]+="$user_value" line_to_set["$user_field","$count_field_entry"]+="$user_value"
else else
# entry will be a array # entry will be a array (max. 32 entrys)
if ! [[ ":${field_is_array[*]}:" =~ $user_field ]]; then if ! [[ ":${field_is_array[*]}:" =~ $user_field ]]; then
field_is_array+=( "$user_field" ) field_is_array+=( "$user_field" )
fi fi
count_field_entry="$(( "$count_field_entry" +1 ))" count_field_entry="$(( "$count_field_entry" +1 ))" ; [ "$count_field_entry" -lt '32' ] || continue
hc_field_entry[$user_field]="$count_field_entry"
line_to_set["$user_field","$count_field_entry"]+="$user_value" line_to_set["$user_field","$count_field_entry"]+="$user_value"
fi fi
fi fi
done <<< "$(tac "$INFO_FILE")" # read file from buttom done < "$INFO_FILE"
# add users custom entrys from line_to_set (single lines before arrays) # add users custom entrys from line_to_set (single lines before arrays)
# #
@ -158,40 +203,21 @@ EOM
EOM EOM
fi fi
done done
# #
# array line entrys # array line entrys
field_in_progress='' field_in_progress=''
unset field_queue ; declare -a field_queue=()
unset field_finished ; declare -a field_finished=()
for field in "${!line_to_set[@]}"; do progress_userarray
field_name="${field//,*/}"
field_count="${field//*,/}"
if [[ ":${field_is_array[*]}:" =~ $field_name ]]; then if [ -n "${line_to_set[*]}" ]; then
# begin of user def. array # shellcheck disable=SC2034
if ! [ "$field_in_progress" = "$field_name" ]; then for x in "${!field_queue[@]}"; do
field_in_progress="$field_name" progress_userarray
done
cat << EOM >> "$TMP_JSON" fi
"$field_name": [
"${line_to_set[$field]}",
EOM
else
# continue user def. array
cat << EOM >> "$TMP_JSON"
"${line_to_set[$field]}",
EOM
if [ "$field_count" -eq '0' ]; then
# end of user def. array
# remove trailing ',' on last user entry
unset field_in_progress
clear_lastline
cat << EOM >> "$TMP_JSON"
],
EOM
fi
fi
fi
done
# ssh # ssh
# only print ssh-pubkey if user has enabled # only print ssh-pubkey if user has enabled
@ -213,7 +239,6 @@ EOM
# remove trailing ',' (no ssh-pubkey print out) # remove trailing ',' (no ssh-pubkey print out)
clear_lastline clear_lastline
fi fi
## if line 118
else else
# no "$INFO_FILE" file # no "$INFO_FILE" file
# remove trailing ',' for the last user entry # remove trailing ',' for the last user entry