Skip to content

Commit 580b666

Browse files
committed
Add endpoint method and path to metrics name.
Signed-off-by: Jakub Dardzinski <kuba0221@gmail.com>
1 parent 8010387 commit 580b666

4 files changed

Lines changed: 70 additions & 1 deletion

File tree

api/src/main/java/marquez/MarquezApp.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import marquez.db.DbMigration;
3737
import marquez.jobs.DbRetentionJob;
3838
import marquez.logging.LoggingMdcFilter;
39+
import marquez.logging.SmarterNameStrategy;
3940
import marquez.tracing.SentryConfig;
4041
import marquez.tracing.TracingContainerResponseFilter;
4142
import marquez.tracing.TracingSQLLogger;
@@ -162,7 +163,7 @@ private Jdbi newJdbi(
162163
.installPlugin(new SqlObjectPlugin())
163164
.installPlugin(new PostgresPlugin())
164165
.installPlugin(new Jackson2Plugin());
165-
SqlLogger sqlLogger = new InstrumentedSqlLogger(env.metrics());
166+
SqlLogger sqlLogger = new InstrumentedSqlLogger(env.metrics(), new SmarterNameStrategy());
166167
if (isSentryEnabled(config)) {
167168
sqlLogger = new TracingSQLLogger(sqlLogger);
168169
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* Copyright 2018-2023 contributors to the Marquez project
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package marquez.logging;
7+
8+
import com.codahale.metrics.MetricRegistry;
9+
import com.codahale.metrics.jdbi3.strategies.StatementNameStrategy;
10+
import org.jdbi.v3.core.extension.ExtensionMethod;
11+
import org.jdbi.v3.core.statement.StatementContext;
12+
import org.slf4j.MDC;
13+
14+
public class EndpointNameStrategy implements StatementNameStrategy {
15+
16+
@Override
17+
public String getStatementName(StatementContext statementContext) {
18+
ExtensionMethod extensionMethod = statementContext.getExtensionMethod();
19+
if (extensionMethod != null) {
20+
if (MDC.get("method") != null && MDC.get("pathWithParams") != null) {
21+
StringBuilder builder =
22+
new StringBuilder()
23+
.append(extensionMethod.getMethod().getName())
24+
.append(".")
25+
.append(MDC.get("method"))
26+
.append(".")
27+
.append(MDC.get("pathWithParams"));
28+
return MetricRegistry.name(extensionMethod.getType(), builder.toString());
29+
}
30+
}
31+
return null;
32+
}
33+
}

api/src/main/java/marquez/logging/LoggingMdcFilter.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,18 @@
66
package marquez.logging;
77

88
import java.io.IOException;
9+
import java.util.List;
910
import java.util.UUID;
1011
import javax.ws.rs.container.CompletionCallback;
1112
import javax.ws.rs.container.ContainerRequestContext;
1213
import javax.ws.rs.container.ContainerRequestFilter;
1314
import javax.ws.rs.container.ContainerResponseContext;
1415
import javax.ws.rs.container.ContainerResponseFilter;
16+
import javax.ws.rs.core.Context;
1517
import javax.ws.rs.core.Response;
1618
import lombok.extern.slf4j.Slf4j;
19+
import org.glassfish.jersey.server.ExtendedUriInfo;
20+
import org.glassfish.jersey.uri.UriTemplate;
1721
import org.slf4j.MDC;
1822

1923
/**
@@ -28,19 +32,30 @@ public class LoggingMdcFilter
2832
private static final String REQUEST_ID = "requestID";
2933
private static final String METHOD = "method";
3034
private static final String PATH = "path";
35+
private static final String PATH_WITH_PARAMETERS = "pathWithParams";
36+
37+
@Context private ExtendedUriInfo uriInfo;
3138

3239
@Override
3340
public void onComplete(Throwable throwable) {
3441
MDC.remove(REQUEST_ID);
3542
MDC.remove(METHOD);
3643
MDC.remove(PATH);
44+
MDC.remove(PATH_WITH_PARAMETERS);
3745
}
3846

3947
@Override
4048
public void filter(ContainerRequestContext requestContext) throws IOException {
4149
MDC.put(REQUEST_ID, UUID.randomUUID().toString());
4250
MDC.put(METHOD, requestContext.getMethod());
4351
MDC.put(PATH, requestContext.getUriInfo().getPath());
52+
StringBuilder pathWithPlaceholders = new StringBuilder();
53+
54+
List<UriTemplate> matchedTemplates = uriInfo.getMatchedTemplates();
55+
for (int i = matchedTemplates.size() - 1; i >= 0; i--) {
56+
pathWithPlaceholders.append(matchedTemplates.get(i).getTemplate());
57+
}
58+
MDC.put(PATH_WITH_PARAMETERS, pathWithPlaceholders.toString());
4459
}
4560

4661
@Override
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* Copyright 2018-2023 contributors to the Marquez project
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package marquez.logging;
7+
8+
import com.codahale.metrics.jdbi3.strategies.DefaultNameStrategy;
9+
import com.codahale.metrics.jdbi3.strategies.DelegatingStatementNameStrategy;
10+
11+
public class SmarterNameStrategy extends DelegatingStatementNameStrategy {
12+
13+
public SmarterNameStrategy() {
14+
super(
15+
DefaultNameStrategy.CHECK_EMPTY,
16+
new EndpointNameStrategy(),
17+
DefaultNameStrategy.SQL_OBJECT,
18+
DefaultNameStrategy.CONSTANT_SQL_RAW);
19+
}
20+
}

0 commit comments

Comments
 (0)