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(),
metric.getNrOfDatabaseQueries(),
metric.getDatabaseQueryTime(),
metric.getQueries().stream().filter(q -> !q.isSuccess()).count(),
metric.getQueries().stream().filter(q -> !q.isSuccess()).mapToLong(q -> q.getRequestCompleteTime()-q.getRequestStartTime()).sum()
metric.getQueries().stream().filter(q -> !q.isIntolerable()).count(),
metric.getQueries().stream().filter(q -> !q.isIntolerable()).mapToLong(q -> q.getRequestCompleteTime()-q.getRequestStartTime()).sum()
);
return true;
}
Expand Down
Expand Up @@ -20,13 +20,13 @@
@JsonIgnoreProperties(ignoreUnknown = true)
public class QueryMetric {
private String query;
private boolean success;
private boolean intolerable;
private long requestStartTime;
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.success = success;
this.intolerable = intolerable;
this.requestStartTime = start;
this.requestCompleteTime = start + delta;
}
Expand All @@ -35,8 +35,8 @@ public String getQuery() {
return query;
}

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

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

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

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

public class QueryFilter extends AbstractQueryReport {

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

protected void prepareCall(String arg0, long arg1) {
}
protected void prepareStatement(String arg0, long arg1) {
}
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();
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,
String name, long start, Throwable 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;
}

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

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

@Test
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());
assertEquals(1, metric.getQueries().size());
assertEquals("query", metric.getQueries().get(0).getQuery());
assertEquals(0, metric.getQueries().get(0).getRequestStartTime());
assertFalse(metric.getQueries().get(0).isSuccess());
assertEquals(start, metric.getQueries().get(0).getRequestStartTime());
assertFalse(metric.getQueries().get(0).isIntolerable());
}

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

@Test
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());
assertEquals(1, metric.getQueries().size());
assertEquals("query", metric.getQueries().get(0).getQuery());
assertEquals(0, metric.getQueries().get(0).getRequestStartTime());
assertEquals(1, metric.getQueries().get(0).getRequestCompleteTime());
assertTrue(metric.getQueries().get(0).isSuccess());
assertEquals(delta, metric.getQueries().get(0).getRequestCompleteTime());
assertTrue(metric.getQueries().get(0).isIntolerable());
}

}

0 comments on commit 9615a78

Please sign in to comment.