Skip to content

Commit 6ce134b

Browse files
author
Vladimir Kotal
committed
perform most of top level request related recordings in StatisticsFilter
1 parent 24863c0 commit 6ce134b

File tree

3 files changed

+31
-56
lines changed

3 files changed

+31
-56
lines changed

opengrok-web/src/main/java/org/opengrok/web/AuthorizationFilter.java

Lines changed: 15 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@
2424
package org.opengrok.web;
2525

2626
import java.io.IOException;
27-
import java.time.Duration;
28-
import java.time.Instant;
2927
import java.util.logging.Level;
3028
import java.util.logging.Logger;
3129
import javax.servlet.Filter;
@@ -37,9 +35,6 @@
3735
import javax.servlet.http.HttpServletRequest;
3836
import javax.servlet.http.HttpServletResponse;
3937

40-
import io.micrometer.core.instrument.DistributionSummary;
41-
import io.micrometer.core.instrument.Timer;
42-
import org.opengrok.indexer.Metrics;
4338
import org.opengrok.indexer.configuration.Project;
4439
import org.opengrok.indexer.logger.LoggerFactory;
4540
import org.opengrok.indexer.web.PageConfig;
@@ -50,9 +45,6 @@ public class AuthorizationFilter implements Filter {
5045

5146
private static final Logger LOGGER = LoggerFactory.getLogger(AuthorizationFilter.class);
5247

53-
private final DistributionSummary requests = Metrics.getRegistry().summary(StatisticsFilter.REQUESTS_METRIC);
54-
private final Timer requestsForbidden = Metrics.getRegistry().timer("requests.forbidden");
55-
5648
@Override
5749
public void init(FilterConfig fc) {
5850
}
@@ -62,7 +54,7 @@ public void doFilter(ServletRequest sr, ServletResponse sr1, FilterChain fc) thr
6254
HttpServletRequest httpReq = (HttpServletRequest) sr;
6355
HttpServletResponse httpRes = (HttpServletResponse) sr1;
6456

65-
// All RESTful API requests are allowed for now (also see LocalhostFilter).
57+
// All RESTful API requests are allowed here for now because they go through LocalhostFilter.
6658
// The /search endpoint will go through authorization via SearchEngine.search()
6759
// so does not have to be exempted here.
6860
if (httpReq.getServletPath().startsWith(RestApp.API_PATH)) {
@@ -79,39 +71,24 @@ public void doFilter(ServletRequest sr, ServletResponse sr1, FilterChain fc) thr
7971

8072
Project p = config.getProject();
8173
if (p != null && !config.isAllowed(p)) {
82-
Instant start = Instant.now();
83-
try {
84-
if (LOGGER.isLoggable(Level.INFO)) {
85-
if (httpReq.getRemoteUser() != null) {
86-
LOGGER.log(Level.INFO, "Access denied for user ''{0}'' for URI: {1}",
87-
new Object[] {Laundromat.launderLog(httpReq.getRemoteUser()),
88-
Laundromat.launderLog(httpReq.getRequestURI())});
89-
} else {
90-
LOGGER.log(Level.INFO, "Access denied for URI: {0}",
91-
Laundromat.launderLog(httpReq.getRequestURI()));
92-
}
93-
}
94-
95-
/*
96-
* Add the request to the statistics. This is called just once for a
97-
* single request otherwise the next filter will count the same
98-
* request twice ({@link StatisticsFilter#collectStats}).
99-
*
100-
* In this branch of the if statement the filter processing stopped
101-
* and does not follow to the StatisticsFilter.
102-
*/
103-
requests.record(1);
104-
105-
if (!config.getEnv().getIncludeFiles().getForbiddenIncludeFileContent(false).isEmpty()) {
106-
sr.getRequestDispatcher("/eforbidden").forward(sr, sr1);
107-
return;
74+
if (LOGGER.isLoggable(Level.INFO)) {
75+
if (httpReq.getRemoteUser() != null) {
76+
LOGGER.log(Level.INFO, "Access denied for user ''{0}'' for URI: {1}",
77+
new Object[] {Laundromat.launderLog(httpReq.getRemoteUser()),
78+
Laundromat.launderLog(httpReq.getRequestURI())});
79+
} else {
80+
LOGGER.log(Level.INFO, "Access denied for URI: {0}",
81+
Laundromat.launderLog(httpReq.getRequestURI()));
10882
}
83+
}
10984

110-
httpRes.sendError(HttpServletResponse.SC_FORBIDDEN, "Access forbidden");
85+
if (!config.getEnv().getIncludeFiles().getForbiddenIncludeFileContent(false).isEmpty()) {
86+
sr.getRequestDispatcher("/eforbidden").forward(sr, sr1);
11187
return;
112-
} finally {
113-
requestsForbidden.record(Duration.between(start, Instant.now()));
11488
}
89+
90+
httpRes.sendError(HttpServletResponse.SC_FORBIDDEN, "Access forbidden");
91+
return;
11592
}
11693
fc.doFilter(sr, sr1);
11794
}

opengrok-web/src/main/java/org/opengrok/web/StatisticsFilter.java

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,12 @@
3232
import javax.servlet.ServletRequest;
3333
import javax.servlet.ServletResponse;
3434
import javax.servlet.http.HttpServletRequest;
35+
import javax.servlet.http.HttpServletResponse;
3536

3637
import io.micrometer.core.instrument.DistributionSummary;
3738
import io.micrometer.core.instrument.Timer;
3839
import org.opengrok.indexer.Metrics;
3940
import org.opengrok.indexer.web.PageConfig;
40-
import org.opengrok.indexer.web.Prefix;
4141
import org.opengrok.indexer.web.SearchHelper;
4242

4343
public class StatisticsFilter implements Filter {
@@ -58,24 +58,24 @@ public void init(FilterConfig fc) throws ServletException {
5858
}
5959

6060
@Override
61-
public void doFilter(ServletRequest sr, ServletResponse sr1, FilterChain fc)
61+
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain fc)
6262
throws IOException, ServletException {
63-
/*
64-
* Add the request to the statistics. Be aware of the colliding call in
65-
* {@code AuthorizationFilter#doFilter}.
66-
*/
63+
6764
requests.record(1);
6865

69-
HttpServletRequest httpReq = (HttpServletRequest) sr;
66+
HttpServletRequest httpReq = (HttpServletRequest) servletRequest;
7067

7168
Instant start = Instant.now();
7269

7370
PageConfig config = PageConfig.get(httpReq);
7471

75-
fc.doFilter(sr, sr1);
72+
fc.doFilter(servletRequest, servletResponse);
7673

77-
Duration duration = Duration.between(start, Instant.now());
74+
measure((HttpServletResponse) servletResponse, httpReq, Duration.between(start, Instant.now()), config);
75+
}
7876

77+
private void measure(HttpServletResponse httpResponse, HttpServletRequest httpReq,
78+
Duration duration, PageConfig config) {
7979
String category;
8080
if (isRoot(httpReq)) {
8181
category = "root";
@@ -84,17 +84,15 @@ public void doFilter(ServletRequest sr, ServletResponse sr1, FilterChain fc)
8484
}
8585

8686
Timer categoryTimer = Timer.builder("requests.latency").
87-
tags("category", category).
87+
tags("category", category, "code", String.valueOf(httpResponse.getStatus())).
8888
register(Metrics.getRegistry());
8989
categoryTimer.record(duration);
9090

9191
SearchHelper helper = (SearchHelper) config.getRequestAttribute(SearchHelper.REQUEST_ATTR);
9292
if (helper != null) {
9393
if (helper.hits == null || helper.hits.length == 0) {
94-
// empty search
9594
emptySearch.record(duration);
9695
} else {
97-
// successful search
9896
successfulSearch.record(duration);
9997
}
10098
}

opengrok-web/src/main/webapp/WEB-INF/web.xml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,19 @@
1616
<listener-class>org.opengrok.web.WebappListener</listener-class>
1717
</listener>
1818
<filter>
19-
<filter-name>AuthorizationFilter</filter-name>
20-
<filter-class>org.opengrok.web.AuthorizationFilter</filter-class>
19+
<filter-name>StatisticsFilter</filter-name>
20+
<filter-class>org.opengrok.web.StatisticsFilter</filter-class>
2121
</filter>
2222
<filter-mapping>
23-
<filter-name>AuthorizationFilter</filter-name>
23+
<filter-name>StatisticsFilter</filter-name>
2424
<url-pattern>/*</url-pattern>
2525
</filter-mapping>
2626
<filter>
27-
<filter-name>StatisticsFilter</filter-name>
28-
<filter-class>org.opengrok.web.StatisticsFilter</filter-class>
27+
<filter-name>AuthorizationFilter</filter-name>
28+
<filter-class>org.opengrok.web.AuthorizationFilter</filter-class>
2929
</filter>
3030
<filter-mapping>
31-
<filter-name>StatisticsFilter</filter-name>
31+
<filter-name>AuthorizationFilter</filter-name>
3232
<url-pattern>/*</url-pattern>
3333
</filter-mapping>
3434
<filter>

0 commit comments

Comments
 (0)