33import com .amazonaws .services .s3 .model .S3Object ;
44import com .amazonaws .util .IOUtils ;
55
6+ import java .io .IOException ;
7+ import java .net .HttpURLConnection ;
68import java .time .Duration ;
79import java .time .Instant ;
810import 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}
0 commit comments