#!/usr/bin/env bash _nesto_dir="$(dirname $(readlink -f $0))" #echo "$_nesto_dir/types.sh" source "$_nesto_dir/types.sh" _model="$(dirname $0)/model.awk" echo args: $0 $@ #source easyoptions _DB="$1" # sawk '$name=/dig$/i' # sawk dig # sawk '$num>150' search() { autoload DB=~/dev/nesto/DB # Find if 1st arg is a number case $1 in ''|*[!0-9]*) re=$1 ;; *) re="^$1 " ;; esac columns="$(for col in ${@:2}; do printf "\$$col," | sed 's/%.*,//'; done | sed 's/,$//')" # columns=$(echo ${@:2} | awk 'BEGIN{RS=" ";ORS=",o"}{ print "$"$0 }') echo "(${@:2})" echo "[$columns]" format="$(for col in ${@:2}; do printf "cpurple f$col\" \""; done)" echo "{$format}" echo $($_model $DB)" NR > 1 && /$re/i {printf $format, $columns}" $vmdb awk "$($_model $DB) NR > 1 && tolower(\$0) ~ /$re/ {printf $format\"\\n\", $columns}" cpurple=$c_purple c=$c_ $vmdb #'{printf "%-10s %-30s %-10s\n", cp $1, cs $2, c ct $4 c }' cs=$c_status ct=$c_type cp=$c_purple cg=$c_green gr=$c_white cd=$c_dark c=$c_ } each() { Object arr=$(exp $1) String tpl="$(printf "$2" | sed 's/"/\"/')" # debug arr tpl for i in "${!arr[@]}"; do eval "echo -ne \"$tpl\""; done } #tests=(aze qsd wxc) #each tests ' # $i) $c_cyan${tests[$i]}$c_' c0=$c_light$c_black Map status_icons=([running]=⚫ [stopped]=⚪ [template]="☢️ " ) #[other]="✔️☑️🔘⚪⚫🔴🔵🔺🔻🔸🔹🔶🔷🔳🔲▪️▫️◾◽◼️⬛⬜☢️📻⏰⌛️⏳📡🔋🔌💡💰🔧🔑✉️📩📨📧💌📥📤📦📜📃📄📑📊📈📉📆📅📇📋📁📂📰📓📔📚📖🔖🔗📎📐📏📌📍📝🔍🔎🔏🔐🔒🔓🎭🎨🎬🎤🎧🎼🎹🎷🎺🎸🎻🎲♟🎯🎮🔈🔇🔉🔊🔔🔕📣📢💬💭♠️♣️♥️♦️" ) Map status_colors=([running]=$c_green [stopped]=$c_dark$c_red [template]=$c_yellow ) tester() { # eval "declare -A vm="${1#*=} Map vm=$1 Array domains=${vm[domains]} debug vm domains echo -e "$c0 ┌───┤ ${status_colors[${vm[status]}]}${status_icons[${vm[status]}]}$c0${c_light}VM n°$c_purple${vm[num]}$c0 ├────────────────────┐ │ │ │ VM n°$c_red${vm[num]}$c0 │ Name: $c_green${vm[name]}$c0 │ Status: ${status_colors[${vm[status]}]}${vm[status]}$c0 │ Type: $c_yellow${vm[type]}$c0 │ Domains: $(each domains ' │ $i) $c_cyan${domains[$i]}$c0' ) │ │ └─────────────────────────────────────┘ "$c_ } inter() { Map vm=$1 Array domains=${vm[domains]} debug vm domains whiptail --title "VM n°${vm[num]}" \ --msgbox " │ VM n°$c_red${vm[num]} Name: $c_green${vm[name]} Status: ${vm[status]} Type: ${vm[type]} Domains: $(each domains ' $i) ${domains[$i]}' ) " 16 78 #--menu "Search for 'dig' \nMatched Vm(s)" 16 78 10 aze "" qsd "" wxc "" } compact() { Map vm=$1 Array domains=${vm[domains]} # debug vm domains local c0=${status_colors[${vm[status]}]} echo -e "$c0$c_light${status_colors[${vm[status]}]}${status_icons[${vm[status]}]}$c0$c_purple${vm[num]}$c0 $(printf '%-30s' "${vm[name]}") $c_yellow${vm[type]}"$c_ } _VM() { printf "([num]=$1 [name]=$2 [status]=$3 [type]=$4)" } array2map "(num* name status type)" "(111 dig-docker running KVM)" model=(key* value) array2map "`exp model`" "(active true)" #alias VM='declare -A ' #VM vm_temp= "(111 dig-docker running KVM)" sVM="111 dig-docker running KVM" _VM 111 dig-docker running KVM _VM $sVM Map vm1=`_VM $sVM` exp vm1 echo ho ho ho nesto _db2array() { local sArr="($(awk '$0 !~ /^#!/ {printf "\"%s\" ",$0}' $1))" # debug sArr Array lines=$sArr # debug lines # debug lines[0] # Map cols=${arr[0]} # debug cols # echo "${lines[0]}" Array columns_line=(${lines[0]}) # debug columns_line Array columns_order=() for i in ${!columns_line[@]} do # echo "(${columns_line[$i]})" Object field="(${columns_line[$i]})" # exp field # echo ${!field[@]} columns_order[$i]=${!field[@]} done Map columns="(${lines[0]})" columns[_order]="(${columns_order[@]})" # eval "Map cols=( ${_columns_line[@]} )" # debug columns columns_order Array DB=("`exp columns`") for line in "${lines[@]:1}" do line=$(echo "$line" | sed 's/(/"(/' | sed 's/)/)"/') Object item=$(array2map "${columns[_order]}" "(${line})") # debug item DB+=("$(exp item)") done # debug DB exp DB } render() { _db2array $_nesto_dir/new-test.db Array DB1=$(_db2array $_nesto_dir/new-test.db) debug DB1 for i in ${!DB1[@]} do [[ $i == 0 ]] && continue # Map first=${DB1[$i]} # debug first $1 "${DB1[$i]}" done } create() { fields=($@) echo $0 laaaa #eval `` # echo "#!/home/dig/dev/nesto/nesto" echo "#!/usr/bin/env nestor" for i in ${!fields[@]} do case ${fields[$i]} in \[*\]) printf %s "${fields[$i]}= " ;; \[*) printf %s "${fields[$i]} " ;; [^[]*) printf %s "[${fields[$i]}]= " ;; [^[\]]=*) printf "[%s]=%s " "$(echo ${fields[$i]} | awk -F= '{print $1}')" "$(echo ${fields[$i]} | awk -F= '{print $1}')" ;; *) printf %s "[errors]=\"(\\\"Field not well formated: ${fields[$i]}\\\")\" " ;; esac done } show() { if [ -n $DB ] then cat $DB fi } add() { Array items=("$@") exp items for arg in "$@" do Object item=$arg #{items[$i]} Array aItem=() exp item for col in "${columns[@]}" do local val="${item[$col]}" [[ -z "$val" ]] && val="-" aItem+="$val " done exp aItem echo "${aItem[@]}" >> $DB done } [[ -t 1 ]] && isPiped="" || isPiped=true hasPipe="" pipe="" if [ -t 0 ]; then echo running interactivelly else hasPipe=true read -d \0 pipe fi debug isPiped hasPipe pipe Array args=() for arg in "$@" do args+=("$arg") done debug args #Array args=($@) DB="" [[ -r $1 ]] && echo "in db" || echo direct if [ -r $1 ] then DB=$args args=("${args[@]:1}") _columns_line=($(cat $DB | awk 'NR==2{print $0" "}')) Array columns=() for i in ${!_columns_line[@]} do Object field="(${_columns_line[$i]})" # exp field # echo ${!field[@]} columns[$i]=${!field[@]} done eval "Map cols=( ${_columns_line[@]} )" debug columns cols fi debug args echo calling: ${args[0]} ${args[@]:1} ${args[0]} "${args[@]:1}"