@Override
    public boolean exceedsThreshold(final String key, final double thresholdRate) {
        val submissionEntry = get(key);
        LOGGER.debug("Last throttling date for key [{}] is [{}]", key, submissionEntry);
        if (submissionEntry != null) {
            val now = ZonedDateTime.now(ZoneOffset.UTC);
            val submissionRate = submissionRate(now, submissionEntry.getValue());
            val result = submissionRate > thresholdRate;
            LOGGER.debug("Current time is [{}] and submission date is [{}]. Submission rate between the dates is [{}] and your threshold rate [{}]. "
                    + "The submission rate is [{}] than the threshold rate, so the request [{}] be throttled.",
                now, submissionEntry.getValue(), submissionRate, thresholdRate,
                BooleanUtils.toString(result, "greater", "less"),
                BooleanUtils.toString(result, "may", "may not"));
            return result;
        }
        return false;
    }
Computes the instantaneous rate in between two given dates corresponding to two submissions.

@param a First date.
@param b Second date.
@return Instantaneous submission rate in submissions/sec, e.g. {@code a - b}.
core/cas-server-core-authentication-throttle/src/main/java/org/apereo/cas/throttle/BaseMappableThrottledSubmissionsStore.java