/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.runtime.module.extension.internal.runtime.config; import org.mule.runtime.core.api.time.TimeSupplier; import java.util.concurrent.atomic.AtomicInteger; /** * Default implementation of {@link MutableConfigurationStats} * * @since 4.0 */ final class DefaultMutableConfigurationStats implements MutableConfigurationStats { private final AtomicInteger inflightOperations = new AtomicInteger(0); private final TimeSupplier timeSupplier; private long lastUsedMillis; /** * Creates a new instance using the given {@code timeSupplier} to obtain the current time and update the * {@link #getLastUsedMillis()} * * @param timeSupplier a {@link TimeSupplier} */ public DefaultMutableConfigurationStats(TimeSupplier timeSupplier) { this.timeSupplier = timeSupplier; updateLastUsed(); } /** * {@inheritDoc} */ @Override public long updateLastUsed() { return lastUsedMillis = timeSupplier.get(); } /** * {@inheritDoc} */ @Override public long getLastUsedMillis() { return lastUsedMillis; } /** * {@inheritDoc} */ @Override public int getInflightOperations() { return inflightOperations.get(); } /** * {@inheritDoc} */ @Override public int addInflightOperation() { updateLastUsed(); return inflightOperations.incrementAndGet(); } /** * {@inheritDoc} */ @Override public int discountInflightOperation() { updateLastUsed(); return inflightOperations.decrementAndGet(); } }