use of com.hedera.mirror.monitor.publish.PublishScenarioProperties in project hedera-mirror-node by hashgraph.
the class CompositeTransactionGeneratorTest method distribution.
@Test
void distribution() {
properties.setWarmupPeriod(Duration.ZERO);
CompositeTransactionGenerator generator = supplier.get();
assertThat(generator.distribution.get().getPmf()).hasSize(properties.getScenarios().size()).extracting(Pair::getValue).containsExactly(0.75, 0.25);
Multiset<TransactionType> types = HashMultiset.create();
double seconds = 5;
for (int i = 0; i < totalTps * seconds; ) {
List<PublishRequest> requests = generator.next();
requests.stream().map(r -> r.getScenario().getProperties().getType()).forEach(types::add);
i += requests.size();
}
for (PublishScenarioProperties publishScenarioProperties : properties.getScenarios().values()) {
assertThat(types.count(publishScenarioProperties.getType())).isNotNegative().isNotZero().isCloseTo((int) (publishScenarioProperties.getTps() * seconds), withinPercentage(10));
}
}
use of com.hedera.mirror.monitor.publish.PublishScenarioProperties in project hedera-mirror-node by hashgraph.
the class CompositeTransactionGeneratorTest method init.
@BeforeEach
void init() {
publishScenarioProperties1 = new PublishScenarioProperties();
publishScenarioProperties1.setName("test1");
publishScenarioProperties1.setProperties(Map.of("topicId", "0.0.1000"));
publishScenarioProperties1.setTps(750);
publishScenarioProperties1.setType(TransactionType.CONSENSUS_SUBMIT_MESSAGE);
totalTps = publishScenarioProperties1.getTps();
publishScenarioProperties2 = new PublishScenarioProperties();
publishScenarioProperties2.setName("test2");
publishScenarioProperties2.setTps(250);
publishScenarioProperties2.setType(TransactionType.ACCOUNT_CREATE);
totalTps += publishScenarioProperties2.getTps();
properties = new PublishProperties();
properties.getScenarios().put(publishScenarioProperties1.getName(), publishScenarioProperties1);
properties.getScenarios().put(publishScenarioProperties2.getName(), publishScenarioProperties2);
supplier = Suppliers.memoize(() -> new CompositeTransactionGenerator(p -> p, p -> p.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)), properties));
prepare();
}
use of com.hedera.mirror.monitor.publish.PublishScenarioProperties in project hedera-mirror-node by hashgraph.
the class ConfigurableTransactionGeneratorTest method init.
@BeforeEach
void init() {
properties = new PublishScenarioProperties();
properties.setReceiptPercent(1);
properties.setRecordPercent(1);
properties.setName("test");
properties.setProperties(Map.of("topicId", TOPIC_ID));
properties.setTps(100_000);
properties.setType(TransactionType.CONSENSUS_SUBMIT_MESSAGE);
generator = Suppliers.memoize(() -> new ConfigurableTransactionGenerator(p -> p, p -> Collections.unmodifiableMap(p), properties));
}
use of com.hedera.mirror.monitor.publish.PublishScenarioProperties in project hedera-mirror-node by hashgraph.
the class CompositeTransactionGenerator method rebuild.
private synchronized void rebuild() {
double total = 0.0;
List<Pair<TransactionGenerator, Double>> pairs = new ArrayList<>();
for (Iterator<ConfigurableTransactionGenerator> iter = transactionGenerators.iterator(); iter.hasNext(); ) {
ConfigurableTransactionGenerator transactionGenerator = iter.next();
PublishScenarioProperties publishScenarioProperties = transactionGenerator.getProperties();
if (publishScenarioProperties.isEnabled()) {
total += publishScenarioProperties.getTps();
pairs.add(Pair.create(transactionGenerator, publishScenarioProperties.getTps()));
} else {
iter.remove();
}
}
if (!properties.isEnabled() || pairs.isEmpty() || total == 0.0) {
batchSize.set(1);
distribution.set(null);
rateLimiter.set(INACTIVE_RATE_LIMITER);
log.info("Publishing is disabled");
return;
}
for (ConfigurableTransactionGenerator transactionGenerator : transactionGenerators) {
log.info("Activated scenario: {}", transactionGenerator.getProperties());
}
batchSize.set(Math.max(1, (int) Math.ceil(total / properties.getBatchDivisor())));
distribution.set(new EnumeratedDistribution<>(pairs));
RateLimiter current = rateLimiter.get();
if (current != null) {
current.setRate(total);
} else {
rateLimiter.set(getRateLimiter(total, properties.getWarmupPeriod()));
}
}
use of com.hedera.mirror.monitor.publish.PublishScenarioProperties in project hedera-mirror-node by hashgraph.
the class RestSubscriberTest method setup.
@BeforeEach
void setup() {
MonitorProperties monitorProperties = new MonitorProperties();
monitorProperties.setMirrorNode(new MirrorNodeProperties());
monitorProperties.getMirrorNode().getRest().setHost("127.0.0.1");
restSubscriberProperties = new RestSubscriberProperties();
restSubscriberProperties.setLimit(3L);
restSubscriberProperties.setName("test");
restSubscriberProperties.getRetry().setMaxAttempts(2L);
restSubscriberProperties.getRetry().setMinBackoff(Duration.ofNanos(1L));
restSubscriberProperties.getRetry().setMaxBackoff(Duration.ofNanos(2L));
PublishScenarioProperties publishScenarioProperties = new PublishScenarioProperties();
publishScenarioProperties.setName(SCENARIO);
publishScenarioProperties.setType(TransactionType.CONSENSUS_SUBMIT_MESSAGE);
publishScenario = new PublishScenario(publishScenarioProperties);
subscribeProperties = new SubscribeProperties();
subscribeProperties.getRest().put(restSubscriberProperties.getName(), restSubscriberProperties);
WebClient.Builder builder = WebClient.builder().exchangeFunction(exchangeFunction);
restSubscriber = new RestSubscriber(monitorProperties, subscribeProperties, builder);
}
Aggregations