diff --git a/testnet/log4j2.properties b/testnet/log4j2.properties new file mode 100644 index 00000000..54f295c1 --- /dev/null +++ b/testnet/log4j2.properties @@ -0,0 +1,73 @@ +rootLogger.level = info +# On Windows, uncomment next line to set dirname: +# property.dirname = ${sys:user.home}\\AppData\\Local\\qortal\\ +# property.filename = ${sys:log4j2.filenameTemplate:-log.txt} + +rootLogger.appenderRef.console.ref = stdout +rootLogger.appenderRef.rolling.ref = FILE + +# Suppress extraneous bitcoinj library output +logger.bitcoinj.name = org.bitcoinj +logger.bitcoinj.level = error + +# Override HSQLDB logging level to "warn" as too much is logged at "info" +logger.hsqldb.name = hsqldb.db +logger.hsqldb.level = warn + +# Support optional, per-session HSQLDB debugging +logger.hsqldbRepository.name = org.qortal.repository.hsqldb +logger.hsqldbRepository.level = debug + +# Suppress extraneous Jersey warning +logger.jerseyInject.name = org.glassfish.jersey.internal.inject.Providers +logger.jerseyInject.level = off + +# Suppress extraneous Jersey EOF 'errors' (actually remote peers disconnecting early) +logger.jerseyEOF.name = org.glassfish.jersey.server.internal +logger.jerseyEOF.level = off + +# Suppress extraneous Jetty entries +# 2019-02-14 11:46:27 INFO ContextHandler:851 - Started o.e.j.s.ServletContextHandler@6949e948{/,null,AVAILABLE} +# 2019-02-14 11:46:27 INFO AbstractConnector:289 - Started ServerConnector@50ad322b{HTTP/1.1,[http/1.1]}{0.0.0.0:9085} +# 2019-02-14 11:46:27 INFO Server:374 - jetty-9.4.11.v20180605; built: 2018-06-05T18:24:03.829Z; git: d5fc0523cfa96bfebfbda19606cad384d772f04c; jvm 1.8.0_181-b13 +# 2019-02-14 11:46:27 INFO Server:411 - Started @2539ms +logger.jetty.name = org.eclipse.jetty +logger.jetty.level = warn +# Even more extraneous Jetty output +# 2019-01-26 02:18:10 WARN ResourceService:718 - java.util.concurrent.TimeoutException: Idle timeout expired: 30000/30000 ms +logger.jettyRS.name = org.eclipse.jetty.server.ResourceService +logger.jettyRS.level = error + +# Suppress extraneous slf4j entries +# 2019-02-14 11:46:27 INFO log:193 - Logging initialized @1636ms to org.eclipse.jetty.util.log.Slf4jLog +logger.slf4j.name = org.slf4j +logger.slf4j.level = warn + +# Suppress extraneous Reflections entry +# 2019-02-27 10:45:25 WARN Reflections:179 - given scan urls are empty. set urls in the configuration +logger.orgReflections.name = org.reflections.Reflections +logger.orgReflections.level = off +logger.sunReflections.name = sun.reflect.Reflection +logger.sunReflections.level = off + +appender.console.type = Console +appender.console.name = stdout +appender.console.layout.type = PatternLayout +appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n +appender.console.filter.threshold.type = ThresholdFilter +appender.console.filter.threshold.level = error + +appender.rolling.type = RollingFile +appender.rolling.name = FILE +appender.rolling.fileName = qortal.log +appender.rolling.filePattern = qortal.%d{dd-MMM}.log.gz +appender.rolling.layout.type = PatternLayout +appender.rolling.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n +appender.rolling.policy.type = SizeBasedTriggeringPolicy +appender.rolling.policy.size = 10MB +appender.rolling.strategy.type = DefaultRolloverStrategy +appender.rolling.strategy.max = 7 +# Set the immediate flush to true (default) +# appender.rolling.immediateFlush = true +# Set the append to true (default), should not overwrite +# appender.rolling.append=true diff --git a/testnet/start.sh b/testnet/start.sh new file mode 100644 index 00000000..da7da07a --- /dev/null +++ b/testnet/start.sh @@ -0,0 +1,45 @@ +#!/bin/sh + +# Validate Java is installed and the minimum version is available +MIN_JAVA_VER='11' + +if command -v java > /dev/null 2>&1; then + # Example: openjdk version "11.0.6" 2020-01-14 + version=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}' | cut -d'.' -f1,2) + if echo "${version}" "${MIN_JAVA_VER}" | awk '{ if ($2 > 0 && $1 >= $2) exit 0; else exit 1}'; then + echo 'Passed Java version check' + else + echo "Please upgrade your Java to version ${MIN_JAVA_VER} or greater" + exit 1 + fi +else + echo "Java is not available, please install Java ${MIN_JAVA_VER} or greater" + exit 1 +fi + +# No qortal.jar but we have a Maven built one? +# Be helpful and copy across to correct location +if [ ! -e qortal.jar -a -f target/qortal*.jar ]; then + echo "Copying Maven-built Qortal JAR to correct pathname" + cp target/qortal*.jar qortal.jar +fi + +# Limits Java JVM stack size and maximum heap usage. +# Comment out for bigger systems, e.g. non-routers +# or when API documentation is enabled +JVM_MEMORY_ARGS="-Xss256m -XX:+UseSerialGC" + +# Although java.net.preferIPv4Stack is supposed to be false +# by default in Java 11, on some platforms (e.g. FreeBSD 12), +# it is overridden to be true by default. Hence we explicitly +# set it to false to obtain desired behaviour. +nohup nice -n 20 java \ + -Djava.net.preferIPv4Stack=false \ + ${JVM_MEMORY_ARGS} \ + -jar qortal.jar settings-test.json \ + settings-test.json \ + 1>run.log 2>&1 & + +# Save backgrounded process's PID +echo $! > run.pid +echo qortal running as pid $! diff --git a/testnet/stop.sh b/testnet/stop.sh new file mode 100644 index 00000000..d79a51db --- /dev/null +++ b/testnet/stop.sh @@ -0,0 +1,80 @@ +#!/usr/bin/env bash + +# Check for color support +if [ -t 1 ]; then + ncolors=$( tput colors ) + if [ -n "${ncolors}" -a "${ncolors}" -ge 8 ]; then + if normal="$( tput sgr0 )"; then + # use terminfo names + red="$( tput setaf 1 )" + green="$( tput setaf 2)" + else + # use termcap names for FreeBSD compat + normal="$( tput me )" + red="$( tput AF 1 )" + green="$( tput AF 2)" + fi + fi +fi + +# Track the pid if we can find it +read pid 2>/dev/null /dev/null 2>&1; then + success=1 + fi +fi + +# Try to kill process with SIGTERM +if [ "$success" -ne 1 ] && [ -n "$pid" ]; then + echo "Stopping Qortal process $pid..." + if kill -15 "${pid}"; then + success=1 + fi +fi + +# Warn and exit if still no success +if [ "$success" -ne 1 ]; then + if [ -n "$pid" ]; then + echo "${red}Stop command failed - not running with process id ${pid}?${normal}" + else + echo "${red}Stop command failed - not running?${normal}" + fi + exit 1 +fi + +if [ "$success" -eq 1 ]; then + echo "Qortal node should be shutting down" + if [ "${is_pid_valid}" -eq 0 ]; then + echo -n "Monitoring for Qortal node to end" + while s=`ps -p $pid -o stat=` && [[ "$s" && "$s" != 'Z' ]]; do + echo -n . + sleep 1 + done + echo + echo "${green}Qortal ended gracefully${normal}" + rm -f run.pid + fi +fi + +exit 0