/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package se.kth.karamel.backend.running.model;
import java.util.ArrayList;
import java.util.List;
import se.kth.karamel.backend.launcher.OsType;
import se.kth.karamel.backend.running.model.tasks.Task;
/**
*
* @author kamal
*/
public class MachineRuntime {
public static enum LifeStatus {
FORKED, CONNECTED, UNREACHABLE, DESTROYED
}
public static enum TasksStatus {
ONGOING, FAILED, PAUSING, PAUSED, EMPTY
}
private final GroupRuntime group;
private LifeStatus lifeStatus = LifeStatus.FORKED;
private TasksStatus tasksStatus = TasksStatus.EMPTY;
private String name;
private String vmId;
private String privateIp;
private String publicIp;
private int sshPort;
private String sshUser;
private String machineType;
private OsType osType;
private final List<Task> tasks = new ArrayList<>();
public MachineRuntime(GroupRuntime group) {
this.group = group;
}
public GroupRuntime getGroup() {
return group;
}
public String getVmId() {
return vmId;
}
public void setVmId(String vmId) {
this.vmId = vmId;
}
public void setOsType(OsType osType) {
this.osType = osType;
}
public OsType getOsType() {
return osType;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPublicIp() {
return publicIp;
}
public synchronized void setPublicIp(String publicIp) {
this.publicIp = publicIp;
}
public String getPrivateIp() {
return privateIp;
}
public synchronized void setPrivateIp(String privateIp) {
this.privateIp = privateIp;
}
public int getSshPort() {
return sshPort;
}
public synchronized void setSshPort(int sshPort) {
this.sshPort = sshPort;
}
public String getSshUser() {
return sshUser;
}
public synchronized void setSshUser(String sshUser) {
this.sshUser = sshUser;
}
public List<Task> getTasks() {
return tasks;
}
public String getMachineType() {
return machineType;
}
public void setMachineType(String machineType) {
this.machineType = machineType;
}
public void addTask(Task task) {
tasks.add(task);
}
public void removeTask(Task task) {
tasks.remove(task);
}
public LifeStatus getLifeStatus() {
return lifeStatus;
}
public synchronized void setLifeStatus(LifeStatus lifeStatus) {
this.lifeStatus = lifeStatus;
}
public TasksStatus getTasksStatus() {
return tasksStatus;
}
public synchronized void setTasksStatus(TasksStatus tasksStatus, String taskId, String failureMessage) {
this.tasksStatus = tasksStatus;
if (tasksStatus == TasksStatus.FAILED) {
group.getCluster().issueFailure(new Failure(Failure.Type.TASK_FAILED, taskId, failureMessage));
}
}
public String getId() {
return publicIp;
}
}