nesto/nesto

277 lines
6.3 KiB
Bash
Executable File

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