com.microsoft.azure.eventhubs.impl.TimeoutTracker Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of azure-eventhubs Show documentation
Show all versions of azure-eventhubs Show documentation
Please note, a newer package azure-messaging-eventhubs for Azure Event Hubs is available at https://search.maven.org/artifact/com.azure/azure-messaging-eventhubs as of February 2020. While this package will continue to receive critical bug fixes, we strongly encourage you to upgrade. Read the migration guide at https://aka.ms/azsdk/java/migrate/eh for more details.
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
package com.microsoft.azure.eventhubs.impl;
import java.time.Duration;
import java.time.Instant;
public class TimeoutTracker {
private final Duration originalTimeout;
private boolean isTimerStarted;
private Instant startTime;
/**
* @param timeout original operationTimeout
* @param startTrackingTimeout whether/not to start the timeout tracking - right now. if not started now, timer tracking will start upon the first call to {@link TimeoutTracker#elapsed()}/{@link TimeoutTracker#remaining()}
*/
public TimeoutTracker(Duration timeout, boolean startTrackingTimeout) {
if (timeout.compareTo(Duration.ZERO) < 0) {
throw new IllegalArgumentException("timeout should be non-negative");
}
this.originalTimeout = timeout;
if (startTrackingTimeout) {
this.startTime = Instant.now();
}
this.isTimerStarted = startTrackingTimeout;
}
public static TimeoutTracker create(Duration timeout) {
return new TimeoutTracker(timeout, true);
}
public Duration remaining() {
return this.originalTimeout.minus(this.elapsed());
}
public Duration elapsed() {
if (!this.isTimerStarted) {
this.startTime = Instant.now();
this.isTimerStarted = true;
}
return Duration.between(this.startTime, Instant.now());
}
}