diff --git a/components/apimgt/org.wso2.carbon.apimgt.common.analytics/src/main/java/org/wso2/carbon/apimgt/common/analytics/Constants.java b/components/apimgt/org.wso2.carbon.apimgt.common.analytics/src/main/java/org/wso2/carbon/apimgt/common/analytics/Constants.java index 3d75425bfe6f..e28291095550 100644 --- a/components/apimgt/org.wso2.carbon.apimgt.common.analytics/src/main/java/org/wso2/carbon/apimgt/common/analytics/Constants.java +++ b/components/apimgt/org.wso2.carbon.apimgt.common.analytics/src/main/java/org/wso2/carbon/apimgt/common/analytics/Constants.java @@ -39,4 +39,6 @@ public class Constants { public static final String USERNAME_MASK_VALUE = "*****"; public static final String AUTH_API_URL = "auth.api.url"; + + public static final String CHOREO_REPORTER_NAME = "choreo"; } diff --git a/components/apimgt/org.wso2.carbon.apimgt.common.analytics/src/main/java/org/wso2/carbon/apimgt/common/analytics/publishers/impl/AnalyticsDataPublisher.java b/components/apimgt/org.wso2.carbon.apimgt.common.analytics/src/main/java/org/wso2/carbon/apimgt/common/analytics/publishers/impl/AnalyticsDataPublisher.java index d5de8f5469b0..7257fa58c939 100644 --- a/components/apimgt/org.wso2.carbon.apimgt.common.analytics/src/main/java/org/wso2/carbon/apimgt/common/analytics/publishers/impl/AnalyticsDataPublisher.java +++ b/components/apimgt/org.wso2.carbon.apimgt.common.analytics/src/main/java/org/wso2/carbon/apimgt/common/analytics/publishers/impl/AnalyticsDataPublisher.java @@ -29,10 +29,13 @@ import org.wso2.carbon.apimgt.common.analytics.Constants; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import static org.wso2.carbon.apimgt.common.analytics.Constants.CHOREO_REPORTER_NAME; + /** * Analytics event publisher for APIM. */ @@ -53,6 +56,16 @@ public static AnalyticsDataPublisher getInstance() { return instance; } + private List getReporterTypesOrNull(String typeConfig) { + if (typeConfig == null || typeConfig.isEmpty()) { + return null; + } + return Arrays.stream(typeConfig.replaceAll("[\\[\\]]", "").split(",")) + .map(String::trim) + .filter(s -> !s.isEmpty()) + .collect(Collectors.toList()); + } + private List getReportersClassesOrNull(Map configs) { List reporterClasses = new ArrayList<>(); List reporterKeys = configs.keySet() @@ -93,7 +106,7 @@ private List getSuccessOrFaultyCounterMetrics(List configs = commonConfig.getConfigurations(); String reporterClass = configs.get("publisher.reporter.class"); - String reporterType = configs.get("type"); + List reporterTypes = getReporterTypesOrNull(configs.get("type")); List reporterClasses = getReportersClassesOrNull(configs); try { List metricReporters = new ArrayList<>(); @@ -113,9 +126,21 @@ public void initialize(AnalyticsCommonConfiguration commonConfig) { " out of multiple metric reporters.", e); } } - } else if (reporterType != null && !reporterType.equals("")) { - metricReporter = MetricReporterFactory.getInstance().createLogMetricReporter(configs); - metricReporters.add(metricReporter); + } else if (reporterTypes != null && !reporterTypes.isEmpty()) { + for (String type : reporterTypes) { + if (type.equals(CHOREO_REPORTER_NAME)) { + String authEndpoint = configs.get(Constants.AUTH_API_URL); + if (authEndpoint == null || authEndpoint.isEmpty()) { + throw new MetricCreationException("Analytics Config Endpoint is not provided."); + } + metricReporter = MetricReporterFactory.getInstance().createMetricReporter(configs); + metricReporters.add(metricReporter); + } else { + metricReporter = MetricReporterFactory.getInstance().createLogMetricReporter(configs); + metricReporters.add(metricReporter); + } + + } } else { String authEndpoint = configs.get(Constants.AUTH_API_URL);