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