Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
4 changes: 3 additions & 1 deletion src/main/java/dev/tomr/hcloud/HetznerCloud.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package dev.tomr.hcloud;

import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.json.JsonMapper;
import dev.tomr.hcloud.listener.ListenerManager;
import dev.tomr.hcloud.resources.server.Server;
import dev.tomr.hcloud.service.ServiceManager;
Expand All @@ -15,7 +17,7 @@
public class HetznerCloud {
protected static final Logger logger = LogManager.getLogger();

private static final ObjectMapper objectMapper = new ObjectMapper();
private static final ObjectMapper objectMapper = JsonMapper.builder().configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS, true).build();
private static final String HETZNER_CLOUD_HOST = "https://api.hetzner.cloud/v1/";

private static HetznerCloud instance;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package dev.tomr.hcloud.http;

import dev.tomr.hcloud.HetznerCloud;
import dev.tomr.hcloud.http.exception.HetznerApiException;
import dev.tomr.hcloud.http.model.HetznerErrorResponse;
import org.slf4j.Logger;
Expand Down Expand Up @@ -98,6 +97,7 @@ private HttpRequest createHttpRequest(String uri, RequestVerb requestVerb, Strin
case GET -> builder.GET();
case POST -> builder.POST(HttpRequest.BodyPublishers.ofString(body));
case PUT -> builder.PUT(HttpRequest.BodyPublishers.ofString(body));
case DELETE -> builder.DELETE();
};
return builder.build();
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/dev/tomr/hcloud/http/RequestVerb.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@
* Request Verb's for the HTTP Client
*/
public enum RequestVerb {
GET, POST, PUT
GET, POST, PUT, DELETE
}
102 changes: 102 additions & 0 deletions src/main/java/dev/tomr/hcloud/http/model/Action.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
package dev.tomr.hcloud.http.model;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonRootName;
import dev.tomr.hcloud.http.HetznerJsonObject;
import dev.tomr.hcloud.http.model.enums.Status;

import java.util.List;

@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonRootName("action")
public class Action extends HetznerJsonObject {

private String command;
private String finished;
private Integer id;
private Integer progress;
private String started;
private Error error;
private Status status;
private List<Resource> resources;

public Action(String command, String finished, Integer id, Integer progress, String started, Error error, Status status, List<Resource> resources) {
this.command = command;
this.finished = finished;
this.id = id;
this.progress = progress;
this.started = started;
this.error = error;
this.status = status;
this.resources = resources;
}

public Action() {
}

public String getCommand() {
return command;
}

public void setCommand(String command) {
this.command = command;
}

public String getFinished() {
return finished;
}

public void setFinished(String finished) {
this.finished = finished;
}

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public Integer getProgress() {
return progress;
}

public void setProgress(Integer progress) {
this.progress = progress;
}

public String getStarted() {
return started;
}

public void setStarted(String started) {
this.started = started;
}

public Error getError() {
return error;
}

public void setError(Error error) {
this.error = error;
}

public Status getStatus() {
return status;
}

public void setStatus(Status status) {
this.status = status;
}

public List<Resource> getResources() {
return resources;
}

public void setResources(List<Resource> resources) {
this.resources = resources;
}
}
24 changes: 24 additions & 0 deletions src/main/java/dev/tomr/hcloud/http/model/ActionWrapper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package dev.tomr.hcloud.http.model;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import dev.tomr.hcloud.http.HetznerJsonObject;

@JsonIgnoreProperties(ignoreUnknown = true)
public class ActionWrapper extends HetznerJsonObject {
private Action action;

public ActionWrapper() {
}

public ActionWrapper(Action action) {
this.action = action;
}

public Action getAction() {
return action;
}

public void setAction(Action action) {
this.action = action;
}
}
32 changes: 32 additions & 0 deletions src/main/java/dev/tomr/hcloud/http/model/Error.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package dev.tomr.hcloud.http.model;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;

@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Error {
private String code;
private String message;

public Error(String code, String message) {
this.code = code;
this.message = message;
}

public Error() {}

public String getCode() {
return code;
}
public String getMessage() {
return message;
}

public void setCode(String code) {
this.code = code;
}
public void setMessage(String message) {
this.message = message;
}
}
29 changes: 0 additions & 29 deletions src/main/java/dev/tomr/hcloud/http/model/HetznerErrorResponse.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package dev.tomr.hcloud.http.model;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import dev.tomr.hcloud.http.HetznerJsonObject;

