code: synchronized public void check() {
  		if(lastCheckpoint < 0) {
  			lastCheckpoint = System.currentTimeMillis();
  		}
  		
  		requests++;
  		long interval = System.currentTimeMillis() - lastCheckpoint;
  		if(requests >= maxRequests) {
  			try {
  				long sleepTime = minInterval - interval;
  				if(sleepTime > 0) {
  					logger.info("Request limit reached. Wait for " + sleepTime/1000 + " seconds");
  					Thread.sleep(sleepTime);
  				}
  			} catch (InterruptedException e) {
  				logger.error(e.getMessage());
  				return;
  			}
  			finally {
  				requests = 0;
  				lastCheckpoint = System.currentTimeMillis();
  			}
  		}
  		else if(interval > minInterval) {
  			requests = 0;
  			lastCheckpoint = System.currentTimeMillis();
  		}
  	}
docs: /*
  In a more sophisticated design this operation will be part of the
  monitor module.