Skip to content

Commit c8f611e

Browse files
committed
Add SPI support to SamplerFactory
1 parent 094cd5c commit c8f611e

1 file changed

Lines changed: 27 additions & 6 deletions

File tree

  • sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig

sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/SamplerFactory.java

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import io.opentelemetry.sdk.autoconfigure.internal.NamedSpiManager;
1111
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
1212
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
13-
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
1413
import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties;
1514
import io.opentelemetry.sdk.autoconfigure.spi.traces.ConfigurableSamplerProvider;
1615
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.JaegerRemote;
@@ -116,16 +115,38 @@ public Sampler create(
116115
"jaeger remote sampler"));
117116
}
118117

119-
// TODO(jack-berg): add support for generic SPI samplers
120-
if (!model.getAdditionalProperties().isEmpty()) {
121-
throw new ConfigurationException(
122-
"Unrecognized sampler(s): "
123-
+ model.getAdditionalProperties().keySet().stream().collect(joining(",", "[", "]")));
118+
Map<String, Object> additionalProperties = model.getAdditionalProperties();
119+
if (!additionalProperties.isEmpty()) {
120+
for (Map.Entry<String, Object> entry : additionalProperties.entrySet()) {
121+
String samplerName = entry.getKey();
122+
ConfigProperties configProperties =
123+
new ExtendedConfigProperties(toConfigMap(entry.getValue()));
124+
return FileConfigUtil.addAndReturn(
125+
closeables,
126+
FileConfigUtil.assertNotNull(
127+
samplerSpiManager(configProperties, spiHelper).getByName(samplerName),
128+
samplerName));
129+
}
124130
}
125131

126132
return Sampler.parentBased(Sampler.alwaysOn());
127133
}
128134

135+
private static Map<String, Object> toConfigMap(Object object) {
136+
if (!(object instanceof Map)) {
137+
return Collections.emptyMap();
138+
}
139+
Map<String, Object> map = new HashMap<>();
140+
for (Map.Entry<?, ?> entry : ((Map<?, ?>) object).entrySet()) {
141+
Object key = entry.getKey();
142+
if (!(key instanceof String)) {
143+
continue;
144+
}
145+
map.put((String) key, entry.getValue());
146+
}
147+
return Collections.unmodifiableMap(map);
148+
}
149+
129150
private static NamedSpiManager<Sampler> samplerSpiManager(
130151
ConfigProperties config, SpiHelper spiHelper) {
131152
return spiHelper.loadConfigurable(

0 commit comments

Comments
 (0)