Skip to content

Commit 56a3ee2

Browse files
authored
Add FilterProviderConfig to pass information to FilterProvider. (Eg. service name) (#379)
* Add FilterProviderConfig to pass information to FilterProvider. (Eg. service name) * Fix circular dependency using the initialize() function. * Remove unneeded dependency * Ran spotlessApply * Fix test mock
1 parent dd21236 commit 56a3ee2

File tree

5 files changed

+49
-8
lines changed

5 files changed

+49
-8
lines changed

filter-api/src/main/java/org/hypertrace/agent/filter/FilterRegistry.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.util.ServiceLoader;
2626
import org.hypertrace.agent.filter.api.Filter;
2727
import org.hypertrace.agent.filter.spi.FilterProvider;
28+
import org.hypertrace.agent.filter.spi.FilterProviderConfig;
2829
import org.slf4j.Logger;
2930
import org.slf4j.LoggerFactory;
3031

@@ -53,7 +54,8 @@ public static Filter getFilter() {
5354
synchronized (FilterRegistry.class) {
5455
if (filter == null) {
5556
try {
56-
filter = load(Collections.emptyList());
57+
FilterProviderConfig providerConfig = new FilterProviderConfig();
58+
filter = load(providerConfig, Collections.emptyList());
5759
} catch (Throwable t) {
5860
logger.error("Throwable thrown while loading filter jars", t);
5961
}
@@ -67,26 +69,28 @@ public static Filter getFilter() {
6769
* Initializes the registry by loading the filters. This method should be called only once at
6870
* javaagent startup.
6971
*
72+
* @param providerConfig config needed by the filter (Eg. service name)
7073
* @param jarPaths paths to filter jar files.
7174
*/
72-
public static void initialize(List<String> jarPaths) {
75+
public static void initialize(FilterProviderConfig providerConfig, List<String> jarPaths) {
7376
try {
74-
filter = load(jarPaths);
77+
filter = load(providerConfig, jarPaths);
7578
} catch (Throwable t) {
7679
logger.error("Throwable thrown while loading filter jars", t);
7780
}
7881
}
7982

80-
private static Filter load(List<String> jarPaths) {
83+
private static Filter load(FilterProviderConfig providerConfig, List<String> jarPaths) {
8184
ClassLoader cl = loadJars(jarPaths);
8285
ServiceLoader<FilterProvider> providers = ServiceLoader.load(FilterProvider.class, cl);
8386
List<Filter> filters = new ArrayList<>();
87+
8488
for (FilterProvider provider : providers) {
8589
String disabled = getProperty(getProviderDisabledPropertyName(provider.getClass()));
8690
if ("true".equalsIgnoreCase(disabled)) {
8791
continue;
8892
}
89-
Filter filter = provider.create();
93+
Filter filter = provider.create(providerConfig);
9094
if (filter == null) {
9195
logger.warn(String.format("%s returned null filter.", provider.getClass().getSimpleName()));
9296
} else {

filter-api/src/main/java/org/hypertrace/agent/filter/spi/FilterProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,5 @@ public interface FilterProvider {
3131
*
3232
* @return a filter instance.
3333
*/
34-
Filter create();
34+
Filter create(FilterProviderConfig config);
3535
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
* Copyright The Hypertrace Authors
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.hypertrace.agent.filter.spi;
18+
19+
/** {@link FilterProviderConfig} for {@link FilterProvider}. */
20+
public class FilterProviderConfig {
21+
public FilterProviderConfig() {}
22+
23+
private String serviceName = "";
24+
25+
public String getServiceName() {
26+
return serviceName;
27+
}
28+
29+
public void setServiceName(String serviceName) {
30+
this.serviceName = serviceName;
31+
}
32+
}

otel-extensions/src/main/java/org/hypertrace/agent/otel/extensions/FilterComponentInstaller.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.util.stream.Collectors;
2525
import org.hypertrace.agent.config.v1.Config.AgentConfig;
2626
import org.hypertrace.agent.filter.FilterRegistry;
27+
import org.hypertrace.agent.filter.spi.FilterProviderConfig;
2728
import org.hypertrace.agent.otel.extensions.config.HypertraceConfig;
2829

2930
@AutoService(AgentListener.class)
@@ -32,12 +33,15 @@ public class FilterComponentInstaller implements AgentListener {
3233
@Override
3334
public void beforeAgent(
3435
Config config, AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk) {
36+
FilterProviderConfig providerConfig = new FilterProviderConfig();
3537
AgentConfig agentConfig = HypertraceConfig.get();
38+
String serviceName = agentConfig.getServiceName().getValue();
39+
providerConfig.setServiceName(serviceName);
3640
List<String> jarPaths =
3741
agentConfig.getJavaagent().getFilterJarPathsList().stream()
3842
.map(r -> r.getValue())
3943
.collect(Collectors.toList());
4044
// resolves filter via service loader resolution
41-
FilterRegistry.initialize(jarPaths);
45+
FilterRegistry.initialize(providerConfig, jarPaths);
4246
}
4347
}

testing-common/src/testFixtures/java/org/hypertrace/agent/testing/mockfilter/MockFilterProvider.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,13 @@
1919
import com.google.auto.service.AutoService;
2020
import org.hypertrace.agent.filter.api.Filter;
2121
import org.hypertrace.agent.filter.spi.FilterProvider;
22+
import org.hypertrace.agent.filter.spi.FilterProviderConfig;
2223

2324
@AutoService(FilterProvider.class)
2425
public class MockFilterProvider implements FilterProvider {
2526

2627
@Override
27-
public Filter create() {
28+
public Filter create(FilterProviderConfig config) {
2829
return new MockFilter();
2930
}
3031
}

0 commit comments

Comments
 (0)