BadCollector( OutputStream out, long tolerance, int collect, int backPressureThreshold, boolean skipBadEntriesLogging, Monitor monitor ) { this.out = new PrintStream( out ); this.tolerance = tolerance; this.collect = collect; this.backPressureThreshold = backPressureThreshold; this.logBadEntries = !skipBadEntriesLogging; this.monitor = monitor; this.logger = new AsyncEvents<>( this::processEvent, AsyncEvents.Monitor.NONE ); this.eventProcessor = new Thread( logger ); this.eventProcessor.start(); }
public AsyncRequestLog( FileSystemAbstraction fs, ZoneId logTimeZone, String logFile, long rotationSize, int rotationKeepNumber ) throws IOException { NamedThreadFactory threadFactory = new NamedThreadFactory( "HTTP-Log-Rotator", true ); ExecutorService rotationExecutor = Executors.newCachedThreadPool( threadFactory ); outputSupplier = new RotatingFileOutputStreamSupplier( fs, new File( logFile ), rotationSize, 0, rotationKeepNumber, rotationExecutor ); FormattedLogProvider logProvider = FormattedLogProvider.withZoneId( logTimeZone ) .toOutputStream( outputSupplier ); asyncLogProcessingExecutor = Executors.newSingleThreadExecutor( new NamedThreadFactory( "HTTP-Log-Writer" ) ); asyncEventProcessor = new AsyncEvents<>( this, this ); AsyncLogProvider asyncLogProvider = new AsyncLogProvider( asyncEventProcessor, logProvider ); log = asyncLogProvider.getLog( "REQUEST" ); }
@Test void mustNotProcessEventInSameThreadWhenNotShutDown() throws Exception { EventConsumer consumer = new EventConsumer(); AsyncEvents<Event> asyncEvents = new AsyncEvents<>( consumer, AsyncEvents.Monitor.NONE ); executor.submit( asyncEvents ); asyncEvents.send( new Event() ); Thread processingThread = consumer.poll( 10, TimeUnit.SECONDS ).processedBy; asyncEvents.shutdown(); assertThat( processingThread, is( not( Thread.currentThread() ) ) ); }
final CountDownLatch awaitStartLatch = new CountDownLatch( 1 ); final EventConsumer consumer = new EventConsumer(); final AsyncEvents<Event> asyncEvents = new AsyncEvents<>( consumer, AsyncEvents.Monitor.NONE ); executor.submit( asyncEvents );
@Test void eventsMustBeProcessedByBackgroundThread() throws Exception { EventConsumer consumer = new EventConsumer(); AsyncEvents<Event> asyncEvents = new AsyncEvents<>( consumer, AsyncEvents.Monitor.NONE ); executor.submit( asyncEvents ); Event firstSentEvent = new Event(); asyncEvents.send( firstSentEvent ); Event firstProcessedEvent = consumer.poll( 10, TimeUnit.SECONDS ); Event secondSentEvent = new Event(); asyncEvents.send( secondSentEvent ); Event secondProcessedEvent = consumer.poll( 10, TimeUnit.SECONDS ); asyncEvents.shutdown(); assertThat( firstProcessedEvent, is( firstSentEvent ) ); assertThat( secondProcessedEvent, is( secondSentEvent ) ); }
@Test void mustProcessEventsDirectlyWhenShutDown() { assertTimeout( ofSeconds( 10 ), () -> { EventConsumer consumer = new EventConsumer(); AsyncEvents<Event> asyncEvents = new AsyncEvents<>( consumer, AsyncEvents.Monitor.NONE ); executor.submit( asyncEvents ); asyncEvents.send( new Event() ); Thread threadForFirstEvent = consumer.poll( 10, TimeUnit.SECONDS ).processedBy; asyncEvents.shutdown(); assertThat( threadForFirstEvent, is( not( Thread.currentThread() ) ) ); Thread threadForSubsequentEvents; do { asyncEvents.send( new Event() ); threadForSubsequentEvents = consumer.poll( 10, TimeUnit.SECONDS ).processedBy; } while ( threadForSubsequentEvents != Thread.currentThread() ); } ); }
public BadCollector( OutputStream out, long tolerance, int collect, boolean skipBadEntriesLogging ) { this.out = new PrintStream( out ); this.tolerance = tolerance; this.collect = collect; this.logBadEntries = !skipBadEntriesLogging; this.logger = new AsyncEvents<>( this::processEvent, AsyncEvents.Monitor.NONE ); this.eventProcessor = new Thread( logger ); this.eventProcessor.start(); }
public AsyncRequestLog( FileSystemAbstraction fs, ZoneId logTimeZone, String logFile, long rotationSize, int rotationKeepNumber ) throws IOException { NamedThreadFactory threadFactory = new NamedThreadFactory( "HTTP-Log-Rotator", true ); ExecutorService rotationExecutor = Executors.newCachedThreadPool( threadFactory ); outputSupplier = new RotatingFileOutputStreamSupplier( fs, new File( logFile ), rotationSize, 0, rotationKeepNumber, rotationExecutor ); FormattedLogProvider logProvider = FormattedLogProvider.withZoneId( logTimeZone ) .toOutputStream( outputSupplier ); asyncLogProcessingExecutor = Executors.newSingleThreadExecutor( new NamedThreadFactory( "HTTP-Log-Writer" ) ); asyncEventProcessor = new AsyncEvents<>( this, this ); AsyncLogProvider asyncLogProvider = new AsyncLogProvider( asyncEventProcessor, logProvider ); log = asyncLogProvider.getLog( "REQUEST" ); }