mirror of
https://github.com/oceanprotocol/ocean-subgraph.git
synced 2024-12-02 05:57:29 +01:00
112 lines
3.0 KiB
Plaintext
112 lines
3.0 KiB
Plaintext
|
#!/bin/bash
|
||
|
|
||
|
save_coredumps() {
|
||
|
graph_dir=/var/lib/graph
|
||
|
datestamp=$(date +"%Y-%m-%dT%H:%M:%S")
|
||
|
ls /core.* >& /dev/null && have_cores=yes || have_cores=no
|
||
|
if [ -d "$graph_dir" -a "$have_cores" = yes ]
|
||
|
then
|
||
|
core_dir=$graph_dir/cores
|
||
|
mkdir -p $core_dir
|
||
|
exec >> "$core_dir"/messages 2>&1
|
||
|
echo "${HOSTNAME##*-} Saving core dump on ${HOSTNAME} at ${datestamp}"
|
||
|
|
||
|
dst="$core_dir/$datestamp-${HOSTNAME}"
|
||
|
mkdir "$dst"
|
||
|
cp /usr/local/bin/graph-node "$dst"
|
||
|
cp /proc/loadavg "$dst"
|
||
|
[ -f /Dockerfile ] && cp /Dockerfile "$dst"
|
||
|
tar czf "$dst/etc.tgz" /etc/
|
||
|
dmesg -e > "$dst/dmesg"
|
||
|
# Capture environment variables, but filter out passwords
|
||
|
env | sort | sed -r -e 's/^(postgres_pass|ELASTICSEARCH_PASSWORD)=.*$/\1=REDACTED/' > "$dst/env"
|
||
|
|
||
|
for f in /core.*
|
||
|
do
|
||
|
echo "${HOSTNAME##*-} Found core dump $f"
|
||
|
mv "$f" "$dst"
|
||
|
done
|
||
|
echo "${HOSTNAME##*-} Saving done"
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
wait_for_ipfs() {
|
||
|
# Take the IPFS URL in $1 apart and extract host and port. If no explicit
|
||
|
# host is given, use 443 for https, and 80 otherwise
|
||
|
if [[ "$1" =~ ^((https?)://)?([^:/]+)(:([0-9]+))? ]]
|
||
|
then
|
||
|
proto=${BASH_REMATCH[2]:-http}
|
||
|
host=${BASH_REMATCH[3]}
|
||
|
port=${BASH_REMATCH[5]}
|
||
|
if [ -z "$port" ]
|
||
|
then
|
||
|
[ "$proto" = "https" ] && port=443 || port=80
|
||
|
fi
|
||
|
wait_for "$host:$port" -t 120
|
||
|
else
|
||
|
echo "invalid IPFS URL: $1"
|
||
|
exit 1
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
start_query_node() {
|
||
|
export DISABLE_BLOCK_INGESTOR=true
|
||
|
graph-node \
|
||
|
--postgres-url "$postgres_url" \
|
||
|
--ethereum-rpc $ethereum \
|
||
|
--ipfs "$ipfs"
|
||
|
}
|
||
|
|
||
|
start_index_node() {
|
||
|
# Only the index node with the name set in BLOCK_INGESTOR should ingest
|
||
|
# blocks
|
||
|
if [[ ${node_id} != "${BLOCK_INGESTOR}" ]]; then
|
||
|
export DISABLE_BLOCK_INGESTOR=true
|
||
|
fi
|
||
|
|
||
|
graph-node \
|
||
|
--node-id "${node_id//-/_}" \
|
||
|
--postgres-url "$postgres_url" \
|
||
|
--ethereum-rpc $ethereum \
|
||
|
--ipfs "$ipfs"
|
||
|
}
|
||
|
|
||
|
start_combined_node() {
|
||
|
graph-node \
|
||
|
--postgres-url "$postgres_url" \
|
||
|
--ethereum-rpc $ethereum \
|
||
|
--ipfs "$ipfs"
|
||
|
}
|
||
|
|
||
|
postgres_port=${postgres_port:-5432}
|
||
|
postgres_url="postgresql://$postgres_user:$postgres_pass@$postgres_host:$postgres_port/$postgres_db"
|
||
|
|
||
|
wait_for_ipfs "$ipfs"
|
||
|
wait_for "$postgres_host:$postgres_port" -t 120
|
||
|
sleep 5
|
||
|
|
||
|
trap save_coredumps EXIT
|
||
|
|
||
|
export PGAPPNAME="${node_id-$HOSTNAME}"
|
||
|
|
||
|
# Set custom poll interval
|
||
|
if [ -n "$ethereum_polling_interval" ]; then
|
||
|
export ETHEREUM_POLLING_INTERVAL=$ethereum_polling_interval
|
||
|
fi
|
||
|
|
||
|
case "${node_role-combined-node}" in
|
||
|
query-node)
|
||
|
start_query_node
|
||
|
;;
|
||
|
index-node)
|
||
|
start_index_node
|
||
|
;;
|
||
|
combined-node)
|
||
|
start_combined_node
|
||
|
;;
|
||
|
*)
|
||
|
echo "Unknown mode for start-node: $1"
|
||
|
echo "usage: start (combined-node|query-node|index-node)"
|
||
|
exit 1
|
||
|
esac
|