Skip to content

Commit 04323ad

Browse files
committed
Added response message and readme.
1 parent 6e79bbb commit 04323ad

File tree

3 files changed

+76
-20
lines changed

3 files changed

+76
-20
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
This handler is created for hyperflow java tasks executed on aws lambda.
2+
To use it, build jar with "mvn clean package" command and upload it into lambda function.
3+
Function runtime and handler should be set to "Java 8" and "Handler::handleRequest" respectively.

src/main/java/Handler.java

Lines changed: 43 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import com.amazonaws.services.s3.model.S3Object;
44
import com.amazonaws.util.IOUtils;
55

6+
import java.io.IOException;
7+
import java.net.HttpURLConnection;
68
import java.time.Duration;
79
import java.time.Instant;
810
import java.util.Map;
@@ -11,33 +13,38 @@ public class Handler {
1113

1214
private static final String FOLDER_PATH = "/tmp/";
1315
private static final String BUCKET_KEY = "bucket";
16+
private static final String PREFIX_KEY = "prefix";
1417

15-
public long handleRequest(Request request, Context context) throws Exception {
18+
public Response handleRequest(Request request, Context context) {
1619

1720
Instant instant1 = Instant.now();
18-
1921
LambdaLogger logger = context.getLogger();
2022

21-
logger.log("executable: " + request.getExecutable());
22-
logger.log("args: " + request.getArgs());
23-
logger.log("inputs: " + request.getInputs());
24-
logger.log("outputs: " + request.getOutputs());
25-
logger.log("bucket: " + request.getOptions().get(BUCKET_KEY));
26-
logger.log("prefix: " + request.getOptions().get("prefix"));
27-
28-
downloadData(request, logger);
29-
execute(request.getExecutable(), String.join(" ", request.getArgs()), logger);
30-
uploadData(request, logger);
31-
32-
Instant instant2 = Instant.now();
33-
34-
return Duration.between(instant1, instant2).getSeconds();
23+
try {
24+
logger.log("executable: " + request.getExecutable());
25+
logger.log("args: " + request.getArgs());
26+
logger.log("inputs: " + request.getInputs());
27+
logger.log("outputs: " + request.getOutputs());
28+
logger.log("bucket: " + request.getOptions().get(BUCKET_KEY));
29+
logger.log("prefix: " + request.getOptions().get(PREFIX_KEY));
30+
31+
downloadData(request, logger);
32+
execute(request.getExecutable(), String.join(" ", request.getArgs()), logger);
33+
uploadData(request, logger);
34+
} catch (Exception e) {
35+
return handleException(e, request);
36+
}
37+
Response response = new Response();
38+
response.setStatusCode(HttpURLConnection.HTTP_OK);
39+
response.setMessage("Execution of " + request.getExecutable() + " successful, duration: " + Duration.between(instant1, Instant.now()).getSeconds() + " seconds");
40+
response.setArgs(request.getArgs().toString());
41+
return response;
3542
}
3643

37-
private void downloadData(Request request, LambdaLogger logger) throws Exception {
44+
private void downloadData(Request request, LambdaLogger logger) throws IOException {
3845
for (Map<String, Object> input : request.getInputs()) {
3946
String fileName = input.get("name").toString();
40-
String key = request.getOptions().get("prefix") + "/" + fileName;
47+
String key = request.getOptions().get(PREFIX_KEY) + "/" + fileName;
4148
logger.log("Downloading " + request.getOptions().get(BUCKET_KEY) + "/" + key);
4249
S3Object s3Object = S3Utils.getObject(request.getOptions().get(BUCKET_KEY), key);
4350
S3Utils.saveToFile(s3Object, FOLDER_PATH + fileName);
@@ -63,11 +70,27 @@ private void uploadData(Request request, LambdaLogger logger) {
6370
for (Map<String, String> input : request.getOutputs()) {
6471
String fileName = input.get("name");
6572
String filePath = FOLDER_PATH + fileName;
66-
String key = request.getOptions().get("prefix") + "/" + fileName;
67-
//String key = "test" + "/" + fileName;
73+
String key = request.getOptions().get(PREFIX_KEY) + "/" + fileName;
6874
logger.log("Uploading " + request.getOptions().get(BUCKET_KEY) + "/" + key);
6975
S3Utils.putObject(request.getOptions().get(BUCKET_KEY), key, filePath);
7076
}
7177
}
7278

79+
private Response handleException(Exception e, Request request) {
80+
Throwable cause;
81+
if (e.getCause() != null) {
82+
cause = e.getCause();
83+
} else {
84+
cause = e;
85+
}
86+
while (cause.getCause() != null) {
87+
cause = cause.getCause();
88+
}
89+
Response response = new Response();
90+
response.setStatusCode(HttpURLConnection.HTTP_INTERNAL_ERROR);
91+
response.setMessage("Execution of " + request.getExecutable() + " failed, cause: " + cause.getMessage());
92+
response.setArgs(request.getArgs().toString());
93+
return response;
94+
}
95+
7396
}

src/main/java/Response.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
public class Response {
2+
3+
private int statusCode;
4+
private String message;
5+
private String args;
6+
7+
public int getStatusCode() {
8+
return statusCode;
9+
}
10+
11+
public void setStatusCode(int statusCode) {
12+
this.statusCode = statusCode;
13+
}
14+
15+
public String getMessage() {
16+
return message;
17+
}
18+
19+
public void setMessage(String message) {
20+
this.message = message;
21+
}
22+
23+
public String getArgs() {
24+
return args;
25+
}
26+
27+
public void setArgs(String args) {
28+
this.args = args;
29+
}
30+
}

0 commit comments

Comments
 (0)