Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding https support for backend service #486

Merged
merged 3 commits into from
Apr 4, 2024
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
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;
Expand Down Expand Up @@ -53,6 +54,7 @@
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.web.util.UriComponentsBuilder;

@Service
@Configuration
Expand All @@ -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;
Expand Down Expand Up @@ -124,12 +129,16 @@ private void scheduleCollectStats() {
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);
Expand Down Expand Up @@ -158,9 +167,16 @@ public void collectStatsToDB(long unixTime, String env, String cluster, String s
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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
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;

Expand All @@ -51,6 +52,9 @@ public class EnvironmentCacheServiceImpl implements EnvironmentCacheService {

private final PulsarAdminService pulsarAdminService;

@Value("${tls.enabled}")
private boolean tlsEnabled;

@Autowired
public EnvironmentCacheServiceImpl(EnvironmentsRepository environmentsRepository, PulsarAdminService pulsarAdminService) {
this.environmentsRepository = environmentsRepository;
Expand Down Expand Up @@ -125,7 +129,7 @@ private String getServiceUrl(String environment, String cluster, int numReloads)
throw new RuntimeException(
"No cluster '" + cluster + "' found in environment '" + environment + "'");
}
return clusterData.getServiceUrl();
return tlsEnabled && StringUtils.isNotBlank(clusterData.getServiceUrlTls()) ? clusterData.getServiceUrlTls() : clusterData.getServiceUrl();
}

@Scheduled(
Expand Down