ilawn-hark: Parallelization using xargs(1). - gopher-lawn - The gopher lawn gopher directory project. Err bitreich.org 70
hgit clone git://bitreich.org/gopher-lawn/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/gopher-lawn/ URL:git://bitreich.org/gopher-lawn/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/gopher-lawn/ bitreich.org 70
1Log /scm/gopher-lawn/log.gph bitreich.org 70
1Files /scm/gopher-lawn/files.gph bitreich.org 70
1Refs /scm/gopher-lawn/refs.gph bitreich.org 70
1Tags /scm/gopher-lawn/tag bitreich.org 70
i--- Err bitreich.org 70
1commit e3cc5279072ddbee7f2d58152732c759a9ede582 /scm/gopher-lawn/commit/e3cc5279072ddbee7f2d58152732c759a9ede582.gph bitreich.org 70
1parent b9a49018389fa0126149e3cbef3ecdef4defe6ef /scm/gopher-lawn/commit/b9a49018389fa0126149e3cbef3ecdef4defe6ef.gph bitreich.org 70
hAuthor: Julian Schweinsberg <pazz0@0xfa.de> URL:mailto:pazz0@0xfa.de bitreich.org 70
iDate: Tue, 19 Dec 2023 20:25:02 +0100 Err bitreich.org 70
i Err bitreich.org 70
ilawn-hark: Parallelization using xargs(1). Err bitreich.org 70
i Err bitreich.org 70
iSigned-off-by: Christoph Lohmann <20h@r-36.net> Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M lawn-hark/lawn-hark.sh | 73 +++++++++++++++++-------------- Err bitreich.org 70
i Err bitreich.org 70
i1 file changed, 41 insertions(+), 32 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/lawn-hark/lawn-hark.sh b/lawn-hark/lawn-hark.sh /scm/gopher-lawn/file/lawn-hark/lawn-hark.sh.gph bitreich.org 70
i@@ -5,6 +5,7 @@ Err bitreich.org 70
i Err bitreich.org 70
i errorthreshold=3 Err bitreich.org 70
i timeout=15 Err bitreich.org 70
i+maxworkers=8 Err bitreich.org 70
i onionsocksproxy="127.0.0.1:9050" Err bitreich.org 70
i Err bitreich.org 70
i function tcpdial() { Err bitreich.org 70
i@@ -95,26 +96,14 @@ function checkraw() { Err bitreich.org 70
i return 0 Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i-checktime="$(date +%s)" Err bitreich.org 70
i-statedir="$1" Err bitreich.org 70
i+program="$(readlink -f "$0")" Err bitreich.org 70
i Err bitreich.org 70
i-if [ -z "${statedir}" ]; Err bitreich.org 70
i+if [ "${LAWNHARK_WORKER}" = "1" ]; Err bitreich.org 70
i then Err bitreich.org 70
i- printf "You need to specify a state dir.\n" >&2 Err bitreich.org 70
i- exit 1 Err bitreich.org 70
i-fi Err bitreich.org 70
i- Err bitreich.org 70
i-mkdir -p "${statedir}" Err bitreich.org 70
i-if [ ! -d "${statedir}" ]; Err bitreich.org 70
i-then Err bitreich.org 70
i- printf "%s is not a directory! Aborting.\n" "${statedir}" >&2 Err bitreich.org 70
i- exit 1 Err bitreich.org 70
i-fi Err bitreich.org 70
i+ statedir="$1" Err bitreich.org 70
i+ checktime="$2" Err bitreich.org 70
i+ f="$3" Err bitreich.org 70
i Err bitreich.org 70
i-shift Err bitreich.org 70
i- Err bitreich.org 70
i-for f; Err bitreich.org 70
i-do Err bitreich.org 70
i type="" Err bitreich.org 70
i selector="" Err bitreich.org 70
i host="" Err bitreich.org 70
i@@ -145,12 +134,10 @@ do Err bitreich.org 70
i || [ -z "${host}" ] \ Err bitreich.org 70
i || [ -z "${port}" ]; Err bitreich.org 70
i then Err bitreich.org 70
i- printf "ERROR\t%s\tInvalid entry!\n" "${f}" >&2 Err bitreich.org 70
i- continue Err bitreich.org 70
i+ flock -x "${program}" printf "ERROR\t%s\tInvalid entry!\n" "${f}" >&2 Err bitreich.org 70
i+ exit Err bitreich.org 70
i fi Err bitreich.org 70
i Err bitreich.org 70
i- #printf "DEBUG\t%s\tchecking\t%s\t%s\t%s\t%s\n" "${f}" "${type}" "${selector}" "${host}" "${port}" Err bitreich.org 70
i- Err bitreich.org 70
i case "${type}" in Err bitreich.org 70
i cso ) Err bitreich.org 70
i error="$(checkcso "${host}" "${port}")" Err bitreich.org 70
i@@ -182,8 +169,8 @@ do Err bitreich.org 70
i error="$(checkraw "${sshhost}" "${sshport}")" Err bitreich.org 70
i ;; Err bitreich.org 70
i * ) Err bitreich.org 70
i- printf "TODO\t%s\tCan't handle %s\n" "${f}" "${url}" Err bitreich.org 70
i- continue Err bitreich.org 70
i+ flock -x "${program}" printf "TODO\t%s\tCan't handle %s\n" "${f}" "${url}" >&2 Err bitreich.org 70
i+ exit Err bitreich.org 70
i ;; Err bitreich.org 70
i esac Err bitreich.org 70
i else Err bitreich.org 70
i@@ -215,20 +202,42 @@ do Err bitreich.org 70
i Err bitreich.org 70
i if [ ${errorcount} -ge ${errorthreshold} ]; Err bitreich.org 70
i then Err bitreich.org 70
i- printf "ERROR\t%s\t%s\n" "${f}" "${error}" >&2 Err bitreich.org 70
i+ flock -x "${program}" printf "ERROR\t%s\t%s\n" "${f}" "${error}" >&2 Err bitreich.org 70
i fi Err bitreich.org 70
i Err bitreich.org 70
i printf "%s\t%s\n" "${checktime}" "${errorcount}" > "${statefile}" Err bitreich.org 70
i-done Err bitreich.org 70
i+else Err bitreich.org 70
i+ checktime="$(date +%s)" Err bitreich.org 70
i+ statedir="$1" Err bitreich.org 70
i Err bitreich.org 70
i-# garbage collection Err bitreich.org 70
i-find "${statedir}" -type f | while read -r f; Err bitreich.org 70
i-do Err bitreich.org 70
i- IFS=" " read -r lastcheck errorcount < "${f}" Err bitreich.org 70
i+ if [ -z "${statedir}" ]; Err bitreich.org 70
i+ then Err bitreich.org 70
i+ printf "You need to specify a state dir.\n" >&2 Err bitreich.org 70
i+ exit 1 Err bitreich.org 70
i+ fi Err bitreich.org 70
i Err bitreich.org 70
i- if [ ${lastcheck} -ne ${checktime} ]; Err bitreich.org 70
i+ mkdir -p "${statedir}" Err bitreich.org 70
i+ if [ ! -d "${statedir}" ]; Err bitreich.org 70
i then Err bitreich.org 70
i- rm -f "${f}" Err bitreich.org 70
i+ printf "%s is not a directory! Aborting.\n" "${statedir}" >&2 Err bitreich.org 70
i+ exit 1 Err bitreich.org 70
i fi Err bitreich.org 70
i-done Err bitreich.org 70
i Err bitreich.org 70
i+ shift Err bitreich.org 70
i+ Err bitreich.org 70
i+ for f; Err bitreich.org 70
i+ do Err bitreich.org 70
i+ printf "%s\0" "${f}" Err bitreich.org 70
i+ done | LAWNHARK_WORKER=1 xargs -r -0 -P "${maxworkers}" -L1 "${program}" "${statedir}" "${checktime}" Err bitreich.org 70
i+ Err bitreich.org 70
i+ # garbage collection Err bitreich.org 70
i+ find "${statedir}" -type f | while read -r f; Err bitreich.org 70
i+ do Err bitreich.org 70
i+ IFS=" " read -r lastcheck errorcount < "${f}" Err bitreich.org 70
i+ Err bitreich.org 70
i+ if [ ${lastcheck} -ne ${checktime} ]; Err bitreich.org 70
i+ then Err bitreich.org 70
i+ rm -f "${f}" Err bitreich.org 70
i+ fi Err bitreich.org 70
i+ done Err bitreich.org 70
i+fi Err bitreich.org 70
.
Response:
text/plain