class SystemQuotaController implements QuotaController<Void> {

    @Override
    public EvictionQuota getQuota(Reference reference) {
        EvictionQuota.Builder quotaBuilder = EvictionQuota.newBuilder().withReference(reference);
        if (!inTimeWindowPredicate.get()) {
            return quotaBuilder.withQuota(0).withMessage(OUTSIDE_SYSTEM_TIME_WINDOW.getRejectionReason().get()).build();
        }
        if (systemTokenBucket.getNumberOfTokens() <= 0) {
            return quotaBuilder.withQuota(0).withMessage(QUOTA_LIMIT_EXCEEDED.getRejectionReason().get()).build();
        }
        return quotaBuilder.withQuota(systemTokenBucket.getNumberOfTokens()).withMessage(quotaMessage).build();
    }

    @Inject public  SystemQuotaController(SystemDisruptionBudgetResolver systemDisruptionBudgetResolver,
                                 TitusRuntime titusRuntime);
    @VisibleForTesting  SystemQuotaController(SystemDisruptionBudgetResolver systemDisruptionBudgetResolver,
                          Duration retryInterval,
                          TitusRuntime titusRuntime);

}