/*******************************************************************************
*
* Copyright (c) 2013 GigaSpaces Technologies Ltd. All rights reserved
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*******************************************************************************/
package org.cloudifysource.rest.doclet;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.UUID;
import org.apache.commons.lang.math.RandomUtils;
import org.cloudifysource.domain.ComputeTemplateHolder;
import org.cloudifysource.domain.cloud.FileTransferModes;
import org.cloudifysource.domain.cloud.RemoteExecutionModes;
import org.cloudifysource.domain.cloud.ScriptLanguages;
import org.cloudifysource.domain.cloud.compute.ComputeTemplate;
import org.cloudifysource.dsl.internal.CloudifyConstants.DeploymentState;
import org.cloudifysource.dsl.internal.DSLUtils;
import org.cloudifysource.dsl.internal.debug.DebugModes;
import org.cloudifysource.dsl.rest.response.AddTemplateResponse;
import org.cloudifysource.dsl.rest.response.AddTemplatesResponse;
import org.cloudifysource.dsl.rest.response.AddTemplatesStatus;
import org.cloudifysource.dsl.rest.response.DeploymentEvent;
import org.cloudifysource.dsl.rest.response.InstanceDescription;
import org.cloudifysource.dsl.rest.response.ServiceDescription;
import org.cloudifysource.dsl.rest.response.ServiceInstanceMetricsData;
/**
*
* @author yael
* @since 2.6.0
*/
public final class RESTExamples {
private static final int TIMEOUT_MINUTES_EXAMPLE = 5;
private static final int MAX_INSTANCE_ID = 5;
private static final int MACHINE_MEMORY_MB = 1600;
private RESTExamples() {
}
static String getAttribute() {
return "attributeValue";
}
static Map<String, Object> getAttributes() {
final Map<String, Object> attributesExample = new HashMap<String, Object>();
attributesExample.put("attr1", "value1");
attributesExample.put("attr2", "value2");
attributesExample.put("attr3", "value3");
return attributesExample;
}
static String getAppName() {
return "petclinic";
}
static ServiceInstanceMetricsData getServiceInstanceMetricsData() {
final Map<String, Object> metricsExample = new HashMap<String, Object>();
final int id1 = getInstanceId();
final int id2 = id1 + 1;
metricsExample.put("metric" + id1, "value" + id1);
metricsExample.put("metric" + id2, "value" + id2);
return new ServiceInstanceMetricsData(id1, metricsExample);
}
static String getServiceName() {
return "tomcat";
}
static String getAuthGroup() {
return "myAuthGroup";
}
static boolean isDebugAll() {
return false;
}
static String getDebugEvents() {
return "init,install";
}
static String getDebugMode() {
return DebugModes.ON_ERROR.getName();
}
static boolean isSelfHealing() {
return true;
}
static String getServiceFileName() {
return "myService.groovy";
}
static int getTimeoutMinutes() {
return TIMEOUT_MINUTES_EXAMPLE;
}
static String getUploadKey() {
return UUID.randomUUID().toString();
}
static String getDeploymentID() {
return UUID.randomUUID().toString();
}
static List<ServiceInstanceMetricsData> getServiceInstanceMetricsDataList() {
final List<ServiceInstanceMetricsData> list = new LinkedList<ServiceInstanceMetricsData>();
list.add(getServiceInstanceMetricsData());
list.add(getServiceInstanceMetricsData());
return list;
}
static List<String> getInstanceNames() {
final List<String> instanceNames = new ArrayList<String>();
instanceNames.add(getInstanceName(null, null));
instanceNames.add(getInstanceName(null, null));
instanceNames.add(getInstanceName(null, null));
return instanceNames;
}
static int getNumberOfInstances() {
return getInstanceId() + 1;
}
static List<DeploymentEvent> getEvents() {
final List<DeploymentEvent> events = new LinkedList<DeploymentEvent>();
final DeploymentEvent event1 = new DeploymentEvent();
event1.setDescription("[127.0.0.1/127.0.0.1] - tomcat-1 INIT invoked");
event1.setIndex(0);
final DeploymentEvent event2 = new DeploymentEvent();
event2.setDescription("[127.0.0.1/127.0.0.1] - tomcat-1 INIT completed, duration: 4.2 seconds");
event2.setIndex(1);
events.add(event1);
events.add(event2);
return events;
}
static DeploymentState getApplicationState() {
return DeploymentState.STARTED;
}
static List<ServiceDescription> getServicesDescription() {
final List<ServiceDescription> list = new LinkedList<ServiceDescription>();
final int id1 = getInstanceId();
list.add(getServiceDescription("service" + id1, id1));
final int id2 = id1 + 1;
list.add(getServiceDescription("service" + id2, id2));
return list;
}
static String getAuthGroups() {
return getAuthGroup() + "1," + getAuthGroup() + "2," + getAuthGroup() + "3";
}
static String getInstanceName(final String serviceName, final String appName) {
final String effServiceName = serviceName != null ? serviceName : getServiceName();
final String effAppName = appName != null ? appName : getAppName();
return effAppName + "." + effServiceName;
}
static int getInstanceId() {
return getRandomInt(MAX_INSTANCE_ID);
}
static String getHardwareId() {
return "localcloud";
}
static String getImageId() {
return "localcloud";
}
static String getMachineId() {
return "localcloud";
}
static String getPrivateIp() {
return getLocalHost().getHostAddress();
}
static Map<String, Object> getProcessDetails(final int instanceId) {
final Map<String, Object> map = new HashMap<String, Object>();
map.put("icon", "icon.png");
map.put("url", null);
map.put("Cloud Public IP", getPublicIp());
map.put("Cloud Image ID", getImageId());
map.put("Cloud Private IP", getPrivateIp());
map.put("GSC PID", "4276");
map.put("Cloud Hardware ID", getHardwareId());
map.put("Instance ID", instanceId);
map.put("Machine ID", getMachineId());
map.put("Working Directory",
"D:\\gigaSpaces\\gigaspaces-cloudify\\work\\processing-units\\simpleApp_simple_"
+ instanceId + "_1051025036\\ext");
return map;
}
static String getPublicIp() {
String localhostaddress = getLocalHost().getHostAddress();
localhostaddress = localhostaddress.substring(0, localhostaddress.length() - 1);
Random random = new Random();
localhostaddress = localhostaddress.concat(String.valueOf(random.nextInt(10)));
return localhostaddress;
}
static String getTemplateName() {
return "MY_TEMPLATE_" + getInstanceId();
}
static ComputeTemplateHolder getTemplate() {
ComputeTemplateHolder holder = new ComputeTemplateHolder();
String templateName = getTemplateName();
holder.setName(templateName);
holder.setTemplateFileName(templateName + DSLUtils.TEMPLATE_DSL_FILE_NAME_SUFFIX);
holder.setPropertiesFileName(templateName + DSLUtils.TEMPLATES_PROPERTIES_FILE_NAME_SUFFIX);
ComputeTemplate cloudTemplate = new ComputeTemplate();
cloudTemplate.setImageId("eu-west-1/ami-c1aaabb5");
cloudTemplate.setMachineMemoryMB(MACHINE_MEMORY_MB);
cloudTemplate.setHardwareId("m1.small");
cloudTemplate.setLocationId("eu-west-1");
cloudTemplate.setNumberOfCores(1);
cloudTemplate.setRemoteDirectory("upload");
cloudTemplate.setLocalDirectory("upload");
cloudTemplate.setScriptLanguage(ScriptLanguages.LINUX_SHELL);
cloudTemplate.setFileTransfer(FileTransferModes.SFTP);
cloudTemplate.setKeyFile("key-file.pem");
cloudTemplate.setUsername(templateName.toLowerCase());
cloudTemplate.setRemoteExecution(RemoteExecutionModes.SSH);
cloudTemplate.setPrivileged(true);
Map<String, Object> options = new HashMap<String, Object>();
options.put("keyPair", "key-pair-eu");
String[] securityGroups = {"default"};
options.put("securityGroups", securityGroups);
cloudTemplate.setOptions(options);
holder.setCloudTemplate(cloudTemplate);
return holder;
}
static AddTemplatesResponse getAddTemplatesResponseExample() {
// creating partial failure example
Map<String, AddTemplateResponse> templates = new HashMap<String, AddTemplateResponse>();
String instance1 = RESTExamples.getPublicIp();
String instance2 = RESTExamples.getPublicIp();
String instance3 = RESTExamples.getPublicIp();
List<String> instances = new LinkedList<String>();
instances.add(instance1);
instances.add(instance2);
instances.add(instance3);
/*
* template1 (failure)
*/
AddTemplateResponse template1Response = new AddTemplateResponse();
Map<String, String> template1FailureMap = new HashMap<String, String>();
template1FailureMap.put(instance1, "template already exists");
template1FailureMap.put(instance2, "template already exists");
template1FailureMap.put(instance3, "template already exists");
template1Response.setFailedToAddHosts(template1FailureMap);
List<String> template1SuccessList = new LinkedList<String>();
template1Response.setSuccessfullyAddedHosts(template1SuccessList);
templates.put("SMALL_LINUX", template1Response);
/*
* template2 (partial failure)
*/
AddTemplateResponse template2Response = new AddTemplateResponse();
Map<String, String> template2FailureMap = new HashMap<String, String>();
template2FailureMap.put(instance1, "template already exists");
template2FailureMap.put(instance2, "template already exists");
List<String> template2SuccessList = new LinkedList<String>();
template2Response.setFailedToAddHosts(template2FailureMap);
template2SuccessList.add(instance3);
template2Response.setSuccessfullyAddedHosts(template2SuccessList);
templates.put("SMALL_UBUNTU", template2Response);
/*
* template3 (success)
*/
AddTemplateResponse template3Response = new AddTemplateResponse();
Map<String, String> template3FailureMap = new HashMap<String, String>();
template3Response.setFailedToAddHosts(template3FailureMap);
List<String> template3SuccessList = instances;
template3Response.setSuccessfullyAddedHosts(template3SuccessList);
templates.put("SMALL_SUSE", template3Response);
AddTemplatesResponse response = new AddTemplatesResponse();
response.setTemplates(templates);
response.setInstances(instances);
response.setStatus(AddTemplatesStatus.PARTIAL_FAILURE);
return response;
}
private static int getRandomInt(final int max) {
return RandomUtils.nextInt(max);
}
private static ServiceDescription getServiceDescription(final String serviceName, final int id) {
final ServiceDescription serviceDescription = new ServiceDescription();
final int numberOfInstances = getNumberOfInstances();
final List<InstanceDescription> instancesDescriptionList = new LinkedList<InstanceDescription>();
instancesDescriptionList.add(getInstanceDescription(serviceName, id));
instancesDescriptionList.add(getInstanceDescription(serviceName, id + 2));
serviceDescription.setApplicationName(getAppName());
serviceDescription.setInstanceCount(numberOfInstances);
serviceDescription.setPlannedInstances(numberOfInstances);
serviceDescription.setServiceName(serviceName);
serviceDescription.setInstancesDescription(instancesDescriptionList);
serviceDescription.setServiceState(DeploymentState.STARTED);
return serviceDescription;
}
private static InstanceDescription getInstanceDescription(final String serviceName, final int id) {
final InstanceDescription instanceDescription = new InstanceDescription();
final InetAddress localHost = getLocalHost();
String hostAddress;
String hostName;
if (localHost == null) {
hostAddress = "localhost";
hostName = "localhost";
} else {
hostAddress = localHost.getHostAddress();
hostName = localHost.getHostName();
}
instanceDescription.setHostAddress(hostAddress);
instanceDescription.setHostName(hostName);
instanceDescription.setInstanceId(id);
instanceDescription.setInstanceName(getInstanceName(serviceName, null));
instanceDescription.setInstanceStatus("RUNNING");
return instanceDescription;
}
private static InetAddress getLocalHost() {
try {
return InetAddress.getLocalHost();
} catch (final UnknownHostException e) {
return null;
}
}
}