parent
cabb0be7b6
commit
9cd95f12dc
@ -0,0 +1,325 @@ |
||||
#!/bin/sh |
||||
|
||||
VERSION="0.0.1" |
||||
RELEASE="" |
||||
|
||||
set -u |
||||
# set -x |
||||
|
||||
hosts= |
||||
cache_dir=~/.cdist/cache |
||||
|
||||
do_all=1 |
||||
do_global_explorer= |
||||
do_type_explorer= |
||||
do_script_stdout= |
||||
do_script_stderr= |
||||
do_gencode= |
||||
do_code= |
||||
do_messages= |
||||
do_parameter= |
||||
delimiter=':' |
||||
ln= |
||||
filename_prefix=1 |
||||
verbose=0 |
||||
|
||||
myname=${0##*/} |
||||
|
||||
print_version() |
||||
{ |
||||
printf "%s %s %s\n" "${myname}" "${VERSION}" "${RELEASE}" |
||||
} |
||||
|
||||
usage() |
||||
{ |
||||
cat << eof |
||||
${myname}: [options] [host...] |
||||
eof |
||||
|
||||
print_version |
||||
|
||||
cat << eof |
||||
|
||||
Dump data from cache directories. |
||||
|
||||
host |
||||
Dump data for specified hosts. If not specified then all data |
||||
from cache directory is dumped. |
||||
|
||||
Options |
||||
-a dump all |
||||
-C CACHE-DIR use specified CACHE-DIR (default: ~/.cdist/cache) |
||||
-c dump code-* |
||||
-d delimiter used for filename and line number prefix (default: ':') |
||||
-E dump global explorers |
||||
-e dump type explorers |
||||
-F disable filename prefix (enabled by default) |
||||
-f enable filename prefix (default) |
||||
-g dump gencode-* |
||||
-h show this help screen and exit |
||||
-L disable line number prefix (default) |
||||
-l enable line number prefix (disabled by default) |
||||
-m dump messages |
||||
-o dump executions' stdout |
||||
-p dump parameters |
||||
-r dump executions' stderr |
||||
-V show version and exit |
||||
-v increase verbosity |
||||
eof |
||||
} |
||||
|
||||
exit_err() |
||||
{ |
||||
printf "%s\n" "$1" |
||||
exit 1 |
||||
} |
||||
|
||||
# parse options |
||||
while [ "$#" -ge 1 ] |
||||
do |
||||
case "$1" in |
||||
-a) |
||||
do_all=1 |
||||
;; |
||||
-C) |
||||
if [ "$#" -ge 2 ] |
||||
then |
||||
case "$2" in |
||||
-*) |
||||
exit_err "Missing cache directory" |
||||
;; |
||||
*) |
||||
cache_dir="$2" |
||||
shift |
||||
;; |
||||
esac |
||||
else |
||||
exit_err "Missing cache directory" |
||||
fi |
||||
;; |
||||
-c) |
||||
do_code=1 |
||||
do_all= |
||||
;; |
||||
-d) |
||||
if [ "$#" -ge 2 ] |
||||
then |
||||
case "$2" in |
||||
-*) |
||||
exit_err "Missing delimiter" |
||||
;; |
||||
*) |
||||
delimiter="$2" |
||||
shift |
||||
;; |
||||
esac |
||||
else |
||||
exit_err "Missing delimiter" |
||||
fi |
||||
;; |
||||
-E) |
||||
do_global_explorer=1 |
||||
do_all= |
||||
;; |
||||
-e) |
||||
do_type_explorer=1 |
||||
do_all= |
||||
;; |
||||
-F) |
||||
filename_prefix= |
||||
;; |
||||
-f) |
||||
filename_prefix=1 |
||||
;; |
||||
-g) |
||||
do_gencode=1 |
||||
do_all= |
||||
;; |
||||
-h) |
||||
usage |
||||
exit 0 |
||||
;; |
||||
-L) |
||||
ln= |
||||
;; |
||||
-l) |
||||
ln=1 |
||||
;; |
||||
-m) |
||||
do_messages=1 |
||||
do_all= |
||||
;; |
||||
-o) |
||||
do_script_stdout=1 |
||||
do_all= |
||||
;; |
||||
-p) |
||||
do_parameter=1 |
||||
do_all= |
||||
;; |
||||
-r) |
||||
do_script_stderr=1 |
||||
do_all= |
||||
;; |
||||
-V) |
||||
print_version |
||||
exit 0 |
||||
;; |
||||
-v) |
||||
verbose=$((verbose + 1)) |
||||
;; |
||||
*) |
||||
hosts="${hosts} $1" |
||||
break |
||||
;; |
||||
esac |
||||
shift |
||||
done |
||||
|
||||
if [ "${ln}" = "1" ] |
||||
then |
||||
ln="NR \"${delimiter}\"" |
||||
fi |
||||
|
||||
if [ "${filename_prefix}" = "1" ] |
||||
then |
||||
filename_prefix="{}${delimiter}" |
||||
fi |
||||
|
||||
if [ "${do_all}" = "1" ] |
||||
then |
||||
do_global_explorer=1 |
||||
do_type_explorer=1 |
||||
do_script_stdout=1 |
||||
do_script_stderr=1 |
||||
do_gencode=1 |
||||
do_code=1 |
||||
do_messages=1 |
||||
do_parameter=1 |
||||
fi |
||||
|
||||
set -- -size +0 |
||||
set -- "$@" \( |
||||
or= |
||||
|
||||
print_verbose() |
||||
{ |
||||
if [ ${verbose} -ge $1 ] |
||||
then |
||||
printf "%s\n" "$2" |
||||
fi |
||||
} |
||||
|
||||
hor_line() |
||||
{ |
||||
if [ $# -gt 0 ] |
||||
then |
||||
c=$1 |
||||
else |
||||
c='=' |
||||
fi |
||||
printf "%78s\n" "" | tr ' ' "${c}" |
||||
} |
||||
|
||||
if [ "${do_global_explorer}" ] |
||||
then |
||||
print_verbose 2 "Dumping global explorers" |
||||
set -- "$@" ${or} \( \ |
||||
-path "*/explorer/*" -a \ |
||||
! -path "*/conf/*" -a \ |
||||
! -path "*/object/*/explorer/*" \ |
||||
\) |
||||
or="-o" |
||||
fi |
||||
|
||||
if [ "${do_type_explorer}" ] |
||||
then |
||||
print_verbose 2 "Dumping type explorers" |
||||
set -- "$@" ${or} -path "*/object/*/explorer/*" |
||||
or="-o" |
||||
fi |
||||
|
||||
if [ "${do_script_stdout}" ] |
||||
then |
||||
print_verbose 2 "Dumping execution's stdout" |
||||
set -- "$@" ${or} -path "*/stdout/*" |
||||
or="-o" |
||||
fi |
||||
|
||||
if [ "${do_script_stderr}" ] |
||||
then |
||||
print_verbose 2 "Dumping execution's stderr" |
||||
set -- "$@" ${or} -path "*/stderr/*" |
||||
or="-o" |
||||
fi |
||||
|
||||
if [ "${do_gencode}" ] |
||||
then |
||||
print_verbose 2 "Dumping gencode-*" |
||||
set -- "$@" ${or} \( -name "gencode-*" -a ! -path "*/stdout/*" -a ! -path "*/stderr/*" \) |
||||
or="-o" |
||||
fi |
||||
|
||||
if [ "${do_code}" ] |
||||
then |
||||
print_verbose 2 "Dumping code-*" |
||||
set -- "$@" ${or} \( -name "code-*" -a ! -path "*/stdout/*" -a ! -path "*/stderr/*" \) |
||||
or="-o" |
||||
fi |
||||
|
||||
if [ "${do_messages}" ] |
||||
then |
||||
print_verbose 2 "Dumping messages" |
||||
set -- "$@" ${or} -name "messages" |
||||
or="-o" |
||||
fi |
||||
|
||||
if [ "${do_parameter}" ] |
||||
then |
||||
print_verbose 2 "Dumping parameters" |
||||
set -- "$@" ${or} -path "*/parameter/*" |
||||
or="-o" |
||||
fi |
||||
|
||||
set -- "$@" \) |
||||
set -- '.' "$@" -exec awk -v prefix="${filename_prefix}" "{print prefix ${ln} \$0}" {} \; |
||||
|
||||
# printf "+ %s\n" "$*" |
||||
|
||||
print_verbose 2 "Using cache dir: ${cache_dir}" |
||||
|
||||
OLD_PWD=$(pwd) |
||||
cd "${cache_dir}" |
||||
|
||||
# If no host is specified then search all. |
||||
[ -z "${hosts}" ] && hosts="-" |
||||
|
||||
for host in ${hosts} |
||||
do |
||||
[ "${host}" = "-" ] && host= |
||||
# find host cache directory |
||||
host_dir=$(find . -name target_host -exec grep -l "${host}" {} +) |
||||
print_verbose 3 "found host directory files:" |
||||
print_verbose 3 "${host_dir}" |
||||
|
||||
OLD_IFS="${IFS}" |
||||
IFS=" |
||||
" |
||||
|
||||
for d in ${host_dir} |
||||
do |
||||
dir=$(dirname "${d}") |
||||
|
||||
print_verbose 0 "target host: $(cat ${dir}/target_host), host directory: ${dir}" |
||||
hor_line |
||||
|
||||
PREV_PWD=$(pwd) |
||||
cd "${dir}" |
||||
# set -x |
||||
find "$@" |
||||
# set +x |
||||
cd "${PREV_PWD}" |
||||
done |
||||
IFS="${OLD_IFS}" |
||||
done |
||||
cd "${OLD_PWD}" |
Loading…
Reference in new issue