code: func NewEventCorrelator(clock clock.Clock) *EventCorrelator {
  	cacheSize := maxLruCacheEntries
  	spamFilter := NewEventSourceObjectSpamFilter(cacheSize, defaultSpamBurst, defaultSpamQPS, clock)
  	return &EventCorrelator{
  		filterFunc: spamFilter.Filter,
  		aggregator: NewEventAggregator(
  			cacheSize,
  			EventAggregatorByReasonFunc,
  			EventAggregatorByReasonMessageFunc,
  			defaultAggregateMaxEvents,
  			defaultAggregateIntervalInSeconds,
  			clock),
  
  		logger: newEventLogger(cacheSize, clock),
  	}
  }
docs: // NewEventCorrelator returns an EventCorrelator configured with default values.
  //
  // The EventCorrelator is responsible for event filtering, aggregating, and counting
  // prior to interacting with the API server to record the event.
  //
  // The default behavior is as follows:
  //   * Aggregation is performed if a similar event is recorded 10 times in a
  //     in a 10 minute rolling interval.  A similar event is an event that varies only by
  //     the Event.Message field.  Rather than recording the precise event, aggregation
  //     will create a new event whose message reports that it has combined events with
  //     the same reason.
  //   * Events are incrementally counted if the exact same event is encountered multiple
  //     times.
  //   * A source may burst 25 events about an object, but has a refill rate budget
  //     per object of 1 event every 5 minutes to control long-tail of spam.