mirror of
https://github.com/aljazceru/lnd-manageJ.git
synced 2026-01-20 22:44:31 +01:00
make "online percentage/changes" warnings configurable
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package de.cotto.lndmanagej.service;
|
||||
|
||||
import de.cotto.lndmanagej.configuration.ConfigurationService;
|
||||
import de.cotto.lndmanagej.model.Pubkey;
|
||||
import de.cotto.lndmanagej.model.warnings.NodeOnlineChangesWarning;
|
||||
import de.cotto.lndmanagej.model.warnings.NodeOnlinePercentageWarning;
|
||||
@@ -13,15 +14,18 @@ import java.util.stream.Stream;
|
||||
|
||||
@Component
|
||||
public class NodeOnlineWarningsProvider implements NodeWarningsProvider {
|
||||
private static final int ONLINE_PERCENTAGE_THRESHOLD = 80;
|
||||
private static final int ONLINE_CHANGES_THRESHOLD = 50;
|
||||
private static final int DEFAULT_ONLINE_PERCENTAGE_THRESHOLD = 80;
|
||||
private static final int DEFAULT_ONLINE_CHANGES_THRESHOLD = 50;
|
||||
|
||||
private final OnlinePeersService onlinePeersService;
|
||||
private final ConfigurationService configurationService;
|
||||
|
||||
public NodeOnlineWarningsProvider(
|
||||
OnlinePeersService onlinePeersService
|
||||
OnlinePeersService onlinePeersService,
|
||||
ConfigurationService configurationService
|
||||
) {
|
||||
this.onlinePeersService = onlinePeersService;
|
||||
this.configurationService = configurationService;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -36,7 +40,7 @@ public class NodeOnlineWarningsProvider implements NodeWarningsProvider {
|
||||
private Optional<NodeWarning> getOnlinePercentageWarning(Pubkey pubkey) {
|
||||
int onlinePercentage = onlinePeersService.getOnlinePercentage(pubkey);
|
||||
int daysForOnlinePercentage = onlinePeersService.getDaysForOnlinePercentage();
|
||||
if (onlinePercentage < ONLINE_PERCENTAGE_THRESHOLD) {
|
||||
if (onlinePercentage < getOnlinePercentageThreshold()) {
|
||||
return Optional.of(new NodeOnlinePercentageWarning(onlinePercentage, daysForOnlinePercentage));
|
||||
}
|
||||
return Optional.empty();
|
||||
@@ -45,9 +49,17 @@ public class NodeOnlineWarningsProvider implements NodeWarningsProvider {
|
||||
private Optional<NodeWarning> getOnlineChangesWarning(Pubkey pubkey) {
|
||||
int changes = onlinePeersService.getChanges(pubkey);
|
||||
int daysForChanges = onlinePeersService.getDaysForChanges();
|
||||
if (changes > ONLINE_CHANGES_THRESHOLD) {
|
||||
if (changes > getOnlineChangesThreshold()) {
|
||||
return Optional.of(new NodeOnlineChangesWarning(changes, daysForChanges));
|
||||
}
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
private int getOnlinePercentageThreshold() {
|
||||
return configurationService.getOnlinePercentageThreshold().orElse(DEFAULT_ONLINE_PERCENTAGE_THRESHOLD);
|
||||
}
|
||||
|
||||
private int getOnlineChangesThreshold() {
|
||||
return configurationService.getOnlineChangesThreshold().orElse(DEFAULT_ONLINE_CHANGES_THRESHOLD);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package de.cotto.lndmanagej.service;
|
||||
|
||||
import de.cotto.lndmanagej.configuration.ConfigurationService;
|
||||
import de.cotto.lndmanagej.model.warnings.NodeOnlineChangesWarning;
|
||||
import de.cotto.lndmanagej.model.warnings.NodeOnlinePercentageWarning;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
@@ -9,6 +10,8 @@ import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.Mockito.when;
|
||||
@@ -21,6 +24,9 @@ class NodeOnlineWarningsProviderTest {
|
||||
@Mock
|
||||
private OnlinePeersService onlinePeersService;
|
||||
|
||||
@Mock
|
||||
private ConfigurationService configurationService;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
when(onlinePeersService.getOnlinePercentage(PUBKEY)).thenReturn(80);
|
||||
@@ -35,6 +41,15 @@ class NodeOnlineWarningsProviderTest {
|
||||
.containsExactly(new NodeOnlinePercentageWarning(79, 456));
|
||||
}
|
||||
|
||||
@Test
|
||||
void getNodeWarnings_online_below_configured_threshold() {
|
||||
when(configurationService.getOnlinePercentageThreshold()).thenReturn(Optional.of(99));
|
||||
when(onlinePeersService.getOnlinePercentage(PUBKEY)).thenReturn(98);
|
||||
when(onlinePeersService.getDaysForOnlinePercentage()).thenReturn(456);
|
||||
assertThat(warningsProvider.getNodeWarnings(PUBKEY))
|
||||
.containsExactly(new NodeOnlinePercentageWarning(98, 456));
|
||||
}
|
||||
|
||||
@Test
|
||||
void getNodeWarnings_online_changes_above_threshold() {
|
||||
when(onlinePeersService.getChanges(PUBKEY)).thenReturn(51);
|
||||
@@ -43,8 +58,17 @@ class NodeOnlineWarningsProviderTest {
|
||||
.containsExactly(new NodeOnlineChangesWarning(51, 123));
|
||||
}
|
||||
|
||||
@Test
|
||||
void getNodeWarnings_online_changes_above_configured_threshold() {
|
||||
when(configurationService.getOnlineChangesThreshold()).thenReturn(Optional.of(30));
|
||||
when(onlinePeersService.getChanges(PUBKEY)).thenReturn(40);
|
||||
when(onlinePeersService.getDaysForChanges()).thenReturn(123);
|
||||
assertThat(warningsProvider.getNodeWarnings(PUBKEY))
|
||||
.containsExactly(new NodeOnlineChangesWarning(40, 123));
|
||||
}
|
||||
|
||||
@Test
|
||||
void getNodeWarnings_ok() {
|
||||
assertThat(warningsProvider.getNodeWarnings(PUBKEY)).isEmpty();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,8 @@ public class ConfigurationService {
|
||||
private static final String MAX_NUM_UPDATES = "max_num_updates";
|
||||
private static final String NODE_FLOW_MINIMUM_DAYS_FOR_WARNING = "node_flow_minimum_days_for_warning";
|
||||
private static final String NODE_FLOW_MAXIMUM_DAYS_TO_CONSIDER = "node_flow_maximum_days_to_consider";
|
||||
private static final String ONLINE_PERCENTAGE_THRESHOLD = "online_percentage_threshold";
|
||||
private static final String ONLINE_CHANGES_THRESHOLD = "online_changes_threshold";
|
||||
|
||||
private final IniFileReader iniFileReader;
|
||||
|
||||
@@ -87,6 +89,14 @@ public class ConfigurationService {
|
||||
return getInteger(WARNINGS_SECTION, NODE_FLOW_MAXIMUM_DAYS_TO_CONSIDER);
|
||||
}
|
||||
|
||||
public Optional<Integer> getOnlinePercentageThreshold() {
|
||||
return getInteger(WARNINGS_SECTION, ONLINE_PERCENTAGE_THRESHOLD);
|
||||
}
|
||||
|
||||
public Optional<Integer> getOnlineChangesThreshold() {
|
||||
return getInteger(WARNINGS_SECTION, ONLINE_CHANGES_THRESHOLD);
|
||||
}
|
||||
|
||||
private Optional<Integer> getInteger(String sectionName, String configurationName) {
|
||||
Map<String, Set<String>> values = iniFileReader.getValues(sectionName);
|
||||
return values.getOrDefault(configurationName, Set.of()).stream()
|
||||
|
||||
@@ -7,7 +7,9 @@ import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID;
|
||||
import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY;
|
||||
@@ -30,6 +32,8 @@ class ConfigurationServiceTest {
|
||||
private static final String MAX_NUM_UPDATES = "max_num_updates";
|
||||
private static final String NODE_FLOW_MINIMUM_DAYS_FOR_WARNING = "node_flow_minimum_days_for_warning";
|
||||
private static final String NODE_FLOW_MAXIMUM_DAYS_TO_CONSIDER = "node_flow_maximum_days_to_consider";
|
||||
private static final String ONLINE_PERCENTAGE_THRESHOLD = "online_percentage_threshold";
|
||||
private static final String ONLINE_CHANGES_THRESHOLD = "online_changes_threshold";
|
||||
|
||||
@InjectMocks
|
||||
private ConfigurationService configurationService;
|
||||
@@ -111,16 +115,18 @@ class ConfigurationServiceTest {
|
||||
|
||||
@Test
|
||||
void getChannelBalanceFluctuationWarningLowerThreshold() {
|
||||
when(iniFileReader.getValues(WARNINGS_SECTION))
|
||||
.thenReturn(Map.of(CHANNEL_FLUCTUATION_LOWER_THRESHOLD, Set.of("1")));
|
||||
assertThat(configurationService.getChannelFluctuationWarningLowerThreshold()).contains(1);
|
||||
assertValue(
|
||||
configurationService::getChannelFluctuationWarningLowerThreshold,
|
||||
CHANNEL_FLUCTUATION_LOWER_THRESHOLD
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
void getChannelBalanceFluctuationWarningLowerThreshold_not_integer() {
|
||||
when(iniFileReader.getValues(WARNINGS_SECTION))
|
||||
.thenReturn(Map.of(CHANNEL_FLUCTUATION_LOWER_THRESHOLD, Set.of("x")));
|
||||
assertThat(configurationService.getChannelFluctuationWarningLowerThreshold()).isEmpty();
|
||||
assertEmptyForNonIntegerValue(
|
||||
configurationService::getChannelFluctuationWarningLowerThreshold,
|
||||
CHANNEL_FLUCTUATION_LOWER_THRESHOLD
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -130,16 +136,18 @@ class ConfigurationServiceTest {
|
||||
|
||||
@Test
|
||||
void getChannelBalanceFluctuationWarningUpperThreshold() {
|
||||
when(iniFileReader.getValues(WARNINGS_SECTION))
|
||||
.thenReturn(Map.of(CHANNEL_FLUCTUATION_UPPER_THRESHOLD, Set.of("99")));
|
||||
assertThat(configurationService.getChannelFluctuationWarningUpperThreshold()).contains(99);
|
||||
assertValue(
|
||||
configurationService::getChannelFluctuationWarningUpperThreshold,
|
||||
CHANNEL_FLUCTUATION_UPPER_THRESHOLD
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
void getChannelBalanceFluctuationWarningUpperThreshold_not_integer() {
|
||||
when(iniFileReader.getValues(WARNINGS_SECTION))
|
||||
.thenReturn(Map.of(CHANNEL_FLUCTUATION_UPPER_THRESHOLD, Set.of("x")));
|
||||
assertThat(configurationService.getChannelFluctuationWarningUpperThreshold()).isEmpty();
|
||||
assertEmptyForNonIntegerValue(
|
||||
configurationService::getChannelFluctuationWarningUpperThreshold,
|
||||
CHANNEL_FLUCTUATION_UPPER_THRESHOLD
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -149,14 +157,12 @@ class ConfigurationServiceTest {
|
||||
|
||||
@Test
|
||||
void getMaxNumUpdates() {
|
||||
when(iniFileReader.getValues(WARNINGS_SECTION)).thenReturn(Map.of(MAX_NUM_UPDATES, Set.of("99")));
|
||||
assertThat(configurationService.getMaxNumUpdates()).contains(99);
|
||||
assertValue(configurationService::getMaxNumUpdates, MAX_NUM_UPDATES);
|
||||
}
|
||||
|
||||
@Test
|
||||
void getMaxNumUpdates_not_integer() {
|
||||
when(iniFileReader.getValues(WARNINGS_SECTION)).thenReturn(Map.of(MAX_NUM_UPDATES, Set.of("x")));
|
||||
assertThat(configurationService.getMaxNumUpdates()).isEmpty();
|
||||
assertEmptyForNonIntegerValue(configurationService::getMaxNumUpdates, MAX_NUM_UPDATES);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -166,16 +172,15 @@ class ConfigurationServiceTest {
|
||||
|
||||
@Test
|
||||
void getNodeFlowWarningMinimumDaysForWarning() {
|
||||
when(iniFileReader.getValues(WARNINGS_SECTION))
|
||||
.thenReturn(Map.of(NODE_FLOW_MINIMUM_DAYS_FOR_WARNING, Set.of("99")));
|
||||
assertThat(configurationService.getNodeFlowWarningMinimumDaysForWarning()).contains(99);
|
||||
assertValue(configurationService::getNodeFlowWarningMinimumDaysForWarning, NODE_FLOW_MINIMUM_DAYS_FOR_WARNING);
|
||||
}
|
||||
|
||||
@Test
|
||||
void getNodeFlowWarningMinimumDaysForWarning_not_integer() {
|
||||
when(iniFileReader.getValues(WARNINGS_SECTION))
|
||||
.thenReturn(Map.of(NODE_FLOW_MINIMUM_DAYS_FOR_WARNING, Set.of("x")));
|
||||
assertThat(configurationService.getNodeFlowWarningMinimumDaysForWarning()).isEmpty();
|
||||
assertEmptyForNonIntegerValue(
|
||||
configurationService::getNodeFlowWarningMinimumDaysForWarning,
|
||||
NODE_FLOW_MINIMUM_DAYS_FOR_WARNING
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -185,15 +190,61 @@ class ConfigurationServiceTest {
|
||||
|
||||
@Test
|
||||
void getNodeFlowWarningMaximumDaysToConsider() {
|
||||
when(iniFileReader.getValues(WARNINGS_SECTION))
|
||||
.thenReturn(Map.of(NODE_FLOW_MAXIMUM_DAYS_TO_CONSIDER, Set.of("99")));
|
||||
assertThat(configurationService.getNodeFlowWarningMaximumDaysToConsider()).contains(99);
|
||||
assertValue(configurationService::getNodeFlowWarningMaximumDaysToConsider, NODE_FLOW_MAXIMUM_DAYS_TO_CONSIDER);
|
||||
}
|
||||
|
||||
@Test
|
||||
void getNodeFlowWarningMaximumDaysToConsider_not_integer() {
|
||||
when(iniFileReader.getValues(WARNINGS_SECTION))
|
||||
.thenReturn(Map.of(NODE_FLOW_MAXIMUM_DAYS_TO_CONSIDER, Set.of("x")));
|
||||
assertThat(configurationService.getNodeFlowWarningMaximumDaysToConsider()).isEmpty();
|
||||
assertEmptyForNonIntegerValue(
|
||||
configurationService::getNodeFlowWarningMaximumDaysToConsider,
|
||||
NODE_FLOW_MAXIMUM_DAYS_TO_CONSIDER
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
void getOnlinePercentageThreshold_defaults_to_empty() {
|
||||
assertThat(configurationService.getOnlinePercentageThreshold()).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
void getOnlinePercentageThreshold() {
|
||||
assertValue(configurationService::getOnlinePercentageThreshold, ONLINE_PERCENTAGE_THRESHOLD);
|
||||
}
|
||||
|
||||
@Test
|
||||
void getOnlinePercentageThreshold_not_integer() {
|
||||
assertEmptyForNonIntegerValue(
|
||||
configurationService::getOnlinePercentageThreshold,
|
||||
ONLINE_PERCENTAGE_THRESHOLD
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
void getOnlineChangesThreshold_defaults_to_empty() {
|
||||
assertThat(configurationService.getOnlineChangesThreshold()).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
void getOnlineChangesThreshold() {
|
||||
assertValue(configurationService::getOnlineChangesThreshold, ONLINE_CHANGES_THRESHOLD);
|
||||
}
|
||||
|
||||
@Test
|
||||
void getOnlineChangesThreshold_not_integer() {
|
||||
assertEmptyForNonIntegerValue(
|
||||
configurationService::getOnlineChangesThreshold,
|
||||
ONLINE_CHANGES_THRESHOLD
|
||||
);
|
||||
}
|
||||
|
||||
private void assertEmptyForNonIntegerValue(Supplier<Optional<Integer>> supplier, String key) {
|
||||
when(iniFileReader.getValues(WARNINGS_SECTION)).thenReturn(Map.of(key, Set.of("x")));
|
||||
assertThat(supplier.get()).isEmpty();
|
||||
}
|
||||
|
||||
private void assertValue(Supplier<Optional<Integer>> supplier, String key) {
|
||||
int expectedValue = 42;
|
||||
when(iniFileReader.getValues(WARNINGS_SECTION)).thenReturn(Map.of(key, Set.of(String.valueOf(expectedValue))));
|
||||
assertThat(supplier.get()).contains(expectedValue);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,3 +16,5 @@ channel_fluctuation_upper_threshold=90
|
||||
max_num_updates=100000
|
||||
node_flow_minimum_days_for_warning=30
|
||||
node_flow_maximum_days_to_consider=90
|
||||
online_percentage_threshold=80
|
||||
online_changes_threshold=50
|
||||
|
||||
Reference in New Issue
Block a user