From d20be85bc0b435c909dcf99235372cdfa7e7f689 Mon Sep 17 00:00:00 2001 From: Suman Das <59254445+sumandas0@users.noreply.github.com> Date: Mon, 18 Nov 2024 23:13:13 +0530 Subject: [PATCH 1/4] feat: add client origin tag in prometheus --- .../apache/atlas/service/metrics/MetricsRegistry.java | 2 +- .../service/metrics/MetricsRegistryServiceImpl.java | 5 +++-- .../main/java/org/apache/atlas/RequestContext.java | 11 ++++++++++- .../org/apache/atlas/web/filters/AuditFilter.java | 2 ++ 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/org/apache/atlas/service/metrics/MetricsRegistry.java b/common/src/main/java/org/apache/atlas/service/metrics/MetricsRegistry.java index 89741554872..60c1553f9c5 100644 --- a/common/src/main/java/org/apache/atlas/service/metrics/MetricsRegistry.java +++ b/common/src/main/java/org/apache/atlas/service/metrics/MetricsRegistry.java @@ -8,7 +8,7 @@ public interface MetricsRegistry { - void collect(String requestId, String requestUri, AtlasPerfMetrics metrics); + void collect(String requestId, String requestUri, AtlasPerfMetrics metrics, String clientOrigin); void collectApplicationMetrics(String requestId, String requestUri, List applicationMetrics); diff --git a/common/src/main/java/org/apache/atlas/service/metrics/MetricsRegistryServiceImpl.java b/common/src/main/java/org/apache/atlas/service/metrics/MetricsRegistryServiceImpl.java index 19171325e27..e11fc5725fa 100644 --- a/common/src/main/java/org/apache/atlas/service/metrics/MetricsRegistryServiceImpl.java +++ b/common/src/main/java/org/apache/atlas/service/metrics/MetricsRegistryServiceImpl.java @@ -30,6 +30,7 @@ public class MetricsRegistryServiceImpl implements MetricsRegistry { private static final String NAME = "name"; private static final String URI = "uri"; + private static final String ORIGIN = "origin"; private static final String METHOD_DIST_SUMMARY = "method_dist_summary"; private static final String APPLICATION_LEVEL_METRICS_SUMMARY = "application_level_metrics_summary"; private static final double[] PERCENTILES = {0.99}; @@ -43,7 +44,7 @@ public MetricsRegistryServiceImpl() throws AtlasException { } @Override - public void collect(String requestId, String requestUri, AtlasPerfMetrics metrics) { + public void collect(String requestId, String requestUri, AtlasPerfMetrics metrics, String clientOrigin) { try { if (!ApplicationProperties.get().getBoolean(METHOD_LEVEL_METRICS_ENABLE, false)) { return; @@ -52,7 +53,7 @@ public void collect(String requestId, String requestUri, AtlasPerfMetrics metric for (String name : this.filteredMethods) { if(metrics.hasMetric(name)) { AtlasPerfMetrics.Metric metric = metrics.getMetric(name); - Timer.builder(METHOD_DIST_SUMMARY).tags(Tags.of(NAME, metric.getName(), URI, requestUri)).publishPercentiles(PERCENTILES) + Timer.builder(METHOD_DIST_SUMMARY).tags(Tags.of(NAME, metric.getName(), URI, requestUri, ORIGIN, clientOrigin)).publishPercentiles(PERCENTILES) .register(getMeterRegistry()).record(metric.getTotalTimeMSecs(), TimeUnit.MILLISECONDS); } } diff --git a/server-api/src/main/java/org/apache/atlas/RequestContext.java b/server-api/src/main/java/org/apache/atlas/RequestContext.java index 814a4cb4500..a2dad1b68d6 100644 --- a/server-api/src/main/java/org/apache/atlas/RequestContext.java +++ b/server-api/src/main/java/org/apache/atlas/RequestContext.java @@ -80,6 +80,7 @@ public class RequestContext { private Set userGroups; private String clientIPAddress; private List forwardedAddresses; + private String clientOrigin; private DeleteType deleteType = DeleteType.DEFAULT; private boolean isPurgeRequested = false; private int maxAttempts = 1; @@ -178,7 +179,7 @@ public void clearCache() { if (metrics != null && !metrics.isEmpty()) { METRICS.debug(metrics.toString()); if (Objects.nonNull(this.metricsRegistry)){ - this.metricsRegistry.collect(traceId, this.requestUri, metrics); + this.metricsRegistry.collect(traceId, this.requestUri, metrics, this.getClientOrigin()); } metrics.clear(); } @@ -744,6 +745,14 @@ public void setIncludeClassificationNames(boolean includeClassificationNames) { this.includeClassificationNames = includeClassificationNames; } + public String getClientOrigin() { + return clientOrigin; + } + + public void setClientOrigin(String clientOrigin) { + this.clientOrigin = clientOrigin; + } + public class EntityGuidPair { private final Object entity; private final String guid; diff --git a/webapp/src/main/java/org/apache/atlas/web/filters/AuditFilter.java b/webapp/src/main/java/org/apache/atlas/web/filters/AuditFilter.java index d3cb21b94dc..53a8213be9a 100755 --- a/webapp/src/main/java/org/apache/atlas/web/filters/AuditFilter.java +++ b/webapp/src/main/java/org/apache/atlas/web/filters/AuditFilter.java @@ -90,6 +90,7 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha final Set userGroups = AtlasAuthorizationUtils.getCurrentUserGroups(); final String deleteType = httpRequest.getParameter("deleteType"); final boolean skipFailedEntities = Boolean.parseBoolean(httpRequest.getParameter("skipFailedEntities")); + final String clientOrigin = httpRequest.getHeader("X-Atlan-Client-Origin"); try { currentThread.setName(formatName(oldName, internalRequestId)); @@ -103,6 +104,7 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha requestContext.setCreateShellEntityForNonExistingReference(createShellEntityForNonExistingReference); requestContext.setForwardedAddresses(AtlasAuthorizationUtils.getForwardedAddressesFromRequest(httpRequest)); requestContext.setSkipFailedEntities(skipFailedEntities); + requestContext.setClientOrigin(httpRequest.getHeader("X-Atlan-Client-Origin")); requestContext.setMetricRegistry(metricsRegistry); MDC.put(TRACE_ID, internalRequestId); MDC.put(X_ATLAN_REQUEST_ID, ofNullable(httpRequest.getHeader(X_ATLAN_REQUEST_ID)).orElse(EMPTY)); From c034fcbc581dfced0e98eb42cedb5cc21720eb82 Mon Sep 17 00:00:00 2001 From: Suman Das <59254445+sumandas0@users.noreply.github.com> Date: Tue, 19 Nov 2024 10:51:07 +0530 Subject: [PATCH 2/4] feat: remove redundunt code --- .../src/main/java/org/apache/atlas/web/filters/AuditFilter.java | 1 - 1 file changed, 1 deletion(-) diff --git a/webapp/src/main/java/org/apache/atlas/web/filters/AuditFilter.java b/webapp/src/main/java/org/apache/atlas/web/filters/AuditFilter.java index 53a8213be9a..d92bb6b7941 100755 --- a/webapp/src/main/java/org/apache/atlas/web/filters/AuditFilter.java +++ b/webapp/src/main/java/org/apache/atlas/web/filters/AuditFilter.java @@ -90,7 +90,6 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha final Set userGroups = AtlasAuthorizationUtils.getCurrentUserGroups(); final String deleteType = httpRequest.getParameter("deleteType"); final boolean skipFailedEntities = Boolean.parseBoolean(httpRequest.getParameter("skipFailedEntities")); - final String clientOrigin = httpRequest.getHeader("X-Atlan-Client-Origin"); try { currentThread.setName(formatName(oldName, internalRequestId)); From 40f98972d10ce42f04d6ed5e5188bc8416e5a83e Mon Sep 17 00:00:00 2001 From: Suman Das <59254445+sumandas0@users.noreply.github.com> Date: Tue, 19 Nov 2024 11:23:44 +0530 Subject: [PATCH 3/4] nit: made the hardcoded string o var --- .../main/java/org/apache/atlas/web/filters/AuditFilter.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/webapp/src/main/java/org/apache/atlas/web/filters/AuditFilter.java b/webapp/src/main/java/org/apache/atlas/web/filters/AuditFilter.java index d92bb6b7941..1f6776592ec 100755 --- a/webapp/src/main/java/org/apache/atlas/web/filters/AuditFilter.java +++ b/webapp/src/main/java/org/apache/atlas/web/filters/AuditFilter.java @@ -60,6 +60,7 @@ public class AuditFilter implements Filter { private static final Logger AUDIT_LOG = LoggerFactory.getLogger("AUDIT"); public static final String TRACE_ID = "trace_id"; public static final String X_ATLAN_REQUEST_ID = "X-Atlan-Request-Id"; + public static final String X_ATLAN_CLIENT_ORIGIN = "X-Atlan-Client-Origin"; private boolean deleteTypeOverrideEnabled = false; private boolean createShellEntityForNonExistingReference = false; @@ -103,7 +104,7 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha requestContext.setCreateShellEntityForNonExistingReference(createShellEntityForNonExistingReference); requestContext.setForwardedAddresses(AtlasAuthorizationUtils.getForwardedAddressesFromRequest(httpRequest)); requestContext.setSkipFailedEntities(skipFailedEntities); - requestContext.setClientOrigin(httpRequest.getHeader("X-Atlan-Client-Origin")); + requestContext.setClientOrigin(httpRequest.getHeader(X_ATLAN_CLIENT_ORIGIN)); requestContext.setMetricRegistry(metricsRegistry); MDC.put(TRACE_ID, internalRequestId); MDC.put(X_ATLAN_REQUEST_ID, ofNullable(httpRequest.getHeader(X_ATLAN_REQUEST_ID)).orElse(EMPTY)); From b3f24c4cabd1004ed37e144329c1e0d7d0001349 Mon Sep 17 00:00:00 2001 From: Suman Das <59254445+sumandas0@users.noreply.github.com> Date: Tue, 19 Nov 2024 11:47:43 +0530 Subject: [PATCH 4/4] feat: add default tag --- server-api/src/main/java/org/apache/atlas/RequestContext.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server-api/src/main/java/org/apache/atlas/RequestContext.java b/server-api/src/main/java/org/apache/atlas/RequestContext.java index a2dad1b68d6..45e63641c5f 100644 --- a/server-api/src/main/java/org/apache/atlas/RequestContext.java +++ b/server-api/src/main/java/org/apache/atlas/RequestContext.java @@ -750,7 +750,7 @@ public String getClientOrigin() { } public void setClientOrigin(String clientOrigin) { - this.clientOrigin = clientOrigin; + this.clientOrigin = StringUtils.isEmpty(this.clientOrigin) ? "other" :clientOrigin; } public class EntityGuidPair {