public class HetznerErrorResponse extends HetznerJsonObject {
Expand All @@ -21,31 +19,4 @@ public String toString() {
return "HetznerErrorResponse [code=" + error.getCode() + ", message=" + error.getMessage() + "]";
}

@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public static class Error {
private String code;
private String message;

public Error(String code, String message) {
this.code = code;
this.message = message;
}

public Error() {}

public String getCode() {
return code;
}
public String getMessage() {
return message;
}

public void setCode(String code) {
this.code = code;
}
public void setMessage(String message) {
this.message = message;
}
}
}
30 changes: 30 additions & 0 deletions src/main/java/dev/tomr/hcloud/http/model/Resource.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package dev.tomr.hcloud.http.model;

public class Resource {
private Integer id;
private String type;

public Resource(Integer id, String type) {
this.id = id;
this.type = type;
}

public Resource() {
}

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getType() {
return type;
}

public void setType(String type) {
this.type = type;
}
}
5 changes: 5 additions & 0 deletions src/main/java/dev/tomr/hcloud/http/model/enums/Status.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package dev.tomr.hcloud.http.model.enums;

public enum Status {
RUNNING, SUCCESS, ERROR
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ private ListenerManager() {
}

/**
* Get's the ListenerManager Instance, creates one if it doesn't exist
* Gets the ListenerManager Instance, creates one if it doesn't exist
* @return {@code ListenerManager} in use
*/
public static ListenerManager getInstance() {
Expand Down
11 changes: 8 additions & 3 deletions src/main/java/dev/tomr/hcloud/listener/ServerChangeListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,13 @@ public class ServerChangeListener implements PropertyChangeListener {
@Override
public void propertyChange(PropertyChangeEvent evt) {
Server server = (Server) evt.getSource();
logger.info("Server changed: " + evt.getPropertyName());
logger.info("Server: " + evt.getOldValue() + " -> " + evt.getNewValue());
HetznerCloud.getInstance().getServiceManager().getServerService().serverNameOrLabelUpdate(evt.getPropertyName(), evt.getNewValue(), server);
if (evt.getPropertyName().equals("delete")) {
logger.warn("Server delete has been called. Instructing Hetzner to delete");
HetznerCloud.getInstance().getServiceManager().getServerService().deleteServerFromHetzner(server);
} else {
logger.info("Server changed: " + evt.getPropertyName());
logger.info("Server: " + evt.getOldValue() + " -> " + evt.getNewValue());
HetznerCloud.getInstance().getServiceManager().getServerService().serverNameOrLabelUpdate(evt.getPropertyName(), evt.getNewValue(), server);
}
}
}
7 changes: 7 additions & 0 deletions src/main/java/dev/tomr/hcloud/resources/server/Server.java
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,13 @@ private void setupPropertyChangeListener() {
propertyChangeSupport.addPropertyChangeListener(HetznerCloud.getInstance().getListenerManager().getServerChangeListener());
}

/**
* Deletes a Server from Hetzner. Note, this is immediate and destructive. Ensure you want to delete the server before calling.
*/
public void delete() {
propertyChangeSupport.firePropertyChange("delete", null, null);
}


// These are the current setters that will send an API request (PUT /servers) when actions begin to be added, they will also likely be triggered by setters

Expand Down
11 changes: 11 additions & 0 deletions src/main/java/dev/tomr/hcloud/service/ServiceManager.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package dev.tomr.hcloud.service;

import dev.tomr.hcloud.service.action.ActionService;
import dev.tomr.hcloud.service.server.ServerService;

import java.util.concurrent.ExecutorService;
Expand All @@ -9,12 +10,14 @@ public class ServiceManager {
private static ServiceManager instance;

private final ServerService serverService;
private final ActionService actionService;

private ExecutorService executor;

private ServiceManager() {
instance = this;
this.serverService = new ServerService(this);
this.actionService = new ActionService();
}

/**
Expand All @@ -36,6 +39,14 @@ public ServerService getServerService() {
return serverService;
}

/**
* Get ActionService Instance
* @return the {@code ActionService} instance
*/
public ActionService getActionService() {
return actionService;
}

/**
* Get an Executor for threaded tasks
* @return The Existing or a new {@code ExecutorService}
Expand Down
Loading
Loading