pricenode: configurable exclusion property for provider currency.

This commit is contained in:
jmacxx 2022-05-27 10:31:52 -05:00 committed by woodser
parent fed7b22c90
commit 8035162502
3 changed files with 20 additions and 1 deletions

View file

@ -64,6 +64,7 @@ public abstract class ExchangeRateProvider extends PriceProvider<Set<ExchangeRat
private static Set<String> SUPPORTED_CRYPTO_CURRENCIES = new HashSet<>(); private static Set<String> SUPPORTED_CRYPTO_CURRENCIES = new HashSet<>();
private static Set<String> SUPPORTED_FIAT_CURRENCIES = new HashSet<>(); private static Set<String> SUPPORTED_FIAT_CURRENCIES = new HashSet<>();
private Set<String> providerExclusionList = new HashSet<>();
private final String name; private final String name;
private final String prefix; private final String prefix;
private final Environment env; private final Environment env;
@ -73,6 +74,18 @@ public abstract class ExchangeRateProvider extends PriceProvider<Set<ExchangeRat
this.name = name; this.name = name;
this.prefix = prefix; this.prefix = prefix;
this.env = env; this.env = env;
List<String> excludedByProvider =
Arrays.asList(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]);
}
}
if (providerExclusionList.size() > 0) {
log.info("{} specific exclusion list={}", name, providerExclusionList.toString());
}
} }
public Set<String> getSupportedFiatCurrencies() { public Set<String> getSupportedFiatCurrencies() {
@ -91,7 +104,10 @@ public abstract class ExchangeRateProvider extends PriceProvider<Set<ExchangeRat
log.info("fiat currencies excluded: {}", validatedExclusionList); log.info("fiat currencies excluded: {}", validatedExclusionList);
log.info("fiat currencies supported: {}", SUPPORTED_FIAT_CURRENCIES.size()); log.info("fiat currencies supported: {}", SUPPORTED_FIAT_CURRENCIES.size());
} }
return SUPPORTED_FIAT_CURRENCIES; // filter out any provider specific ccy exclusions
return SUPPORTED_FIAT_CURRENCIES.stream()
.filter(ccy -> !providerExclusionList.contains(ccy.toUpperCase()))
.collect(Collectors.toSet());
} }
public Set<String> getSupportedCryptoCurrencies() { public Set<String> getSupportedCryptoCurrencies() {

View file

@ -9,4 +9,5 @@ bisq.price.mining.providers.mempoolHostname.3=mempool.ninja
bisq.price.mining.providers.mempoolHostname.4=mempool.bisq.services bisq.price.mining.providers.mempoolHostname.4=mempool.bisq.services
# bisq.price.mining.providers.mempoolHostname.5=someHostOrIP # bisq.price.mining.providers.mempoolHostname.5=someHostOrIP
bisq.price.fiatcurrency.excluded=LBP,ARS bisq.price.fiatcurrency.excluded=LBP,ARS
bisq.price.fiatcurrency.excludedByProvider=HUOBI:BRL
bisq.price.cryptocurrency.excluded= bisq.price.cryptocurrency.excluded=

View file

@ -166,8 +166,10 @@ public class ExchangeRateServiceTest {
@Test @Test
public void getAllMarketPrices_withMultipleProviders_excludedCurrencyCodes() { public void getAllMarketPrices_withMultipleProviders_excludedCurrencyCodes() {
String excludedCcyString = "LBP,USD,EUR"; String excludedCcyString = "LBP,USD,EUR";
String providerExcludedCcyString = "HUOBI:BRL,BINANCE:GBP,BINANCE:SEK";
Environment mockedEnvironment = mock(Environment.class); Environment mockedEnvironment = mock(Environment.class);
when(mockedEnvironment.getProperty(eq("bisq.price.fiatcurrency.excluded"), anyString())).thenReturn(excludedCcyString); when(mockedEnvironment.getProperty(eq("bisq.price.fiatcurrency.excluded"), anyString())).thenReturn(excludedCcyString);
when(mockedEnvironment.getProperty(eq("bisq.price.fiatcurrency.excludedByProvider"), anyString())).thenReturn(providerExcludedCcyString);
class MockedExchangeRateProvider extends ExchangeRateProvider { class MockedExchangeRateProvider extends ExchangeRateProvider {
MockedExchangeRateProvider() { MockedExchangeRateProvider() {