wip: current users_info.sh

This commit is contained in:
creme 2020-02-25 14:09:47 +01:00
parent b2c4970381
commit 5246529e85
Signed by: creme
GPG Key ID: C147C3B7FBDF08D0
1 changed files with 65 additions and 40 deletions

View File

@ -19,6 +19,50 @@ TMP_JSON='/tmp/users_info.json_tmp'
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" ]; then
field_in_progress="$field_name"
cat << EOM >> "$TMP_JSON"
"$field_name": [
"${line_to_set[$field]}",
EOM
else
if [ "$field_in_progress" != "$field_name" ] && ! [[ ":${field_queue[*]}:" =~ $field_name ]]; then
field_queue+=( "$field_name" )
else
if [ "$field_in_progress" = "$field_name" ]; then
# continue user def. array
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" )
fi
else
if ! [[ ":${field_queue[*]}:" =~ $field_name ]]; then
field_queue+=( "$field_name" )
fi
fi
fi
fi
fi
done
}
cat << EOM > "$TMP_JSON"
{
"timestamp": "$(date +'%s')",
@ -119,21 +163,23 @@ EOM
count_entry='0' # use to limit entrys
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_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 hc_field_entry ; declare -A hc_field_entry # contains highest_count_field_entry
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 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
while read -r LINE ; do
if [[ -n "$LINE" ]] && ! [[ "$LINE" = '#'* ]] \
if [ -n "$LINE" ] && ! [[ "$LINE" = '#'* ]] \
&& ! [[ "$LINE" = 'desc='* ]] && ! [[ "$LINE" = 'ssh_pubkey='* ]]; then
user_field="${LINE//=*/}"
user_value="${LINE//*=/}"
if ! [[ ":${field_exists[*]}:" =~ $user_field ]]; then
# entry will be a single line
count_entry="$(( "$count_entry" + 1 ))"; [ "$count_entry" -le '10' ] || continue
count_entry="$(( "$count_entry" + 1 ))" ; count_field_entry="$(( "$count_field_entry" +1 ))"
#[ "$count_entry" -le '10' ] || continue
field_exists+=( "$user_field" )
line_to_set["$user_field","$count_field_entry"]+="$user_value"
else
@ -141,8 +187,10 @@ EOM
if ! [[ ":${field_is_array[*]}:" =~ $user_field ]]; then
field_is_array+=( "$user_field" )
fi
count_field_entry="$(( "$count_field_entry" +1 ))" ; [ "$count_field_entry" -le '32' ] || continue
hc_field_entry["$user_field"]="$count_field_entry"
count_field_entry="$(( "$count_field_entry" +1 ))"
#[ "$count_field_entry" -le '32' ] || continue
hc_field_entry[$user_field]="$count_field_entry"
line_to_set["$user_field","$count_field_entry"]+="$user_value"
fi
fi
@ -160,43 +208,20 @@ EOM
EOM
fi
done
#
# array line entrys
field_in_progress=''
unset field_queue ; declare -a field_queue=()
unset field_finished ; declare -a field_finished=()
for field in "${!line_to_set[@]}"; do
field_name="${field//,*/}"
field_count="${field//*,/}"
progress_userarray
if [[ ":${field_is_array[*]}:" =~ $field_name ]]; then
# begin of user def. array
if ! [ "$field_in_progress" = "$field_name" ]; then
field_in_progress="$field_name"
cat << EOM >> "$TMP_JSON"
"$field_name": [
"${line_to_set[$field]}",
EOM
else
# continue user def. array
cat << EOM >> "$TMP_JSON"
"${line_to_set[$field]}",
EOM
echo "$field_count - ${hc_field_entry[$field_name]}"
if [ "$field_count" = "${hc_field_entry[$field_name]}" ] || [ "$field_count" = '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
if [[ -n "$field_queue" ]]; then
for x in "${!field_queue[@]}"; do
progress_userarray
done
fi
# ssh
# only print ssh-pubkey if user has enabled