-
Notifications
You must be signed in to change notification settings - Fork 544
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
224 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,168 @@ | ||
#!/usr/bin/env bash | ||
|
||
# script_name="${0}" | ||
script_dirname="$( dirname -- "${0}" )" | ||
# script_basename="$( basename -- "${0}" )" | ||
|
||
set -eo pipefail | ||
|
||
wait_http_okay() { | ||
local timeout=10 | ||
for var in "${@}" | ||
do | ||
eval "local ${var}" | ||
done | ||
1>&2 echo "INFO: checking if ${url} (${label}) is okay" | ||
for ((i=1;i<=${timeout};i++)) | ||
do | ||
curl --silent "${url}" --fail -o /dev/null && { | ||
1>&2 echo "INFO: url ${url} (${label}) is okay" | ||
return 0 | ||
} | ||
kill -0 "${pid}" || { | ||
1>&2 echo "ERROR: pid ${pid} (${label}) not running anymore ..." | ||
return 1 | ||
} | ||
1>&2 echo "INFO: url ${url} (${label}) not okay, waiting ..." | ||
sleep 2 | ||
done | ||
1>&2 echo "ERROR: failed to load ${url} (${label})" | ||
return 1 | ||
} | ||
|
||
assert_pid_running() { | ||
for var in "${@}" | ||
do | ||
eval "local ${var}" | ||
done | ||
|
||
kill -0 "${pid}" || { | ||
1>&2 echo "ERROR: pid ${pid} (${label}) not running anymore ..." | ||
return 1 | ||
} | ||
1>&2 echo "INFO: pid ${pid} (${label}) running" | ||
return 0 | ||
} | ||
|
||
kill_and_wait_pid() { | ||
local timeout=10 | ||
for var in "${@}" | ||
do | ||
eval "local ${var}" | ||
done | ||
1>&2 echo "INFO: killing pid ${pid} (${label})" | ||
kill "${pid}" | ||
for ((i=1;i<=${timeout};i++)) | ||
do | ||
kill -0 "${pid}" 2>/dev/null 1>&2 || { | ||
1>&2 echo "INFO: pid ${pid} (${label}) is dead " | ||
return 0 | ||
} | ||
1>&2 echo "INFO: pid ${pid} (${label}) is not dead, waiting ..." | ||
sleep 2 | ||
done | ||
1>&2 echo "ERROR: wait timeout for pid ${pid} (${label})" | ||
return 1 | ||
} | ||
|
||
fuseki_pid_normal="" | ||
fuseki_pid_tdb="" | ||
|
||
exit_handler() { | ||
1>&2 declare -p fuseki_pid_normal fuseki_pid_tdb | ||
if [ -n "${fuseki_pid_normal}" ] | ||
then | ||
kill_and_wait_pid "pid=${fuseki_pid_normal}" "label=fuseki-normal" || : | ||
fi | ||
if [ -n "${fuseki_pid_tdb}" ] | ||
then | ||
kill_and_wait_pid "pid=${fuseki_pid_tdb}" "label=fuseki-tdb" || : | ||
fi | ||
|
||
if [ -n "${FUSEKI_DUMP_LOGS}" ] || [ "${xrc}" != "0" ] | ||
then | ||
1>&2 echo "dumping ${fuseki_base_tdb}/out.log" | ||
cat "${fuseki_base_tdb}/out.log" || : | ||
1>&2 echo "dumping ${fuseki_base_normal}/out.log" | ||
cat "${fuseki_base_normal}/out.log" || : | ||
fi | ||
} | ||
|
||
|
||
main() { | ||
: "${LOCALSTATEDIR:=${script_dirname}/var}" | ||
# : ${FUSEKI_PORT:=3030} | ||
: "${XDG_CACHE_HOME:=${HOME}/.cache}" | ||
|
||
local jena_uri="https://archive.apache.org/dist/jena/binaries/apache-jena-fuseki-3.17.0.tar.gz" | ||
local jena_sha512="2b92f3304743da335f648c1be7b5d7c3a94725ed0a9b5123362c89a50986690114dcef0813e328126b14240f321f740b608cc353417e485c9235476f059bd380" | ||
local jena_archive_basename | ||
jena_archive_basename="$(basename "${jena_uri}")" | ||
local jena_archive="${XDG_CACHE_HOME}/${jena_archive_basename}" | ||
local jena_stem="${jena_archive_basename%%.tar.gz}" | ||
|
||
1>&2 declare -p jena_uri jena_archive XDG_CACHE_HOME LOCALSTATEDIR | ||
if ! [ -e "${jena_archive}" ] | ||
then | ||
mkdir -vp "${XDG_CACHE_HOME}" | ||
curl "${jena_uri}" -o "${jena_archive}" | ||
fi | ||
printf "%s %s\n" "${jena_sha512}" "${jena_archive_basename}" > "${jena_archive}.sha512" | ||
(cd "${XDG_CACHE_HOME}" && shasum -c -a512 "${jena_archive_basename}.sha512") || { | ||
echo 1>&2 "ERROR: digest verification failed" | ||
rm -rv "${jena_archive}" "${jena_archive}.sha512" | ||
} | ||
mkdir -vp "${LOCALSTATEDIR}" | ||
tar -zxf "${jena_archive}" -C "${LOCALSTATEDIR}" | ||
|
||
local FUSEKI_HOME=${LOCALSTATEDIR}/${jena_stem} | ||
declare -p FUSEKI_HOME | ||
export FUSEKI_HOME | ||
|
||
fuseki_base_normal="${FUSEKI_HOME}/run-normal" | ||
fuseki_base_tdb="${FUSEKI_HOME}/run-tdb" | ||
local fuseki_pidfile_normal="${fuseki_base_normal}/server.pid" | ||
local fuseki_pidfile_tdb="${fuseki_base_tdb}/server.pid" | ||
|
||
mkdir -vp "${fuseki_base_normal}" "${fuseki_base_tdb}" | ||
local fuseki_port_normal=3030 | ||
local fuseki_port_tdb=3031 | ||
|
||
1>&2 declare -p fuseki_base_normal fuseki_base_tdb fuseki_pidfile_normal fuseki_pidfile_tdb fuseki_port_normal fuseki_port_tdb | ||
|
||
trap exit_handler EXIT | ||
|
||
1>&2 echo "INFO: starting fuseki: normal" | ||
FUSEKI_BASE="${fuseki_base_normal}" bash "${FUSEKI_HOME}/fuseki-server" \ | ||
--port "${fuseki_port_normal}" --debug \ | ||
--update --mem /db &>"${fuseki_base_normal}/out.log" & | ||
fuseki_pid_normal="${!}" | ||
echo "${fuseki_pid_normal}" > "${fuseki_pidfile_normal}" | ||
|
||
1>&2 echo "INFO: starting fuseki: tdb" | ||
FUSEKI_BASE="${fuseki_base_tdb}" bash "${FUSEKI_HOME}/fuseki-server" \ | ||
--port "${fuseki_port_tdb}" --debug \ | ||
--update --memTDB --set tdb:unionDefaultGraph=true /db &>"${fuseki_base_tdb}/out.log" & | ||
fuseki_pid_tdb="${!}" | ||
echo "${fuseki_pid_tdb}" > "${fuseki_pidfile_tdb}" | ||
|
||
declare -p fuseki_pid_tdb fuseki_pid_normal | ||
|
||
wait_http_okay "pid=${fuseki_pid_normal}" "url=http://localhost:${fuseki_port_normal}/" "label=fuseki-normal" | ||
wait_http_okay "pid=${fuseki_pid_tdb}" "url=http://localhost:${fuseki_port_tdb}/" "label=fuseki-tdb" | ||
|
||
assert_pid_running "pid=${fuseki_pid_tdb}" "label=fuseki-tdb" | ||
assert_pid_running "pid=${fuseki_pid_normal}" "label=fuseki-normal" | ||
|
||
local -a args=("${@}") | ||
|
||
1>&2 echo "running: ${args[*]}" | ||
|
||
xrc=0 | ||
"${args[@]}" || { | ||
xrc="${?}" | ||
} | ||
exit "${xrc}" | ||
} | ||
|
||
main "${@}" |