Skip to content

Commit

Permalink
Report only slow queries, slower than 2000 milliseconds
Browse files Browse the repository at this point in the history
  • Loading branch information
fhanik committed Sep 22, 2017
1 parent 3a78488 commit 9615a78
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 19 deletions.
Expand Up @@ -66,8 +66,8 @@ public boolean offer(RequestMetric metric) {
totals.add(metric.getRequestCompleteTime()- metric.getRequestStartTime(), totals.add(metric.getRequestCompleteTime()- metric.getRequestStartTime(),
metric.getNrOfDatabaseQueries(), metric.getNrOfDatabaseQueries(),
metric.getDatabaseQueryTime(), metric.getDatabaseQueryTime(),
metric.getQueries().stream().filter(q -> !q.isSuccess()).count(), metric.getQueries().stream().filter(q -> !q.isIntolerable()).count(),
metric.getQueries().stream().filter(q -> !q.isSuccess()).mapToLong(q -> q.getRequestCompleteTime()-q.getRequestStartTime()).sum() metric.getQueries().stream().filter(q -> !q.isIntolerable()).mapToLong(q -> q.getRequestCompleteTime()-q.getRequestStartTime()).sum()
); );
return true; return true;
} }
Expand Down
Expand Up @@ -20,13 +20,13 @@
@JsonIgnoreProperties(ignoreUnknown = true) @JsonIgnoreProperties(ignoreUnknown = true)
public class QueryMetric { public class QueryMetric {
private String query; private String query;
private boolean success; private boolean intolerable;
private long requestStartTime; private long requestStartTime;
private long requestCompleteTime; private long requestCompleteTime;


public QueryMetric(String query, long start, long delta, boolean success) { public QueryMetric(String query, long start, long delta, boolean intolerable) {
this.query = query; this.query = query;
this.success = success; this.intolerable = intolerable;
this.requestStartTime = start; this.requestStartTime = start;
this.requestCompleteTime = start + delta; this.requestCompleteTime = start + delta;
} }
Expand All @@ -35,8 +35,8 @@ public String getQuery() {
return query; return query;
} }


public boolean isSuccess() { public boolean isIntolerable() {
return success; return intolerable;
} }


public long getRequestStartTime() { public long getRequestStartTime() {
Expand Down
Expand Up @@ -36,7 +36,7 @@ public void getQuery() throws Exception {


@Test @Test
public void isSuccess() throws Exception { public void isSuccess() throws Exception {
assertEquals(true, metric.isSuccess()); assertEquals(true, metric.isIntolerable());
} }


@Test @Test
Expand Down
Expand Up @@ -18,17 +18,22 @@
import org.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport; import org.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport;


public class QueryFilter extends AbstractQueryReport { public class QueryFilter extends AbstractQueryReport {

public QueryFilter() {
super.setThreshold(2000);
}

protected void prepareCall(String arg0, long arg1) { protected void prepareCall(String arg0, long arg1) {
} }
protected void prepareStatement(String arg0, long arg1) { protected void prepareStatement(String arg0, long arg1) {
} }
public void closeInvoked() { public void closeInvoked() {
} }


protected void report(String query, long start, long delta, boolean success) { protected void report(String query, long start, long delta) {
RequestMetric metric = MetricsAccessor.getCurrent(); RequestMetric metric = MetricsAccessor.getCurrent();
if (metric!=null) { if (metric!=null) {
metric.addQuery(new QueryMetric(query, start, delta, success)); metric.addQuery(new QueryMetric(query, start, delta, delta>getThreshold()));
} }
} }


Expand All @@ -37,15 +42,16 @@ protected void report(String query, long start, long delta, boolean success) {
protected String reportFailedQuery(String query, Object[] args, protected String reportFailedQuery(String query, Object[] args,
String name, long start, Throwable t) { String name, long start, Throwable t) {
String sql = super.reportFailedQuery(query, args, name, start, t); String sql = super.reportFailedQuery(query, args, name, start, t);
report(sql, start, System.currentTimeMillis()-start, false); long delta = System.currentTimeMillis() - start;
report(sql, start, delta);
return sql; return sql;
} }


@Override @Override
protected String reportQuery(String query, Object[] args, protected String reportQuery(String query, Object[] args,
String name, long start, long delta) { String name, long start, long delta) {
String sql = super.reportQuery(query, args, name, start, delta); String sql = super.reportQuery(query, args, name, start, delta);
report(sql, start, delta, true); report(sql, start, delta);
return sql; return sql;
} }


Expand Down
Expand Up @@ -44,12 +44,13 @@ public void clear() {


@Test @Test
public void reportFailedQuery() throws Exception { public void reportFailedQuery() throws Exception {
filter.reportFailedQuery("query", null, "name", 0, null); long start = System.currentTimeMillis();
filter.reportFailedQuery("query", null, "name", start, null);
assertNotNull(metric.getQueries()); assertNotNull(metric.getQueries());
assertEquals(1, metric.getQueries().size()); assertEquals(1, metric.getQueries().size());
assertEquals("query", metric.getQueries().get(0).getQuery()); assertEquals("query", metric.getQueries().get(0).getQuery());
assertEquals(0, metric.getQueries().get(0).getRequestStartTime()); assertEquals(start, metric.getQueries().get(0).getRequestStartTime());
assertFalse(metric.getQueries().get(0).isSuccess()); assertFalse(metric.getQueries().get(0).isIntolerable());
} }


@Test @Test
Expand All @@ -60,18 +61,19 @@ public void reportQuery() throws Exception {
assertEquals("query", metric.getQueries().get(0).getQuery()); assertEquals("query", metric.getQueries().get(0).getQuery());
assertEquals(0, metric.getQueries().get(0).getRequestStartTime()); assertEquals(0, metric.getQueries().get(0).getRequestStartTime());
assertEquals(1, metric.getQueries().get(0).getRequestCompleteTime()); assertEquals(1, metric.getQueries().get(0).getRequestCompleteTime());
assertTrue(metric.getQueries().get(0).isSuccess()); assertFalse(metric.getQueries().get(0).isIntolerable());
} }


@Test @Test
public void reportSlowQuery() throws Exception { public void reportSlowQuery() throws Exception {
filter.reportSlowQuery("query", null, "name", 0, 1); long delta = filter.getThreshold() + 10;
filter.reportSlowQuery("query", null, "name", 0, delta);
assertNotNull(metric.getQueries()); assertNotNull(metric.getQueries());
assertEquals(1, metric.getQueries().size()); assertEquals(1, metric.getQueries().size());
assertEquals("query", metric.getQueries().get(0).getQuery()); assertEquals("query", metric.getQueries().get(0).getQuery());
assertEquals(0, metric.getQueries().get(0).getRequestStartTime()); assertEquals(0, metric.getQueries().get(0).getRequestStartTime());
assertEquals(1, metric.getQueries().get(0).getRequestCompleteTime()); assertEquals(delta, metric.getQueries().get(0).getRequestCompleteTime());
assertTrue(metric.getQueries().get(0).isSuccess()); assertTrue(metric.getQueries().get(0).isIntolerable());
} }


} }

0 comments on commit 9615a78

Please sign in to comment.