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 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 .