/*******************************************************************************
* Copyright (c) 2015 Pivotal Software, Inc.
* 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
*
* Contributors:
* Pivotal Software, Inc. - initial API and implementation
*******************************************************************************/
package org.springsource.ide.eclipse.commons.cloudfoundry.client.diego;
import java.util.UUID;
import org.cloudfoundry.client.lib.CloudCredentials;
import org.cloudfoundry.client.lib.CloudFoundryOperations;
import org.cloudfoundry.client.lib.HttpProxyConfiguration;
import org.cloudfoundry.client.lib.domain.CloudApplication;
import org.springframework.web.client.RestTemplate;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* @author Kris De Volder
*/
public class HealthCheckSupport extends CfClientSideCart {
public static final String HC_NONE = "none";
public static final String HC_PORT = "port";
public static final String[] HC_ALL = {HC_NONE, HC_PORT};
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(Include.NON_NULL)
public static class HealthCheck {
/**
* For jackson to be able to deserialize
*/
public HealthCheck() {
}
public HealthCheck(String type) {
this.healthCheckType = type;
}
@JsonProperty("health_check_type")
private String healthCheckType;
public String getHealthCheckType() {
return healthCheckType;
}
public void setHealthCheckType(String healthCheckType) {
this.healthCheckType = healthCheckType;
}
}
public HealthCheckSupport(CloudFoundryOperations client, CloudInfoV2 cloudInfo, boolean trustSelfSigned, HttpProxyConfiguration httpProxyConfiguration) {
super(client, cloudInfo, trustSelfSigned, httpProxyConfiguration);
}
protected RestTemplate createRestTemplate(boolean trustSelfSigned, HttpProxyConfiguration httpProxyConfiguration) {
return RestUtils.createRestTemplate(httpProxyConfiguration, trustSelfSigned, /*disableRedirects*/false);
}
public String getHealthCheck(UUID guid) {
HealthCheck summary = restTemplate.getForObject(url("/v2/apps/{guid}/summary"), HealthCheck.class, guid);
if (summary!=null) {
return summary.getHealthCheckType();
}
return null;
}
public String getHealthCheck(CloudApplication app) {
return getHealthCheck(app.getMeta().getGuid());
}
public void setHealthCheck(UUID guid, String type) {
restTemplate.put(url("/v2/apps/{guid}"), new HealthCheck(type), guid);
}
public void setHealthCheck(CloudApplication app, String type) {
setHealthCheck(app.getMeta().getGuid(), type);
}
public static HealthCheckSupport create(final CloudFoundryOperations client, CloudCredentials creds, HttpProxyConfiguration proxyConf, boolean selfSigned) {
CloudInfoV2 cloudInfo = new CloudInfoV2(
creds,
client.getCloudControllerUrl(),
proxyConf,
selfSigned
);
return new HealthCheckSupport(client, cloudInfo, selfSigned, proxyConf);
}
}