blob: 7a480094bbc321117a89eef5e11306cfe6b55b62 [file] [log] [blame]
/**
******************************************************************************
* Copyright © 2018 PTA GmbH.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
*
* http://www.eclipse.org/legal/epl-v10.html
*
******************************************************************************
*/
package org.eclipse.openk.core.controller;
import org.apache.log4j.Logger;
import org.eclipse.jetty.http.HttpStatus;
import org.eclipse.openk.api.VersionInfo;
import org.eclipse.openk.api.ServiceDistributionCluster;
import org.eclipse.openk.core.common.Globals;
import org.eclipse.openk.core.communication.RestServiceWrapper;
import org.eclipse.openk.core.exceptions.HttpStatusException;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
public class CentralController {
private static final Logger logger = Logger.getLogger(CentralController.class);
public ServiceDistributionCluster readServerDistribution(String cluster) throws HttpStatusException {
ServiceDistributionCluster[] dcs = ServicesConfigCache.getInstance().getCache();
for (ServiceDistributionCluster item : dcs) {
if (item.getClustername().equalsIgnoreCase(cluster) && item.isActive()) {
return removeInactiveItems(item);
}
}
logger.error("There is no cluster name equals with " + cluster + " or the cluster is not active.");
throw new HttpStatusException(HttpStatus.NOT_FOUND_404);
}
public VersionInfo getVersionInfo(String version ) {
VersionInfo vi = new VersionInfo();
vi.setBackendVersion( version );
return vi;
}
protected RestServiceWrapper createRestServiceWrapper( boolean isHttps ) {
return new RestServiceWrapper(isHttps);
}
public String getServiceHealthState(String clustername, String servicename) throws HttpStatusException {
ServiceDistributionCluster.ServiceDistribution dist = findDistribution(clustername, servicename);
RestServiceWrapper w = createRestServiceWrapper(false );
StringBuilder url = new StringBuilder();
url.append(dist.getProtocol() + "://" + dist.getHost() + ":"
+ dist.getPortHealth());
if( dist.getHealthUrlPath() != null ) {
url.append(dist.getUrlPath());
}
url.append("/" + Globals.HEALTH_CHECK_ADD_PATH );
return w.performGetRequest(url.toString());
}
private ServiceDistributionCluster.ServiceDistribution findDistribution(String clustername,
String servicename) throws HttpStatusException {
ServiceDistributionCluster cluster = getCluster(ServicesConfigCache.getInstance().getCache(), clustername);
Optional<ServiceDistributionCluster.ServiceDistribution> dist = Arrays.stream(cluster.getDistributions())
.filter(e -> e.isActive() && e.getName().equals(servicename))
.findFirst();
if(dist.isPresent()) {
return dist.get();
}
else {
throw new HttpStatusException(HttpStatus.NOT_FOUND_404);
}
}
private ServiceDistributionCluster getCluster(ServiceDistributionCluster[] clusterArray, String clustername) throws HttpStatusException {
List<ServiceDistributionCluster> clusterList = Arrays.asList(clusterArray);
Optional<ServiceDistributionCluster> ret = clusterList.stream()
.filter(c -> c.getClustername().equals(clustername)).findFirst();
if (ret.isPresent()) {
return ret.get();
} else {
logger.info("Could not find a cluster with the name: " + clustername);
throw new HttpStatusException(HttpStatus.NOT_FOUND_404);
}
}
private ServiceDistributionCluster removeInactiveItems( ServiceDistributionCluster cluster ) {
List<ServiceDistributionCluster.ServiceDistribution> dlist = Arrays.asList(cluster.getDistributions());
dlist = dlist.stream().filter(ServiceDistributionCluster.ServiceDistribution::isActive).collect(Collectors.toList());
ServiceDistributionCluster.ServiceDistribution[] distArr
= new ServiceDistributionCluster.ServiceDistribution[dlist.size()];
cluster.setDistributions(dlist.toArray(distArr));
return cluster;
}
}