code: private synchronized boolean needsToThrottle(String signature)
    {
      AtomicInteger sigCount;
  
      // Are we already throttling this signature?
      if (throttledIncidents.containsKey(signature))
      {
        // Lazily check if it's time to unthrottle
        if (throttledIncidents.get(signature).plusHours(THROTTLE_DURATION_HRS).
            compareTo(DateTime.now()) <= 0)
        {
          // Start counting the # of times we've seen this again & stop throttling.
          throttledIncidents.remove(signature);
          incidentCounter.put(signature, new AtomicInteger(1));
          return false;
        }
  
        return true;
      }
  
      sigCount = incidentCounter.get(signature);
      if (sigCount == null)
      {
        // If there isn't an entry to track this signature, make one.
        incidentCounter.put(signature, sigCount = new AtomicInteger(0));
      }
      else if (sigCount.get() + 1 >= INCIDENT_THROTTLE_LIMIT_PER_HR)
      {
        // We've hit the limit so throttle.
        incidentCounter.remove(signature);
        throttledIncidents.put(signature, DateTime.now());
        return true;
      }
  
      sigCount.incrementAndGet();
      return false;
    }
docs: Checks to see if the reporting of an incident should be throttled due
  to the number of times the signature has been seen in the last hour
  
  @param signature incident signature
  @return true if incidents needs to be throttled