diff --git a/.gitmodules b/.gitmodules index baa7d4d..4abb360 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "bisq"] path = bisq url = https://github.com/bisq-network/bisq.git +[submodule "bisq-gradle"] + path = bisq-gradle + url = https://github.com/bisq-network/bisq-gradle.git diff --git a/bisq-gradle b/bisq-gradle new file mode 160000 index 0000000..2c34836 --- /dev/null +++ b/bisq-gradle @@ -0,0 +1 @@ +Subproject commit 2c348362a25231538b9724fc8c450330dd5b6574 diff --git a/build.gradle b/build.gradle index 812a6f0..72f5471 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ plugins { id 'application' - alias(libs.plugins.osdetector) alias(libs.plugins.springboot) + id 'bisq.post-build' } repositories { @@ -11,7 +11,6 @@ repositories { group 'bisq' -apply plugin: 'com.google.osdetector' apply plugin: "org.springframework.boot" apply plugin: 'io.spring.dependency-management' @@ -67,49 +66,9 @@ dependencies { testImplementation libs.mockito.core } -assemble { - doLast { - // Copy generated bisq-pricenode scripts to project's root dir. - copy { - from layout.buildDirectory.dir('scripts') - into projectDir - } - // Copy zipped distribution libs to project's top-level lib dir. - copy { - def distFolderName = project.name + '-' + version - def distZipName = buildDir.name + '/distributions/' + distFolderName + '.zip' - from(zipTree(distZipName)) { - include "$distFolderName/lib/**" - eachFile { fcd -> - fcd.relativePath = new RelativePath(true, fcd.relativePath.segments.drop(2)) - } - includeEmptyDirs = false - } - into "${projectDir}/lib" - } - // Edit generated shell script so it expects to be executed in - // the project's root dir as opposed to a 'bin' subdirectory. - if (osdetector.os != 'windows') { - // Delete the windows .bat script, not the *nix script alone. - delete fileTree(dir: projectDir, include: 'bisq-*.bat') - // Reset APP_HOME variable in *nix script. - def nixScriptFile = file("${projectDir}/${project.name}") - def oldAppHome = 'APP_HOME=$( cd "${APP_HOME:-./}.." && pwd -P ) || exit' - def newAppHome = 'APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit' - nixScriptFile.text = nixScriptFile.text.replace(oldAppHome, newAppHome) - } else { - // Delete the *nix script, not the windows .bat script. - delete fileTree(dir: projectDir, include: 'bisq-*', exclude: '*.bat') - // Reset APP_HOME variable in windows .bat script. - def windowsScriptFile = file("${projectDir}/${project.name}.bat") - windowsScriptFile.text = windowsScriptFile.text.replace('set APP_HOME=%DIRNAME%..', 'set APP_HOME=%DIRNAME%') - } - } -} - clean.doFirst { // Remove the project root level 'bisq-*' scripts and 'lib' dir generated at the end of the assemble task. - delete fileTree(dir: projectDir, include: 'bisq-*'), 'lib' + delete fileTree(dir: projectDir, include: ['bisq-pricenode', 'bisq-pricenode.bat']), 'lib' } test { diff --git a/gradle/README.md b/gradle/README.md index 6ab7603..6d60097 100644 --- a/gradle/README.md +++ b/gradle/README.md @@ -9,9 +9,9 @@ Visit the [Gradle website](https://gradle.org/releases) and decide the: Adjust the following command with tha arguments above and execute it twice: ```asciidoc -$ ./gradlew wrapper --gradle-version 7.4.2 \ +$ ./gradlew wrapper --gradle-version 7.5 \ --distribution-type bin \ - --gradle-distribution-sha256-sum 29e49b10984e585d8118b7d0bc452f944e386458df27371b49b4ac1dec4b7fda + --gradle-distribution-sha256-sum cb87f222c5585bd46838ad4db78463a5c5f3d336e5e2b98dc7c0c586527351c2 ``` The first execution should automatically update: diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4be6eb5..4388453 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,13 +4,11 @@ # Convention: mark all versions using 'strictly'. This ensures only one version is allowed in the dependency tree, even # when multiple versions are attempted to be brought in as transitive dependencies of other requirements. [versions] - junit-jupiter-lib = { strictly = '5.8.2' } knowm-xchange-lib = { strictly = '5.0.13' } logback-lib = { strictly = '1.2.6' } lombok-lib = { strictly = '1.18.22' } mockito-lib = { strictly = '4.0.0' } -osdetector-plugin-lib = { strictly = '1.7.0' } slf4j-lib = { strictly = '1.7.36' } spring-dependency-management-plugin-lib = { strictly = '1.0.12.RELEASE' } spring-plugin-lib = { strictly = '2.5.6' } @@ -20,7 +18,6 @@ spring-boot-starter-web-lib = { strictly = '2.5.6' } # Note: keys can contain dash (protobuf-java) but the dash is replaced by dot when referenced # in a build.gradle ('implementation libs.protobuf.java') [libraries] - junit-jupiter = { module = 'org.junit.jupiter:junit-jupiter', version.ref = 'junit-jupiter-lib' } knowm-xchange-binance = { module = 'org.knowm.xchange:xchange-binance', version.ref = 'knowm-xchange-lib' } knowm-xchange-bitbay = { module = 'org.knowm.xchange:xchange-bitbay', version.ref = 'knowm-xchange-lib' } @@ -62,6 +59,5 @@ knowm-xchange-libs = [ ] [plugins] -osdetector = { id = 'com.google.osdetector', version.ref = 'osdetector-plugin-lib' } springboot = { id = 'org.springframework.boot', version.ref = 'spring-plugin-lib' } -springdependency = { id = 'io.spring.dependency-management', version.ref = 'spring-dependency-management-plugin-lib' } \ No newline at end of file +springdependency = { id = 'io.spring.dependency-management', version.ref = 'spring-dependency-management-plugin-lib' } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 41d9927..249e583 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 5c51a4a..012d6d9 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=29e49b10984e585d8118b7d0bc452f944e386458df27371b49b4ac1dec4b7fda -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip +distributionSha256Sum=cb87f222c5585bd46838ad4db78463a5c5f3d336e5e2b98dc7c0c586527351c2 +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 1b6c787..a69d9cb 100755 --- a/gradlew +++ b/gradlew @@ -205,6 +205,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/gradlew.bat b/gradlew.bat index ac1b06f..53a6b23 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,7 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,13 +75,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/scripts/bisq-pricenode.service b/scripts/bisq-pricenode.service index 8123387..e1e7ea8 100644 --- a/scripts/bisq-pricenode.service +++ b/scripts/bisq-pricenode.service @@ -5,7 +5,7 @@ After=network.target [Service] SyslogIdentifier=bisq-pricenode EnvironmentFile=/etc/default/bisq-pricenode.env -ExecStart=/bisq/bisq/bisq-pricenode 2 +ExecStart=/bisq/bisq-pricenode/bisq-pricenode 2 ExecStop=/bin/kill -TERM ${MAINPID} Restart=on-failure diff --git a/scripts/install_hsversion_debian.sh b/scripts/install_hsversion_debian.sh index 631a027..a39c635 100755 --- a/scripts/install_hsversion_debian.sh +++ b/scripts/install_hsversion_debian.sh @@ -25,11 +25,11 @@ if ! grep -q "journalreader" /etc/passwd; then fi echo "[*] Installing journal parser script" -curl -s https://raw.githubusercontent.com/bisq-network/bisq/master/pricenode/journalscraper_hsversion.sh > /tmp/journalscraper_hsversion.sh +curl -s https://raw.githubusercontent.com/bisq-network/bisq-pricenode/main/scripts/journalscraper_hsversion.sh > /tmp/journalscraper_hsversion.sh sudo -H -i -u "${ROOT_USER}" install -c -o "${SCRAPER_USER}" -g "${SCRAPER_GROUP}" -m 744 /tmp/journalscraper_hsversion.sh "${SCRAPER_HOME}/scraperscript_hsversion.sh" echo "[*] Installing collectd config" -curl -s https://raw.githubusercontent.com/bisq-network/bisq/master/pricenode/collectd.conf.snippet > /tmp/collectd.conf.snippet +curl -s https://raw.githubusercontent.com/bisq-network/bisq-pricenode/main/scripts/collectd.conf.snippet > /tmp/collectd.conf.snippet sudo -H -i -u "${ROOT_USER}" sed -i -e "s/LoadPlugin exec//" /tmp/collectd.conf.snippet sudo -H -i -u "${ROOT_USER}" /bin/sh -c "cat /tmp/collectd.conf.snippet >> /etc/collectd/collectd.conf" sudo -H -i -u "${ROOT_USER}" sed -i -e "s/__USER_GROUP__/${SCRAPER_USER}:${SCRAPER_GROUP}/" /etc/collectd/collectd.conf diff --git a/scripts/install_networksize_debian.sh b/scripts/install_networksize_debian.sh index bc25b3c..c0e96e2 100755 --- a/scripts/install_networksize_debian.sh +++ b/scripts/install_networksize_debian.sh @@ -25,11 +25,11 @@ sudo -H -i -u "${ROOT_USER}" mkdir -p "${SCRAPER_HOME}" sudo -H -i -u "${ROOT_USER}" chown "${SCRAPER_USER}":"${SCRAPER_GROUP}" ${SCRAPER_HOME} echo "[*] Installing journal parser script" -curl -s https://raw.githubusercontent.com/bisq-network/bisq/master/pricenode/journalscraper.sh > /tmp/journalscraper.sh +curl -s https://raw.githubusercontent.com/bisq-network/bisq-pricenode/main/scripts/journalscraper.sh > /tmp/journalscraper.sh sudo -H -i -u "${ROOT_USER}" install -c -o "${SCRAPER_USER}" -g "${SCRAPER_GROUP}" -m 744 /tmp/journalscraper.sh "${SCRAPER_HOME}/scraperscript.sh" echo "[*] Installing collectd config" -curl -s https://raw.githubusercontent.com/bisq-network/bisq/master/pricenode/collectd.conf.snippet > /tmp/collectd.conf.snippet +curl -s https://raw.githubusercontent.com/bisq-network/bisq-pricenode/main/scripts/collectd.conf.snippet > /tmp/collectd.conf.snippet sudo -H -i -u "${ROOT_USER}" /bin/sh -c "cat /tmp/collectd.conf.snippet >> /etc/collectd/collectd.conf" sudo -H -i -u "${ROOT_USER}" sed -i -e "s/__USER_GROUP__/${SCRAPER_USER}:${SCRAPER_GROUP}/" /etc/collectd/collectd.conf sudo -H -i -u "${ROOT_USER}" sed -i -e "s!__SCRAPERSCRIPT__!${SCRAPER_HOME}/scraperscript.sh!" /etc/collectd/collectd.conf diff --git a/scripts/install_pricenode_debian.sh b/scripts/install_pricenode_debian.sh index 6ee6424..8067cac 100755 --- a/scripts/install_pricenode_debian.sh +++ b/scripts/install_pricenode_debian.sh @@ -1,6 +1,8 @@ #!/usr/bin/env bash set -e +# Usage: `$ sudo ./install_pricenode_debian.sh` + echo "[*] Bisq bisq-pricenode installation script" ##### change as necessary for your system @@ -16,11 +18,11 @@ BISQ_USER=bisq BISQ_GROUP=bisq BISQ_HOME=/bisq -BISQ_REPO_URL=https://github.com/bisq-network/bisq -BISQ_REPO_NAME=bisq -BISQ_REPO_TAG=master -BISQ_LATEST_RELEASE=master -BISQ_TORHS=pricenode +BISQ_REPO_URL=https://github.com/bisq-network/bisq-pricenode +BISQ_REPO_NAME=bisq-pricenode +BISQ_REPO_TAG=main +BISQ_LATEST_RELEASE=main +BISQ_TORHS=bisq-pricenode TOR_PKG="tor" #TOR_USER=debian-tor @@ -58,7 +60,7 @@ sudo -H -i -u "${ROOT_USER}" chown "${BISQ_USER}":"${BISQ_GROUP}" ${BISQ_HOME} echo "[*] Cloning Bisq repo" sudo -H -i -u "${BISQ_USER}" git config --global advice.detachedHead false -sudo -H -i -u "${BISQ_USER}" git clone --branch "${BISQ_REPO_TAG}" "${BISQ_REPO_URL}" "${BISQ_HOME}/${BISQ_REPO_NAME}" +sudo -H -i -u "${BISQ_USER}" git clone --recursive --branch "${BISQ_REPO_TAG}" "${BISQ_REPO_URL}" "${BISQ_HOME}/${BISQ_REPO_NAME}" echo "[*] Installing OpenJDK 11" sudo -H -i -u "${ROOT_USER}" apt-get install -qq -y openjdk-11-jdk @@ -70,11 +72,12 @@ echo "[*] Performing Git LFS pull" sudo -H -i -u "${BISQ_USER}" sh -c "cd ${BISQ_HOME}/${BISQ_REPO_NAME} && git lfs pull" echo "[*] Building Bisq from source" -sudo -H -i -u "${BISQ_USER}" sh -c "cd ${BISQ_HOME}/${BISQ_REPO_NAME} && ./gradlew :pricenode:installDist -x test < /dev/null" # redirect from /dev/null is necessary to workaround gradlew non-interactive shell hanging issue +# Redirect from /dev/null is necessary to workaround gradlew non-interactive shell hanging issue. +sudo -H -i -u "${BISQ_USER}" sh -c "cd ${BISQ_HOME}/${BISQ_REPO_NAME} && ./gradlew build -x test < /dev/null" echo "[*] Installing bisq-pricenode systemd service" -sudo -H -i -u "${ROOT_USER}" install -c -o "${ROOT_USER}" -g "${ROOT_GROUP}" -m 644 "${BISQ_HOME}/${BISQ_REPO_NAME}/pricenode/bisq-pricenode.service" "${SYSTEMD_SERVICE_HOME}" -sudo -H -i -u "${ROOT_USER}" install -c -o "${ROOT_USER}" -g "${ROOT_GROUP}" -m 644 "${BISQ_HOME}/${BISQ_REPO_NAME}/pricenode/bisq-pricenode.env" "${SYSTEMD_ENV_HOME}" +sudo -H -i -u "${ROOT_USER}" install -c -o "${ROOT_USER}" -g "${ROOT_GROUP}" -m 644 "${BISQ_HOME}/${BISQ_REPO_NAME}/scripts/bisq-pricenode.service" "${SYSTEMD_SERVICE_HOME}" +sudo -H -i -u "${ROOT_USER}" install -c -o "${ROOT_USER}" -g "${ROOT_GROUP}" -m 644 "${BISQ_HOME}/${BISQ_REPO_NAME}/scripts/bisq-pricenode.env" "${SYSTEMD_ENV_HOME}" echo "[*] Reloading systemd daemon configuration" sudo -H -i -u "${ROOT_USER}" systemctl daemon-reload diff --git a/settings.gradle b/settings.gradle index 0624d54..2d6cb33 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,3 @@ rootProject.name = 'bisq-pricenode' includeBuild('bisq') +includeBuild('bisq-gradle') diff --git a/src/main/java/bisq/price/spot/ExchangeRate.java b/src/main/java/bisq/price/spot/ExchangeRate.java index 78bc5ff..f911005 100644 --- a/src/main/java/bisq/price/spot/ExchangeRate.java +++ b/src/main/java/bisq/price/spot/ExchangeRate.java @@ -20,7 +20,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; import java.math.BigDecimal; - import java.util.Date; import java.util.Objects; @@ -37,10 +36,10 @@ public class ExchangeRate { public ExchangeRate(String currency, BigDecimal price, Date timestamp, String provider) { this( - currency, - price.doubleValue(), - timestamp.getTime(), - provider + currency, + price.doubleValue(), + timestamp.getTime(), + provider ); } @@ -77,9 +76,9 @@ public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) return false; ExchangeRate exchangeRate = (ExchangeRate) o; return Double.compare(exchangeRate.price, price) == 0 && - timestamp == exchangeRate.timestamp && - Objects.equals(currency, exchangeRate.currency) && - Objects.equals(provider, exchangeRate.provider); + timestamp == exchangeRate.timestamp && + Objects.equals(currency, exchangeRate.currency) && + Objects.equals(provider, exchangeRate.provider); } @Override @@ -90,10 +89,10 @@ public int hashCode() { @Override public String toString() { return "ExchangeRate{" + - "currency='" + currency + '\'' + - ", price=" + price + - ", timestamp=" + timestamp + - ", provider=" + provider + - '}'; + "currency='" + currency + '\'' + + ", price=" + price + + ", timestamp=" + timestamp + + ", provider=" + provider + + '}'; } } diff --git a/src/main/java/bisq/price/spot/ExchangeRateController.java b/src/main/java/bisq/price/spot/ExchangeRateController.java index f4c0176..7e03778 100644 --- a/src/main/java/bisq/price/spot/ExchangeRateController.java +++ b/src/main/java/bisq/price/spot/ExchangeRateController.java @@ -17,11 +17,9 @@ package bisq.price.spot; +import bisq.common.config.Config; import bisq.price.PriceController; import bisq.price.mining.FeeRateService; - -import bisq.common.config.Config; - import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @@ -43,9 +41,7 @@ public Map getAllMarketPrices() { Map retVal = exchangeRateService.getAllMarketPrices(); // add the fee info to results - feeRateService.getFees().forEach((key, value) -> { - retVal.put(translateFieldName(key), value); - }); + feeRateService.getFees().forEach((key, value) -> retVal.put(translateFieldName(key), value)); return retVal; } diff --git a/src/main/java/bisq/price/spot/ExchangeRateProvider.java b/src/main/java/bisq/price/spot/ExchangeRateProvider.java index dae93a2..b483f97 100644 --- a/src/main/java/bisq/price/spot/ExchangeRateProvider.java +++ b/src/main/java/bisq/price/spot/ExchangeRateProvider.java @@ -17,11 +17,9 @@ package bisq.price.spot; -import bisq.price.PriceProvider; - import bisq.core.locale.CurrencyUtil; import bisq.core.locale.TradeCurrency; - +import bisq.price.PriceProvider; import org.knowm.xchange.Exchange; import org.knowm.xchange.ExchangeFactory; import org.knowm.xchange.currency.Currency; @@ -32,21 +30,11 @@ import org.knowm.xchange.service.marketdata.MarketDataService; import org.knowm.xchange.service.marketdata.params.CurrencyPairsParam; import org.knowm.xchange.service.marketdata.params.Params; - import org.springframework.core.env.Environment; -import java.time.Duration; - import java.io.IOException; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.time.Duration; +import java.util.*; import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -64,7 +52,7 @@ public abstract class ExchangeRateProvider extends PriceProvider SUPPORTED_CRYPTO_CURRENCIES = new HashSet<>(); private static Set SUPPORTED_FIAT_CURRENCIES = new HashSet<>(); - private Set providerExclusionList = new HashSet<>(); + private final Set providerExclusionList = new HashSet<>(); private final String name; private final String prefix; private final Environment env; @@ -74,17 +62,17 @@ public ExchangeRateProvider(Environment env, String name, String prefix, Duratio this.name = name; this.prefix = prefix; this.env = env; - List excludedByProvider = - Arrays.asList(env.getProperty("bisq.price.fiatcurrency.excludedByProvider", "") - .toUpperCase().trim().split("\\s*,\\s*")); - for (String s: excludedByProvider) { + String[] excludedByProvider = + env.getProperty("bisq.price.fiatcurrency.excludedByProvider", "") + .toUpperCase().trim().split("\\s*,\\s*"); + for (String s : excludedByProvider) { String[] splits = s.split(":"); if (splits.length == 2 && splits[0].equalsIgnoreCase(name) && CurrencyUtil.isFiatCurrency(splits[1])) { - providerExclusionList.add(splits[1]); - } + providerExclusionList.add(splits[1]); } + } if (providerExclusionList.size() > 0) { - log.info("{} specific exclusion list={}", name, providerExclusionList.toString()); + log.info("{} specific exclusion list={}", name, providerExclusionList); } } @@ -140,8 +128,8 @@ public String getPrefix() { @Override protected void onRefresh() { get().stream() - .filter(e -> "USD".equals(e.getCurrency()) || "LTC".equals(e.getCurrency())) - .forEach(e -> log.info("BTC/{}: {}", e.getCurrency(), e.getPrice())); + .filter(e -> "USD".equals(e.getCurrency()) || "LTC".equals(e.getCurrency())) + .forEach(e -> log.info("BTC/{}: {}", e.getCurrency(), e.getPrice())); } /** @@ -149,12 +137,11 @@ protected void onRefresh() { * polled * @return Exchange rates for Bisq-supported fiat currencies and altcoins in the * specified {@link Exchange} - * * @see CurrencyUtil#getAllSortedFiatCurrencies() * @see CurrencyUtil#getAllSortedCryptoCurrencies() */ protected Set doGet(Class exchangeClass) { - Set result = new HashSet(); + Set result = new HashSet<>(); // Initialize XChange objects Exchange exchange = ExchangeFactory.INSTANCE.createExchange(exchangeClass.getName()); diff --git a/src/main/java/bisq/price/spot/ExchangeRateService.java b/src/main/java/bisq/price/spot/ExchangeRateService.java index e1300b6..d58f695 100644 --- a/src/main/java/bisq/price/spot/ExchangeRateService.java +++ b/src/main/java/bisq/price/spot/ExchangeRateService.java @@ -17,24 +17,12 @@ package bisq.price.spot; -import org.springframework.stereotype.Service; - -import java.math.BigDecimal; - -import java.util.ArrayList; -import java.util.Comparator; -import java.util.Date; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.OptionalDouble; -import java.util.Set; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; -import static java.util.Arrays.asList; +import java.math.BigDecimal; +import java.util.*; /** * High-level {@link ExchangeRate} data operations. @@ -72,9 +60,8 @@ public Map getAllMarketPrices() { metadata.putAll(getMetadata(p, exchangeRates)); }); - LinkedHashMap result = new LinkedHashMap<>(); - result.putAll(metadata); - // Use a sorted list by currency code to make comparision of json data between + LinkedHashMap result = new LinkedHashMap<>(metadata); + // Use a sorted list by currency code to make comparison of json data between // different price nodes easier List values = new ArrayList<>(aggregateExchangeRates.values()); values.sort(Comparator.comparing(ExchangeRate::getCurrency)); @@ -147,7 +134,7 @@ private Map> getCurrencyCodeToExchangeRates() { l.add(exchangeRate); currencyCodeToExchangeRates.put(currencyCode, l); } else { - currencyCodeToExchangeRates.put(currencyCode, asList(exchangeRate)); + currencyCodeToExchangeRates.put(currencyCode, List.of(exchangeRate)); } } } @@ -179,9 +166,9 @@ private Map getMetadata(ExchangeRateProvider provider, Set exchangeRates) { return exchangeRates.stream() - .filter(e -> provider.getName().equals(e.getProvider())) - .findFirst() - .orElseThrow(() -> new IllegalStateException("No exchange rate data found for " + provider.getName())) - .getTimestamp(); + .filter(e -> provider.getName().equals(e.getProvider())) + .findFirst() + .orElseThrow(() -> new IllegalStateException("No exchange rate data found for " + provider.getName())) + .getTimestamp(); } } diff --git a/src/test/java/bisq/price/mining/FeeRateServiceTest.java b/src/test/java/bisq/price/mining/FeeRateServiceTest.java index 8f47584..b64ab36 100644 --- a/src/test/java/bisq/price/mining/FeeRateServiceTest.java +++ b/src/test/java/bisq/price/mining/FeeRateServiceTest.java @@ -1,19 +1,16 @@ package bisq.price.mining; -import bisq.price.mining.providers.MempoolFeeRateProviderTest; - import bisq.common.config.Config; +import bisq.price.mining.providers.MempoolFeeRateProviderTest; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import org.junit.jupiter.api.Test; - import static bisq.price.mining.providers.MempoolFeeRateProviderTest.buildDummyReachableMempoolFeeRateProvider; import static bisq.price.mining.providers.MempoolFeeRateProviderTest.buildDummyUnreachableMempoolFeeRateProvider; import static java.util.Arrays.asList; @@ -23,6 +20,7 @@ /** * Tests the {@link bisq.price.mining.FeeRateService}, which can aggregate data from * several {@link FeeRateProvider}s. + * * @see MempoolFeeRateProviderTest */ public class FeeRateServiceTest { diff --git a/src/test/java/bisq/price/spot/ExchangeRateServiceTest.java b/src/test/java/bisq/price/spot/ExchangeRateServiceTest.java index 642f3fe..943e57f 100644 --- a/src/test/java/bisq/price/spot/ExchangeRateServiceTest.java +++ b/src/test/java/bisq/price/spot/ExchangeRateServiceTest.java @@ -18,40 +18,25 @@ package bisq.price.spot; import bisq.core.locale.CurrencyUtil; - -import org.springframework.core.env.Environment; -import org.springframework.core.env.StandardEnvironment; - -import com.google.common.collect.Sets; - -import org.apache.commons.lang3.RandomStringUtils; -import org.apache.commons.lang3.RandomUtils; - -import java.time.Duration; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.OptionalDouble; -import java.util.Set; -import java.util.stream.Collectors; - -import org.slf4j.LoggerFactory; - import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.read.ListAppender; - +import com.google.common.collect.Sets; +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.RandomUtils; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import org.slf4j.LoggerFactory; +import org.springframework.core.env.Environment; +import org.springframework.core.env.StandardEnvironment; + +import java.time.Duration; +import java.util.*; +import java.util.stream.Collectors; import static java.lang.Thread.sleep; import static java.util.Arrays.asList; - import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; @@ -231,9 +216,9 @@ public Set doGet() { /** * Performs generic sanity checks on the response format and contents. * - * @param retrievedData Response data retrieved from the {@link ExchangeRateService} - * @param provider {@link ExchangeRateProvider} available to the - * {@link ExchangeRateService} + * @param retrievedData Response data retrieved from the {@link ExchangeRateService} + * @param provider {@link ExchangeRateProvider} available to the + * {@link ExchangeRateService} * @param numberOfCurrencyPairsOnExchange Number of currency pairs this exchange was * initiated with */ @@ -254,8 +239,8 @@ private void doSanityChecksForRetrievedDataSingleProvider(Map re * Performs generic sanity checks on the response format and contents. * * @param retrievedData Response data retrieved from the {@link ExchangeRateService} - * @param providers List of all {@link ExchangeRateProvider#getPrefix()} the - * {@link ExchangeRateService} uses + * @param providers List of all {@link ExchangeRateProvider#getPrefix()} the + * {@link ExchangeRateService} uses */ private void doSanityChecksForRetrievedDataMultipleProviders(Map retrievedData, List providers) { @@ -363,7 +348,8 @@ protected Set doGet() { dummyProvider.start(); try { sleep(1000); - } catch (InterruptedException e) { } + } catch (InterruptedException e) { + } dummyProvider.stop(); return dummyProvider; @@ -402,7 +388,8 @@ protected Set doGet() { dummyProvider.start(); try { sleep(1000); - } catch (InterruptedException e) { } + } catch (InterruptedException e) { + } dummyProvider.stop(); return dummyProvider; diff --git a/src/test/java/bisq/price/spot/providers/BTCMarketsTest.java b/src/test/java/bisq/price/spot/providers/BTCMarketsTest.java index 354c25f..59b982f 100644 --- a/src/test/java/bisq/price/spot/providers/BTCMarketsTest.java +++ b/src/test/java/bisq/price/spot/providers/BTCMarketsTest.java @@ -19,11 +19,9 @@ import bisq.price.AbstractExchangeRateProviderTest; import lombok.extern.slf4j.Slf4j; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.core.env.StandardEnvironment; -@Disabled @Slf4j public class BTCMarketsTest extends AbstractExchangeRateProviderTest { diff --git a/src/test/java/bisq/price/spot/providers/BinanceTest.java b/src/test/java/bisq/price/spot/providers/BinanceTest.java index e995202..9f94d69 100644 --- a/src/test/java/bisq/price/spot/providers/BinanceTest.java +++ b/src/test/java/bisq/price/spot/providers/BinanceTest.java @@ -18,12 +18,9 @@ package bisq.price.spot.providers; import bisq.price.AbstractExchangeRateProviderTest; - -import org.springframework.core.env.StandardEnvironment; - import lombok.extern.slf4j.Slf4j; - import org.junit.jupiter.api.Test; +import org.springframework.core.env.StandardEnvironment; @Slf4j public class BinanceTest extends AbstractExchangeRateProviderTest { diff --git a/src/test/java/bisq/price/spot/providers/BitfinexTest.java b/src/test/java/bisq/price/spot/providers/BitfinexTest.java index e2dfa70..cc0a232 100644 --- a/src/test/java/bisq/price/spot/providers/BitfinexTest.java +++ b/src/test/java/bisq/price/spot/providers/BitfinexTest.java @@ -18,12 +18,9 @@ package bisq.price.spot.providers; import bisq.price.AbstractExchangeRateProviderTest; - -import org.springframework.core.env.StandardEnvironment; - import lombok.extern.slf4j.Slf4j; - import org.junit.jupiter.api.Test; +import org.springframework.core.env.StandardEnvironment; @Slf4j public class BitfinexTest extends AbstractExchangeRateProviderTest { diff --git a/src/test/java/bisq/price/spot/providers/BitflyerTest.java b/src/test/java/bisq/price/spot/providers/BitflyerTest.java index a722c5d..4ffdd86 100644 --- a/src/test/java/bisq/price/spot/providers/BitflyerTest.java +++ b/src/test/java/bisq/price/spot/providers/BitflyerTest.java @@ -18,12 +18,9 @@ package bisq.price.spot.providers; import bisq.price.AbstractExchangeRateProviderTest; - -import org.springframework.core.env.StandardEnvironment; - import lombok.extern.slf4j.Slf4j; - import org.junit.jupiter.api.Test; +import org.springframework.core.env.StandardEnvironment; @Slf4j public class BitflyerTest extends AbstractExchangeRateProviderTest { diff --git a/src/test/java/bisq/price/spot/providers/BitstampTest.java b/src/test/java/bisq/price/spot/providers/BitstampTest.java index 3c41974..779fa52 100644 --- a/src/test/java/bisq/price/spot/providers/BitstampTest.java +++ b/src/test/java/bisq/price/spot/providers/BitstampTest.java @@ -18,12 +18,9 @@ package bisq.price.spot.providers; import bisq.price.AbstractExchangeRateProviderTest; - -import org.springframework.core.env.StandardEnvironment; - import lombok.extern.slf4j.Slf4j; - import org.junit.jupiter.api.Test; +import org.springframework.core.env.StandardEnvironment; @Slf4j public class BitstampTest extends AbstractExchangeRateProviderTest { diff --git a/src/test/java/bisq/price/spot/providers/CoinGeckoTest.java b/src/test/java/bisq/price/spot/providers/CoinGeckoTest.java index 86c765d..ca453c2 100644 --- a/src/test/java/bisq/price/spot/providers/CoinGeckoTest.java +++ b/src/test/java/bisq/price/spot/providers/CoinGeckoTest.java @@ -18,12 +18,9 @@ package bisq.price.spot.providers; import bisq.price.AbstractExchangeRateProviderTest; - -import org.springframework.core.env.StandardEnvironment; - import lombok.extern.slf4j.Slf4j; - import org.junit.jupiter.api.Test; +import org.springframework.core.env.StandardEnvironment; @Slf4j public class CoinGeckoTest extends AbstractExchangeRateProviderTest { diff --git a/src/test/java/bisq/price/spot/providers/CoinbaseProTest.java b/src/test/java/bisq/price/spot/providers/CoinbaseProTest.java index a3e12c8..4aebf71 100644 --- a/src/test/java/bisq/price/spot/providers/CoinbaseProTest.java +++ b/src/test/java/bisq/price/spot/providers/CoinbaseProTest.java @@ -18,12 +18,9 @@ package bisq.price.spot.providers; import bisq.price.AbstractExchangeRateProviderTest; - -import org.springframework.core.env.StandardEnvironment; - import lombok.extern.slf4j.Slf4j; - import org.junit.jupiter.api.Test; +import org.springframework.core.env.StandardEnvironment; @Slf4j public class CoinbaseProTest extends AbstractExchangeRateProviderTest { diff --git a/src/test/java/bisq/price/spot/providers/CoinoneTest.java b/src/test/java/bisq/price/spot/providers/CoinoneTest.java index 9832118..b00ceb2 100644 --- a/src/test/java/bisq/price/spot/providers/CoinoneTest.java +++ b/src/test/java/bisq/price/spot/providers/CoinoneTest.java @@ -18,12 +18,9 @@ package bisq.price.spot.providers; import bisq.price.AbstractExchangeRateProviderTest; - -import org.springframework.core.env.StandardEnvironment; - import lombok.extern.slf4j.Slf4j; - import org.junit.jupiter.api.Test; +import org.springframework.core.env.StandardEnvironment; @Slf4j public class CoinoneTest extends AbstractExchangeRateProviderTest { diff --git a/src/test/java/bisq/price/spot/providers/IndependentReserveTest.java b/src/test/java/bisq/price/spot/providers/IndependentReserveTest.java index 93a43a9..60c84c7 100644 --- a/src/test/java/bisq/price/spot/providers/IndependentReserveTest.java +++ b/src/test/java/bisq/price/spot/providers/IndependentReserveTest.java @@ -18,12 +18,9 @@ package bisq.price.spot.providers; import bisq.price.AbstractExchangeRateProviderTest; - -import org.springframework.core.env.StandardEnvironment; - import lombok.extern.slf4j.Slf4j; - import org.junit.jupiter.api.Test; +import org.springframework.core.env.StandardEnvironment; @Slf4j public class IndependentReserveTest extends AbstractExchangeRateProviderTest { diff --git a/src/test/java/bisq/price/spot/providers/KrakenTest.java b/src/test/java/bisq/price/spot/providers/KrakenTest.java index 8226c88..e1f8119 100644 --- a/src/test/java/bisq/price/spot/providers/KrakenTest.java +++ b/src/test/java/bisq/price/spot/providers/KrakenTest.java @@ -18,12 +18,9 @@ package bisq.price.spot.providers; import bisq.price.AbstractExchangeRateProviderTest; - -import org.springframework.core.env.StandardEnvironment; - import lombok.extern.slf4j.Slf4j; - import org.junit.jupiter.api.Test; +import org.springframework.core.env.StandardEnvironment; @Slf4j public class KrakenTest extends AbstractExchangeRateProviderTest { diff --git a/src/test/java/bisq/price/spot/providers/LunoTest.java b/src/test/java/bisq/price/spot/providers/LunoTest.java index a04c9fb..13d90a4 100644 --- a/src/test/java/bisq/price/spot/providers/LunoTest.java +++ b/src/test/java/bisq/price/spot/providers/LunoTest.java @@ -18,12 +18,9 @@ package bisq.price.spot.providers; import bisq.price.AbstractExchangeRateProviderTest; - -import org.springframework.core.env.StandardEnvironment; - import lombok.extern.slf4j.Slf4j; - import org.junit.jupiter.api.Test; +import org.springframework.core.env.StandardEnvironment; @Slf4j public class LunoTest extends AbstractExchangeRateProviderTest { diff --git a/src/test/java/bisq/price/spot/providers/MercadoBitcoinTest.java b/src/test/java/bisq/price/spot/providers/MercadoBitcoinTest.java index 5671532..ae1c910 100644 --- a/src/test/java/bisq/price/spot/providers/MercadoBitcoinTest.java +++ b/src/test/java/bisq/price/spot/providers/MercadoBitcoinTest.java @@ -18,12 +18,9 @@ package bisq.price.spot.providers; import bisq.price.AbstractExchangeRateProviderTest; - -import org.springframework.core.env.StandardEnvironment; - import lombok.extern.slf4j.Slf4j; - import org.junit.jupiter.api.Test; +import org.springframework.core.env.StandardEnvironment; @Slf4j public class MercadoBitcoinTest extends AbstractExchangeRateProviderTest { diff --git a/src/test/java/bisq/price/spot/providers/ParibuTest.java b/src/test/java/bisq/price/spot/providers/ParibuTest.java index 3aac4b9..986a272 100644 --- a/src/test/java/bisq/price/spot/providers/ParibuTest.java +++ b/src/test/java/bisq/price/spot/providers/ParibuTest.java @@ -18,12 +18,9 @@ package bisq.price.spot.providers; import bisq.price.AbstractExchangeRateProviderTest; - -import org.springframework.core.env.StandardEnvironment; - import lombok.extern.slf4j.Slf4j; - import org.junit.jupiter.api.Test; +import org.springframework.core.env.StandardEnvironment; @Slf4j public class ParibuTest extends AbstractExchangeRateProviderTest { diff --git a/src/test/java/bisq/price/spot/providers/PoloniexTest.java b/src/test/java/bisq/price/spot/providers/PoloniexTest.java index de7711e..a688e59 100644 --- a/src/test/java/bisq/price/spot/providers/PoloniexTest.java +++ b/src/test/java/bisq/price/spot/providers/PoloniexTest.java @@ -18,12 +18,9 @@ package bisq.price.spot.providers; import bisq.price.AbstractExchangeRateProviderTest; - -import org.springframework.core.env.StandardEnvironment; - import lombok.extern.slf4j.Slf4j; - import org.junit.jupiter.api.Test; +import org.springframework.core.env.StandardEnvironment; @Slf4j public class PoloniexTest extends AbstractExchangeRateProviderTest { diff --git a/src/test/java/bisq/price/spot/providers/QuoineTest.java b/src/test/java/bisq/price/spot/providers/QuoineTest.java index 6465334..625aae4 100644 --- a/src/test/java/bisq/price/spot/providers/QuoineTest.java +++ b/src/test/java/bisq/price/spot/providers/QuoineTest.java @@ -18,12 +18,9 @@ package bisq.price.spot.providers; import bisq.price.AbstractExchangeRateProviderTest; - -import org.springframework.core.env.StandardEnvironment; - import lombok.extern.slf4j.Slf4j; - import org.junit.jupiter.api.Test; +import org.springframework.core.env.StandardEnvironment; @Slf4j public class QuoineTest extends AbstractExchangeRateProviderTest { diff --git a/src/test/resources/logback.xml b/src/test/resources/logback.xml new file mode 100644 index 0000000..2c7e0ad --- /dev/null +++ b/src/test/resources/logback.xml @@ -0,0 +1,16 @@ + + + + + %highlight(%d{MMM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{15}: %msg %xEx%n) + + + + + + + + + + +