/** * @return a new {@link Spy} instance for currenth thread only * @since 3.1 */ public static CurrentThreadSpy spyCurrentThread() { return new CurrentThreadSpy(); }
public void process(FilterChain chain) throws IOException, ServletException { try { processImpl(chain); } finally { spy.close(); } }
@Test public void testCurrentThreadSpy() throws Exception { CurrentThreadSpy spy = Sniffy.spyCurrentThread(); executeStatements(2); executeStatementsInOtherThread(3); assertEquals(2, spy.executedStatements()); assertEquals(1, spy.getExecutedStatements().size()); assertEquals(2, spy.getExecutedStatements().values().iterator().next().queries.get()); }
private void updateRequestCache() { Map<StatementMetaData, SqlStats> executedStatements = spy.getExecutedStatements(); Map<SocketMetaData, SocketStats> socketOperations = spy.getSocketOperations(); if ((null != executedStatements && !executedStatements.isEmpty()) || (null != socketOperations && !socketOperations.isEmpty()) || (null != requestStats.getExceptions() && !requestStats.getExceptions().isEmpty())) { if (null != executedStatements && !executedStatements.isEmpty()) { requestStats.addExecutedStatements(executedStatements); } if (null != socketOperations && !socketOperations.isEmpty()) { requestStats.addSocketOperations(socketOperations); } sniffyFilter.cache.put(requestId, requestStats); } httpServletRequest.setAttribute(SNIFFY_REQUEST_STATS_REQUEST_ATTRIBUTE_NAME, requestStats); }
@Override public void beforeClose(BufferedServletResponseWrapper wrapper, Buffer buffer) throws IOException { updateRequestCache(); if (injectHtml && isHtmlPage) { String characterEncoding = wrapper.getCharacterEncoding(); if (null == characterEncoding) { characterEncoding = Charset.defaultCharset().name(); } String snifferWidget = generateAndPadFooterHtml(spy.executedStatements(), getElapsedTime()); HtmlInjector htmlInjector = new HtmlInjector(buffer, characterEncoding); htmlInjector.injectAtTheEnd(snifferWidget); } }
private static void notifyListeners(SocketMetaData socketMetaData, long elapsedTime, int bytesDown, int bytesUp) { Iterator<WeakReference<Spy>> iterator = registeredSpies.iterator(); while (iterator.hasNext()) { WeakReference<Spy> spyReference = iterator.next(); Spy spy = spyReference.get(); if (null == spy) { iterator.remove(); } else { spy.addSocketOperation(socketMetaData, elapsedTime, bytesDown, bytesUp); } } Long threadId = Thread.currentThread().getId(); WeakReference<CurrentThreadSpy> spyReference = currentThreadSpies.get(threadId); if (null != spyReference) { CurrentThreadSpy spy = spyReference.get(); if (null == spy) { currentThreadSpies.remove(threadId); } else { spy.addSocketOperation(socketMetaData, elapsedTime, bytesDown, bytesUp); } } }
private static void notifyListeners(StatementMetaData statementMetaData) { Iterator<WeakReference<Spy>> iterator = registeredSpies.iterator(); while (iterator.hasNext()) { WeakReference<Spy> spyReference = iterator.next(); Spy spy = spyReference.get(); if (null == spy) { iterator.remove(); } else { spy.addReturnedRow(statementMetaData); } } Long threadId = Thread.currentThread().getId(); WeakReference<CurrentThreadSpy> spyReference = currentThreadSpies.get(threadId); if (null != spyReference) { CurrentThreadSpy spy = spyReference.get(); if (null == spy) { currentThreadSpies.remove(threadId); } else { spy.addReturnedRow(statementMetaData); } } }
private static void notifyListeners(StatementMetaData statementMetaData, long elapsedTime, int bytesDown, int bytesUp, int rowsUpdated) { Iterator<WeakReference<Spy>> iterator = registeredSpies.iterator(); while (iterator.hasNext()) { WeakReference<Spy> spyReference = iterator.next(); Spy spy = spyReference.get(); if (null == spy) { iterator.remove(); } else { spy.addExecutedStatement(statementMetaData, elapsedTime, bytesDown, bytesUp, rowsUpdated); } } Long threadId = Thread.currentThread().getId(); WeakReference<CurrentThreadSpy> spyReference = currentThreadSpies.get(threadId); if (null != spyReference) { CurrentThreadSpy spy = spyReference.get(); if (null == spy) { currentThreadSpies.remove(threadId); } else { spy.addExecutedStatement(statementMetaData, elapsedTime, bytesDown, bytesUp, rowsUpdated); } } }
private void updateRequestCache() { Map<StatementMetaData, SqlStats> executedStatements = spy.getExecutedStatements(); Map<SocketMetaData, SocketStats> socketOperations = spy.getSocketOperations(); if ((null != executedStatements && !executedStatements.isEmpty()) || (null != socketOperations && !socketOperations.isEmpty()) || (null != requestStats.getExceptions() && !requestStats.getExceptions().isEmpty())) { if (null != executedStatements && !executedStatements.isEmpty()) { requestStats.addExecutedStatements(executedStatements); } if (null != socketOperations && !socketOperations.isEmpty()) { requestStats.addSocketOperations(socketOperations); } sniffyFilter.cache.put(requestId, requestStats); } httpServletRequest.setAttribute(SNIFFY_REQUEST_STATS_REQUEST_ATTRIBUTE_NAME, requestStats); }
@Override public void beforeClose(BufferedServletResponseWrapper wrapper, Buffer buffer) throws IOException { updateRequestCache(); if (injectHtml && isHtmlPage) { String characterEncoding = wrapper.getCharacterEncoding(); if (null == characterEncoding) { characterEncoding = Charset.defaultCharset().name(); } String snifferWidget = generateAndPadFooterHtml(spy.executedStatements(), getElapsedTime()); HtmlInjector htmlInjector = new HtmlInjector(buffer, characterEncoding); htmlInjector.injectAtTheEnd(snifferWidget); } }
private static void notifyListeners(SocketMetaData socketMetaData, long elapsedTime, int bytesDown, int bytesUp) { Iterator<WeakReference<Spy>> iterator = registeredSpies.iterator(); while (iterator.hasNext()) { WeakReference<Spy> spyReference = iterator.next(); Spy spy = spyReference.get(); if (null == spy) { iterator.remove(); } else { spy.addSocketOperation(socketMetaData, elapsedTime, bytesDown, bytesUp); } } Long threadId = Thread.currentThread().getId(); WeakReference<CurrentThreadSpy> spyReference = currentThreadSpies.get(threadId); if (null != spyReference) { CurrentThreadSpy spy = spyReference.get(); if (null == spy) { currentThreadSpies.remove(threadId); } else { spy.addSocketOperation(socketMetaData, elapsedTime, bytesDown, bytesUp); } } }
private static void notifyListeners(StatementMetaData statementMetaData) { Iterator<WeakReference<Spy>> iterator = registeredSpies.iterator(); while (iterator.hasNext()) { WeakReference<Spy> spyReference = iterator.next(); Spy spy = spyReference.get(); if (null == spy) { iterator.remove(); } else { spy.addReturnedRow(statementMetaData); } } Long threadId = Thread.currentThread().getId(); WeakReference<CurrentThreadSpy> spyReference = currentThreadSpies.get(threadId); if (null != spyReference) { CurrentThreadSpy spy = spyReference.get(); if (null == spy) { currentThreadSpies.remove(threadId); } else { spy.addReturnedRow(statementMetaData); } } }
private static void notifyListeners(StatementMetaData statementMetaData, long elapsedTime, int bytesDown, int bytesUp, int rowsUpdated) { Iterator<WeakReference<Spy>> iterator = registeredSpies.iterator(); while (iterator.hasNext()) { WeakReference<Spy> spyReference = iterator.next(); Spy spy = spyReference.get(); if (null == spy) { iterator.remove(); } else { spy.addExecutedStatement(statementMetaData, elapsedTime, bytesDown, bytesUp, rowsUpdated); } } Long threadId = Thread.currentThread().getId(); WeakReference<CurrentThreadSpy> spyReference = currentThreadSpies.get(threadId); if (null != spyReference) { CurrentThreadSpy spy = spyReference.get(); if (null == spy) { currentThreadSpies.remove(threadId); } else { spy.addExecutedStatement(statementMetaData, elapsedTime, bytesDown, bytesUp, rowsUpdated); } } }
@Override public void onBeforeCommit(BufferedServletResponseWrapper wrapper, Buffer buffer) throws IOException { wrapper.addCorsHeadersHeaderIfRequired(); wrapper.setIntHeader(HEADER_NUMBER_OF_QUERIES, requestStats.executedStatements() + spy.executedStatements()); wrapper.setHeader(HEADER_TIME_TO_FIRST_BYTE, Long.toString(getTimeToFirstByte()));
public void process(FilterChain chain) throws IOException, ServletException { try { processImpl(chain); } finally { spy.close(); } }
/** * @return a new {@link Spy} instance for currenth thread only * @since 3.1 */ public static CurrentThreadSpy spyCurrentThread() { return new CurrentThreadSpy(); }
@Override public void onBeforeCommit(BufferedServletResponseWrapper wrapper, Buffer buffer) throws IOException { wrapper.addCorsHeadersHeaderIfRequired(); wrapper.setIntHeader(HEADER_NUMBER_OF_QUERIES, requestStats.executedStatements() + spy.executedStatements()); wrapper.setHeader(HEADER_TIME_TO_FIRST_BYTE, Long.toString(getTimeToFirstByte()));