PollingSettings.java 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package com.provectus.kafka.ui.emitter;
  2. import com.provectus.kafka.ui.config.ClustersProperties;
  3. import java.time.Duration;
  4. import java.util.Optional;
  5. import java.util.function.Supplier;
  6. public class PollingSettings {
  7. private static final Duration DEFAULT_POLL_TIMEOUT = Duration.ofMillis(1_000);
  8. private static final Duration DEFAULT_PARTITION_POLL_TIMEOUT = Duration.ofMillis(200);
  9. private static final int DEFAULT_NO_DATA_EMPTY_POLLS = 3;
  10. private final Duration pollTimeout;
  11. private final Duration partitionPollTimeout;
  12. private final int notDataEmptyPolls; //see EmptyPollsCounter docs
  13. private final Supplier<PollingThrottler> throttlerSupplier;
  14. public static PollingSettings create(ClustersProperties.Cluster cluster,
  15. ClustersProperties clustersProperties) {
  16. var pollingProps = Optional.ofNullable(clustersProperties.getPolling())
  17. .orElseGet(ClustersProperties.PollingProperties::new);
  18. var pollTimeout = pollingProps.getPollTimeoutMs() != null
  19. ? Duration.ofMillis(pollingProps.getPollTimeoutMs())
  20. : DEFAULT_POLL_TIMEOUT;
  21. var partitionPollTimeout = pollingProps.getPartitionPollTimeout() != null
  22. ? Duration.ofMillis(pollingProps.getPartitionPollTimeout())
  23. : Duration.ofMillis(pollTimeout.toMillis() / 5);
  24. int noDataEmptyPolls = pollingProps.getNoDataEmptyPolls() != null
  25. ? pollingProps.getNoDataEmptyPolls()
  26. : DEFAULT_NO_DATA_EMPTY_POLLS;
  27. return new PollingSettings(
  28. pollTimeout,
  29. partitionPollTimeout,
  30. noDataEmptyPolls,
  31. PollingThrottler.throttlerSupplier(cluster)
  32. );
  33. }
  34. public static PollingSettings createDefault() {
  35. return new PollingSettings(
  36. DEFAULT_POLL_TIMEOUT,
  37. DEFAULT_PARTITION_POLL_TIMEOUT,
  38. DEFAULT_NO_DATA_EMPTY_POLLS,
  39. PollingThrottler::noop
  40. );
  41. }
  42. private PollingSettings(Duration pollTimeout,
  43. Duration partitionPollTimeout,
  44. int notDataEmptyPolls,
  45. Supplier<PollingThrottler> throttlerSupplier) {
  46. this.pollTimeout = pollTimeout;
  47. this.partitionPollTimeout = partitionPollTimeout;
  48. this.notDataEmptyPolls = notDataEmptyPolls;
  49. this.throttlerSupplier = throttlerSupplier;
  50. }
  51. public EmptyPollsCounter createEmptyPollsCounter() {
  52. return new EmptyPollsCounter(notDataEmptyPolls);
  53. }
  54. public Duration getPollTimeout() {
  55. return pollTimeout;
  56. }
  57. public Duration getPartitionPollTimeout() {
  58. return partitionPollTimeout;
  59. }
  60. public PollingThrottler getPollingThrottler() {
  61. return throttlerSupplier.get();
  62. }
  63. }