diff --git a/examples/pom.xml b/examples/pom.xml
index 40f3206..6eed8d9 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -23,7 +23,7 @@
capa-parent
group.rxcloud
- 1.0.8-alpha-1
+ 1.0.8-alpha-2
capa-examples
diff --git a/pom.xml b/pom.xml
index 9b98361..9f817f4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
group.rxcloud
capa-parent
pom
- 1.0.8-alpha-1
+ 1.0.8-alpha-2
capa-sdk-parent
SDK for Capa.
https://github.com/reactivegroup
diff --git a/sdk-component/pom.xml b/sdk-component/pom.xml
index 370c378..608b900 100644
--- a/sdk-component/pom.xml
+++ b/sdk-component/pom.xml
@@ -23,7 +23,7 @@
group.rxcloud
capa-parent
- 1.0.8-alpha-1
+ 1.0.8-alpha-2
capa-sdk-component
diff --git a/sdk-component/src/main/java/group/rxcloud/capa/component/telemetry/SamplerConfig.java b/sdk-component/src/main/java/group/rxcloud/capa/component/telemetry/SamplerConfig.java
index f53b99b..94d4bfb 100644
--- a/sdk-component/src/main/java/group/rxcloud/capa/component/telemetry/SamplerConfig.java
+++ b/sdk-component/src/main/java/group/rxcloud/capa/component/telemetry/SamplerConfig.java
@@ -16,19 +16,20 @@
*/
package group.rxcloud.capa.component.telemetry;
+import com.google.common.collect.Lists;
import group.rxcloud.capa.component.telemetry.metrics.CapaMeterProviderBuilder;
import group.rxcloud.capa.infrastructure.CapaProperties;
import group.rxcloud.capa.infrastructure.hook.ConfigurationHooks;
import group.rxcloud.capa.infrastructure.hook.Mixer;
-import group.rxcloud.cloudruntimes.domain.core.configuration.ConfigurationItem;
+import group.rxcloud.cloudruntimes.domain.core.configuration.SubConfigurationResp;
import group.rxcloud.cloudruntimes.utils.TypeRef;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import reactor.core.publisher.Flux;
import java.io.Serializable;
-import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
import java.util.function.Supplier;
/**
@@ -36,58 +37,88 @@
*/
public class SamplerConfig implements Serializable {
- public static final transient String FILE_PATH = "capa-sample.properties";
+ private static final long serialVersionUID = -2113523925814197551L;
+
+ public static final transient String FILE_PATH = "capa-component-telemetry-sample.properties";
+
+ public static final transient String COMMON_FILE_SUFFIX = "telemetry-common";
/**
* Sample all data as default.
*/
- public static final transient SamplerConfig DEFAULT_CONFIG = new SamplerConfig();
+ public static final transient SamplerConfig DEFAULT_CONFIG = new SamplerConfig() {{
+ setTraceEnable(true);
+ setMetricsEnable(true);
+ }};
- private static final transient Logger log = LoggerFactory.getLogger(CapaMeterProviderBuilder.class);
+ public static final transient SamplerConfig CONFIG = new SamplerConfig();
public static final transient Supplier DEFAULT_SUPPLIER = () -> {
- try {
- String storeName = Optional.ofNullable(CapaProperties.COMPONENT_PROPERTIES_SUPPLIER.apply("configuration")
- .getProperty(
- "CONFIGURATION_COMPONENT_STORE_NAME"))
- .orElse("UN_CONFIGURED_STORE_CONFIG_NAME");
- Optional hooksOptional = Mixer.configurationHooksNullable();
- if (hooksOptional.isPresent()) {
- List> config = hooksOptional.get().getConfiguration(storeName,
- null,
- Collections.singletonList(FILE_PATH),
- null,
- "",
- "",
- TypeRef.get(SamplerConfig.class)).block();
- if (!config.isEmpty()) {
- SamplerConfig item = config.get(0).getContent();
- return item == null ? DEFAULT_CONFIG : item;
- }
+ return CONFIG;
+ };
+
+ private static final transient Logger log = LoggerFactory.getLogger(CapaMeterProviderBuilder.class);
+
+
+ static {
+ Mixer.configurationHooksNullable().ifPresent(hooks -> {
+ try {
+ subscribeConfiguration(hooks, hooks.defaultConfigurationAppId(), true);
+ } catch (Throwable throwable) {
+ log.warn("Fail to load global telemetry config. Dynamic global config is disabled for capa telemetry.",
+ throwable);
+ }
+ try {
+ subscribeConfiguration(hooks,
+ CapaProperties.COMPONENT_PROPERTIES_SUPPLIER.apply(COMMON_FILE_SUFFIX).getProperty("appId"),
+ false);
+ } catch (Throwable throwable) {
+ log.warn("Fail to load global telemetry config. Dynamic global config is disabled for capa telemetry.",
+ throwable);
}
- } catch (Throwable throwable) {
- log.warn("Fail to load config item. Dynamic config is disabled for capa telemetry.", throwable);
- }
+ });
- return DEFAULT_CONFIG;
- };
+ }
- private static final long serialVersionUID = -2113523925814197551L;
+ private Boolean metricsEnable;
- private boolean metricsEnable = true;
+ private Boolean traceEnable;
- private boolean traceEnable = true;
+ private static void subscribeConfiguration(ConfigurationHooks configurationHooks, String appId, boolean prior) {
+ String storeName = configurationHooks.registryStoreNames().get(0);
+ Flux> configFlux = configurationHooks.subscribeConfiguration(
+ storeName,
+ appId,
+ Lists.newArrayList(FILE_PATH),
+ null,
+ StringUtils.EMPTY,
+ StringUtils.EMPTY,
+ TypeRef.get(SamplerConfig.class));
+ configFlux.subscribe(resp -> {
+ if (CollectionUtils.isNotEmpty(resp.getItems())) {
+ SamplerConfig config = resp.getItems().get(0).getContent();
+ if (config != null) {
+ if (config.metricsEnable != null && (prior || CONFIG.metricsEnable == null)) {
+ CONFIG.metricsEnable = config.metricsEnable;
+ }
+ if (config.traceEnable != null && (prior || CONFIG.traceEnable == null)) {
+ CONFIG.traceEnable = config.traceEnable;
+ }
+ }
+ }
+ });
+ }
- public boolean isMetricsEnable() {
- return metricsEnable;
+ public Boolean isMetricsEnable() {
+ return metricsEnable == null ? DEFAULT_CONFIG.metricsEnable : metricsEnable;
}
public void setMetricsEnable(boolean metricsEnable) {
this.metricsEnable = metricsEnable;
}
- public boolean isTraceEnable() {
- return traceEnable;
+ public Boolean isTraceEnable() {
+ return traceEnable == null ? DEFAULT_CONFIG.traceEnable : traceEnable;
}
public void setTraceEnable(boolean traceEnable) {
diff --git a/sdk-component/src/main/java/group/rxcloud/capa/component/telemetry/context/CapaContextPropagatorSettings.java b/sdk-component/src/main/java/group/rxcloud/capa/component/telemetry/context/CapaContextPropagatorSettings.java
index bba38ab..93b2c68 100644
--- a/sdk-component/src/main/java/group/rxcloud/capa/component/telemetry/context/CapaContextPropagatorSettings.java
+++ b/sdk-component/src/main/java/group/rxcloud/capa/component/telemetry/context/CapaContextPropagatorSettings.java
@@ -23,8 +23,7 @@
*/
public interface CapaContextPropagatorSettings {
- // FIXME: 2021/11/28 change to capa-component-telemetry-context.json
- String FILE_PATH = "/capa-context.json";
+ String FILE_PATH = "/capa-component-telemetry-context.json";
/**
* Replace the whole context config.
diff --git a/sdk-component/src/main/java/group/rxcloud/capa/component/telemetry/metrics/CapaMeterProviderSettings.java b/sdk-component/src/main/java/group/rxcloud/capa/component/telemetry/metrics/CapaMeterProviderSettings.java
index e190690..3b36b63 100644
--- a/sdk-component/src/main/java/group/rxcloud/capa/component/telemetry/metrics/CapaMeterProviderSettings.java
+++ b/sdk-component/src/main/java/group/rxcloud/capa/component/telemetry/metrics/CapaMeterProviderSettings.java
@@ -25,8 +25,7 @@
*/
public interface CapaMeterProviderSettings {
- // FIXME: 2021/11/28 change to capa-component-telemetry-meter.json
- String FILE_PATH ="/capa-meter.json";
+ String FILE_PATH ="/capa-component-telemetry-meter.json";
/**
* Replace the whole config for the meter.
diff --git a/sdk-component/src/main/java/group/rxcloud/capa/component/telemetry/trace/CapaTracerProviderSettings.java b/sdk-component/src/main/java/group/rxcloud/capa/component/telemetry/trace/CapaTracerProviderSettings.java
index f77b840..a98cf06 100644
--- a/sdk-component/src/main/java/group/rxcloud/capa/component/telemetry/trace/CapaTracerProviderSettings.java
+++ b/sdk-component/src/main/java/group/rxcloud/capa/component/telemetry/trace/CapaTracerProviderSettings.java
@@ -27,8 +27,7 @@
*/
public interface CapaTracerProviderSettings {
- // FIXME: 2021/11/28 change to capa-component-telemetry-tracer.json
- String FILE_PATH = "/capa-tracer.json";
+ String FILE_PATH = "/capa-component-telemetry-tracer.json";
/**
* Replace the whole config for the meter.
diff --git a/sdk-component/src/test/java/group/rxcloud/capa/component/telemetry/SamplerConfigTest.java b/sdk-component/src/test/java/group/rxcloud/capa/component/telemetry/SamplerConfigTest.java
new file mode 100644
index 0000000..c8c4a59
--- /dev/null
+++ b/sdk-component/src/test/java/group/rxcloud/capa/component/telemetry/SamplerConfigTest.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package group.rxcloud.capa.component.telemetry;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+
+/**
+ * @author: chenyijiang
+ * @date: 2021/12/2 12:33
+ */
+public class SamplerConfigTest {
+
+ @Test
+ public void isMetricsEnable() {
+ assertFalse(SamplerConfig.DEFAULT_SUPPLIER.get().isMetricsEnable());
+ }
+
+ @Test
+ public void isTraceEnable() {
+ assertFalse(SamplerConfig.DEFAULT_SUPPLIER.get().isTraceEnable());
+ }
+}
\ No newline at end of file
diff --git a/sdk-component/src/test/java/group/rxcloud/capa/component/telemetry/TestMixerProvider.java b/sdk-component/src/test/java/group/rxcloud/capa/component/telemetry/TestMixerProvider.java
new file mode 100644
index 0000000..2f1ffe5
--- /dev/null
+++ b/sdk-component/src/test/java/group/rxcloud/capa/component/telemetry/TestMixerProvider.java
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package group.rxcloud.capa.component.telemetry;
+
+import com.google.common.collect.Lists;
+import group.rxcloud.capa.infrastructure.hook.ConfigurationHooks;
+import group.rxcloud.capa.infrastructure.hook.Mixer;
+import group.rxcloud.capa.infrastructure.hook.TelemetryHooks;
+import group.rxcloud.cloudruntimes.domain.core.configuration.ConfigurationItem;
+import group.rxcloud.cloudruntimes.domain.core.configuration.SubConfigurationResp;
+import group.rxcloud.cloudruntimes.utils.TypeRef;
+import reactor.core.publisher.Flux;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author: chenyijiang
+ * @date: 2021/12/2 12:39
+ */
+public class TestMixerProvider implements Mixer.MixerProvider {
+
+ SamplerConfig app = new SamplerConfig() {{setMetricsEnable(false);}};
+ SamplerConfig global = new SamplerConfig() {{setTraceEnable(false); setMetricsEnable(true);}};
+
+
+ private ConfigurationHooks configurationHooks = new ConfigurationHooks() {
+ @Override
+ public List registryStoreNames() {
+ return Lists.newArrayList("QConfig");
+ }
+
+ @Override
+ public String defaultConfigurationAppId() {
+ return "1234567";
+ }
+
+ @Override
+ public Flux> subscribeConfiguration(String storeName, String appId, List keys, Map metadata, String group, String label, TypeRef type) {
+
+ if (type.getType() == SamplerConfig.class) {
+ if ("123".equals(appId)) {
+ return Flux.just(getSubscribeResponse(global));
+ }
+ if (defaultConfigurationAppId().equals(appId)) {
+ return Flux.just(getSubscribeResponse(app));
+ }
+ return Flux.just(null);
+ }
+ return ConfigurationHooks.super.subscribeConfiguration(storeName, appId, keys, metadata, type);
+ }
+ };
+
+ private SubConfigurationResp getSubscribeResponse(SamplerConfig samplerConfig) {
+ SubConfigurationResp subConfigurationResp = new SubConfigurationResp<>();
+ ConfigurationItem item = new ConfigurationItem();
+ item.setContent(samplerConfig);
+ subConfigurationResp.setItems(Lists.newArrayList(item));
+ return subConfigurationResp;
+ }
+
+ @Override
+ public ConfigurationHooks provideConfigurationHooks() {
+ return configurationHooks;
+ }
+
+ @Override
+ public TelemetryHooks provideTelemetryHooks() {
+ return null;
+ }
+
+
+}
diff --git a/sdk-component/src/test/java/group/rxcloud/capa/component/telemetry/trace/CapaTracerProviderBuilderTest.java b/sdk-component/src/test/java/group/rxcloud/capa/component/telemetry/trace/CapaTracerProviderBuilderTest.java
index 1a19cc6..f4f2232 100644
--- a/sdk-component/src/test/java/group/rxcloud/capa/component/telemetry/trace/CapaTracerProviderBuilderTest.java
+++ b/sdk-component/src/test/java/group/rxcloud/capa/component/telemetry/trace/CapaTracerProviderBuilderTest.java
@@ -116,6 +116,7 @@ public boolean matches(ReadableSpan span) {
@Test
public void buildFromTraceConfig() {
CapaTracerProvider provider = new CapaTracerProviderBuilder()
+ .setSamplerConfig(() -> SamplerConfig.DEFAULT_CONFIG)
.buildTracerProvider();
Span span = provider.tracerBuilder("test")
diff --git a/sdk-component/src/test/resources/capa-component-telemetry-common.properties b/sdk-component/src/test/resources/capa-component-telemetry-common.properties
new file mode 100644
index 0000000..a277f74
--- /dev/null
+++ b/sdk-component/src/test/resources/capa-component-telemetry-common.properties
@@ -0,0 +1 @@
+appId=123
\ No newline at end of file
diff --git a/sdk-component/src/test/resources/capa-context.json b/sdk-component/src/test/resources/capa-component-telemetry-context.json
similarity index 100%
rename from sdk-component/src/test/resources/capa-context.json
rename to sdk-component/src/test/resources/capa-component-telemetry-context.json
diff --git a/sdk-component/src/test/resources/capa-meter.json b/sdk-component/src/test/resources/capa-component-telemetry-meter.json
similarity index 100%
rename from sdk-component/src/test/resources/capa-meter.json
rename to sdk-component/src/test/resources/capa-component-telemetry-meter.json
diff --git a/sdk-component/src/test/resources/capa-tracer.json b/sdk-component/src/test/resources/capa-component-telemetry-tracer.json
similarity index 100%
rename from sdk-component/src/test/resources/capa-tracer.json
rename to sdk-component/src/test/resources/capa-component-telemetry-tracer.json
diff --git a/sdk-component/src/test/resources/capa-infrastructure-mixer.properties b/sdk-component/src/test/resources/capa-infrastructure-mixer.properties
new file mode 100644
index 0000000..216b8de
--- /dev/null
+++ b/sdk-component/src/test/resources/capa-infrastructure-mixer.properties
@@ -0,0 +1 @@
+group.rxcloud.capa.infrastructure.hook.Mixer$MixerProvider=group.rxcloud.capa.component.telemetry.TestMixerProvider
\ No newline at end of file
diff --git a/sdk-infrastructure/pom.xml b/sdk-infrastructure/pom.xml
index 4d892ae..30f4bb9 100644
--- a/sdk-infrastructure/pom.xml
+++ b/sdk-infrastructure/pom.xml
@@ -23,7 +23,7 @@
capa-parent
group.rxcloud
- 1.0.8-alpha-1
+ 1.0.8-alpha-2
capa-sdk-infrastructure
diff --git a/sdk-spi-demo/pom.xml b/sdk-spi-demo/pom.xml
index 0f22976..cdfaf90 100644
--- a/sdk-spi-demo/pom.xml
+++ b/sdk-spi-demo/pom.xml
@@ -23,7 +23,7 @@
capa-parent
group.rxcloud
- 1.0.8-alpha-1
+ 1.0.8-alpha-2
capa-sdk-spi-demo
diff --git a/sdk-spi/pom.xml b/sdk-spi/pom.xml
index f2811cc..d77b534 100644
--- a/sdk-spi/pom.xml
+++ b/sdk-spi/pom.xml
@@ -23,7 +23,7 @@
capa-parent
group.rxcloud
- 1.0.8-alpha-1
+ 1.0.8-alpha-2
capa-sdk-spi
diff --git a/sdk-springboot/pom.xml b/sdk-springboot/pom.xml
index 5cd1112..b39ac27 100644
--- a/sdk-springboot/pom.xml
+++ b/sdk-springboot/pom.xml
@@ -23,7 +23,7 @@
capa-parent
group.rxcloud
- 1.0.8-alpha-1
+ 1.0.8-alpha-2
sdk-springboot
diff --git a/sdk/pom.xml b/sdk/pom.xml
index dfa787f..b03d649 100644
--- a/sdk/pom.xml
+++ b/sdk/pom.xml
@@ -23,7 +23,7 @@
group.rxcloud
capa-parent
- 1.0.8-alpha-1
+ 1.0.8-alpha-2
capa-sdk
diff --git a/sdk/src/main/java/group/rxcloud/capa/telemetry/CapaTelemetryClientGlobal.java b/sdk/src/main/java/group/rxcloud/capa/telemetry/CapaTelemetryClientGlobal.java
index 5755b13..cc71ca9 100644
--- a/sdk/src/main/java/group/rxcloud/capa/telemetry/CapaTelemetryClientGlobal.java
+++ b/sdk/src/main/java/group/rxcloud/capa/telemetry/CapaTelemetryClientGlobal.java
@@ -16,7 +16,6 @@
*/
package group.rxcloud.capa.telemetry;
-import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.metrics.Meter;
import io.opentelemetry.api.metrics.MeterProvider;
@@ -31,30 +30,12 @@
public class CapaTelemetryClientGlobal implements CapaTelemetryClient, OpenTelemetry {
// noop as default.
- private static volatile CapaTelemetryClientGlobal instance;
-
private TracerProvider tracerProvider = TracerProvider.noop();
private MeterProvider meterProvider = MeterProvider.noop();
private ContextPropagators contextPropagators = ContextPropagators.noop();
- public static CapaTelemetryClientGlobal getOrCreate() {
- if (instance == null) {
- synchronized (CapaTelemetryClientGlobal.class) {
- if (instance == null) {
- instance = (CapaTelemetryClientGlobal) new CapaTelemetryClientBuilder().build();
- GlobalOpenTelemetry.set(instance);
- }
- }
- }
- return instance;
- }
-
- static void set(CapaTelemetryClientGlobal capaTelemetryClient) {
- instance = capaTelemetryClient;
- }
-
protected List registryNames;
@Override
diff --git a/sdk/src/test/java/group/rxcloud/capa/telemetry/CapaTelemetryClientGlobalTest.java b/sdk/src/test/java/group/rxcloud/capa/telemetry/CapaTelemetryClientGlobalTest.java
index 579d125..4c2d13e 100644
--- a/sdk/src/test/java/group/rxcloud/capa/telemetry/CapaTelemetryClientGlobalTest.java
+++ b/sdk/src/test/java/group/rxcloud/capa/telemetry/CapaTelemetryClientGlobalTest.java
@@ -31,13 +31,12 @@ public class CapaTelemetryClientGlobalTest {
@Test
public void getOrCreate() {
- CapaTelemetryClient client = CapaTelemetryClientGlobal.getOrCreate();
+ CapaTelemetryClient client = new CapaTelemetryClientBuilder().build();
assertTrue(client instanceof CapaTelemetryClientGlobal);
assertNotNull(client.getContextPropagators());
assertNotNull(((CapaTelemetryClientGlobal) client).getPropagators());
assertNotNull(((CapaTelemetryClientGlobal) client).getMeterProvider());
assertNotNull(((CapaTelemetryClientGlobal) client).getTracerProvider());
assertNotNull(GlobalOpenTelemetry.get());
- assertEquals(client, CapaTelemetryClientGlobal.getOrCreate());
}
}
\ No newline at end of file