This is an automated email from the ASF dual-hosted git repository.

xiangying pushed a commit to branch branch-0.5.0
in repository https://gitbox.apache.org/repos/asf/pulsar-manager.git

commit 22bcc837fe8f0c92ec040ebe95058f2b1d4a47fd
Author: gurleen-gks <gurleen....@gmail.com>
AuthorDate: Thu Apr 4 00:49:07 2024 -0700

    Adding https support for backend service (#486)
    
    * Adding https support for backend service
    
    * minore refactoring
    
    ---------
    
    Co-authored-by: Gurleen Kaur <gurle...@verizonmedia.com>
    (cherry picked from commit e013e9dee8f593187824916202159edffbc9dad8)
---
 .../service/impl/BrokerStatsServiceImpl.java       | 24 ++++++++++++++++++----
 .../service/impl/EnvironmentCacheServiceImpl.java  |  5 ++++-
 2 files changed, 24 insertions(+), 5 deletions(-)

diff --git 
a/src/main/java/org/apache/pulsar/manager/service/impl/BrokerStatsServiceImpl.java
 
b/src/main/java/org/apache/pulsar/manager/service/impl/BrokerStatsServiceImpl.java
index 9c7e647..ae0f083 100644
--- 
a/src/main/java/org/apache/pulsar/manager/service/impl/BrokerStatsServiceImpl.java
+++ 
b/src/main/java/org/apache/pulsar/manager/service/impl/BrokerStatsServiceImpl.java
@@ -21,6 +21,7 @@ import com.google.gson.reflect.TypeToken;
 import java.text.DecimalFormat;
 
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.pulsar.client.admin.Brokers;
 import org.apache.pulsar.client.admin.PulsarAdminException;
 import 
org.apache.pulsar.manager.controller.exception.PulsarAdminOperationException;
@@ -53,6 +54,7 @@ import 
org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
+import org.springframework.web.util.UriComponentsBuilder;
 
 @Service
 @Configuration
@@ -67,6 +69,9 @@ public class BrokerStatsServiceImpl implements 
BrokerStatsService {
     @Value("${clear.stats.interval}")
     private Long clearStatsInterval;
 
+    @Value("${tls.enabled}")
+    private boolean tlsEnabled;
+
     private final EnvironmentsRepository environmentsRepository;
     private final ClustersService clustersService;
     private final BrokersService brokersService;
@@ -124,12 +129,16 @@ public class BrokerStatsServiceImpl implements 
BrokerStatsService {
             clusterLists.forEach((clusterMap) -> {
                 String cluster = (String) clusterMap.get("cluster");
                 Pair<String, String> envCluster = Pair.of(env.getName(), 
cluster);
-                String webServiceUrl = (String) clusterMap.get("serviceUrl");
+
+                String serviceUrlTls = (String) 
clusterMap.get("serviceUrlTls");
+                tlsEnabled = tlsEnabled && 
StringUtils.isNotBlank(serviceUrlTls);
+                String webServiceUrl = tlsEnabled ? serviceUrlTls : (String) 
clusterMap.get("serviceUrl");
                 if (webServiceUrl.contains(",")) {
                     String[] webServiceUrlList = webServiceUrl.split(",");
                     for (String url : webServiceUrlList) {
-                        if (!url.contains("http://";)) {
-                            url = "http://"; + url;
+                        // making sure the protocol is appended in case the 
env was added without the protocol
+                        if (!tlsEnabled && !url.contains("http://";)) {
+                            url = (tlsEnabled ? "https://"; : "http://";) + url;
                         }
                         try {
                             Brokers brokers = pulsarAdminService.brokers(url);
@@ -158,9 +167,16 @@ public class BrokerStatsServiceImpl implements 
BrokerStatsService {
         Map<String, Object> brokerObject = brokersService.getBrokersList(0, 0, 
cluster, serviceUrl);
         List<HashMap<String, Object>> brokerLists = (List<HashMap<String, 
Object>>) brokerObject.get("data");
         brokerLists.forEach((brokerMap) -> {
+            // returns [Broker Hostname]:[Broker non Tls port]
             String tempBroker = (String) brokerMap.get("broker");
-            // TODO: handle other protocols
+            //default to http
             String broker = "http://"; + tempBroker;
+            // if tls enabled the protocol and port is extracted from service 
url
+            if (tlsEnabled && tempBroker.contains(":")) {
+                String brokerHost = tempBroker.substring(0, 
tempBroker.indexOf(":"));
+                UriComponentsBuilder builder = 
UriComponentsBuilder.fromHttpUrl(serviceUrl);
+                broker = builder.host(brokerHost).toUriString();
+            }
             JsonObject result;
             try {
                 result = pulsarAdminService.brokerStats(broker).getTopics();
diff --git 
a/src/main/java/org/apache/pulsar/manager/service/impl/EnvironmentCacheServiceImpl.java
 
b/src/main/java/org/apache/pulsar/manager/service/impl/EnvironmentCacheServiceImpl.java
index 4ea07aa..c75e267 100644
--- 
a/src/main/java/org/apache/pulsar/manager/service/impl/EnvironmentCacheServiceImpl.java
+++ 
b/src/main/java/org/apache/pulsar/manager/service/impl/EnvironmentCacheServiceImpl.java
@@ -35,6 +35,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.pulsar.common.policies.data.ClusterData;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
@@ -51,6 +52,8 @@ public class EnvironmentCacheServiceImpl implements 
EnvironmentCacheService {
 
     private final PulsarAdminService pulsarAdminService;
 
+    @Value("${tls.enabled}")
+    private boolean tlsEnabled;
     private final Map<String, String> serviceUrlEnvironmentMap;
 
     @Autowired
@@ -138,7 +141,7 @@ public class EnvironmentCacheServiceImpl implements 
EnvironmentCacheService {
             throw new RuntimeException(
                     "No cluster '" + cluster + "' found in environment '" + 
environment + "'");
         }
-        return clusterData.getServiceUrl();
+        return tlsEnabled && 
StringUtils.isNotBlank(clusterData.getServiceUrlTls()) ? 
clusterData.getServiceUrlTls() : clusterData.getServiceUrl();
     }
 
     @Scheduled(

Reply via email to