1
1
package example ;
2
2
3
3
import com .amazonaws .services .lambda .runtime .Context ;
4
- import com .amazonaws .services .lambda .runtime .LambdaLogger ;
5
4
import com .amazonaws .services .lambda .runtime .RequestHandler ;
6
5
import com .amazonaws .services .lambda .runtime .events .SQSEvent ;
7
6
import com .amazonaws .services .lambda .runtime .events .SQSEvent .SQSMessage ;
8
-
9
- import software .amazon .awssdk .services .lambda .model .GetAccountSettingsRequest ;
10
- import software .amazon .awssdk .services .lambda .model .GetAccountSettingsResponse ;
11
- import software .amazon .awssdk .services .lambda .model .ServiceException ;
12
- import software .amazon .awssdk .services .lambda .LambdaAsyncClient ;
13
- import software .amazon .awssdk .services .lambda .model .AccountUsage ;
14
-
15
- import com .google .gson .Gson ;
16
- import com .google .gson .GsonBuilder ;
17
-
7
+ import org .crac .CheckpointException ;
8
+ import org .crac .RestoreException ;
18
9
import org .slf4j .Logger ;
19
10
import org .slf4j .LoggerFactory ;
20
11
21
- import java .lang .StringBuilder ;
22
- import java .util .Map ;
23
- import java .util .List ;
24
- import java .util .concurrent .CompletableFuture ;
25
-
26
- // Handler value: example.Handler
12
+ // Handler value: io.github.crac.example.lambda.Handler
27
13
public class Handler implements RequestHandler <SQSEvent , String >{
28
14
private static final Logger logger = LoggerFactory .getLogger (Handler .class );
29
- private static final Gson gson = new GsonBuilder ().setPrettyPrinting ().create ();
30
- private static final LambdaAsyncClient lambdaClient = LambdaAsyncClient .create ();
15
+
31
16
public Handler (){
32
- CompletableFuture <GetAccountSettingsResponse > accountSettings = lambdaClient .getAccountSettings (GetAccountSettingsRequest .builder ().build ());
33
- try {
34
- GetAccountSettingsResponse settings = accountSettings .get ();
35
- } catch (Exception e ) {
36
- e .getStackTrace ();
37
- }
38
17
}
18
+
39
19
@ Override
40
20
public String handleRequest (SQSEvent event , Context context )
41
21
{
42
- String response = new String ();
43
- // call Lambda API
44
- logger .info ("Getting account settings" );
45
- CompletableFuture <GetAccountSettingsResponse > accountSettings =
46
- lambdaClient .getAccountSettings (GetAccountSettingsRequest .builder ().build ());
47
- // log execution details
48
- logger .info ("ENVIRONMENT VARIABLES: {}" , gson .toJson (System .getenv ()));
49
- logger .info ("CONTEXT: {}" , gson .toJson (context ));
50
- logger .info ("EVENT: {}" , gson .toJson (event ));
22
+ logger .info ("handleRequest start" );
23
+
51
24
// process event
52
- for (SQSMessage msg : event .getRecords ()){
25
+ String response = "" ;
26
+
27
+ for (SQSMessage msg : event .getRecords ()) {
53
28
logger .info (msg .getBody ());
29
+ response = msg .getBody ();
30
+
31
+ switch (msg .getBody ()) {
32
+ case "checkpoint" :
33
+ (new Thread (() -> {
34
+ try {
35
+ Thread .sleep (1_000 );
36
+ org .crac .Core .checkpointRestore ();
37
+ } catch (CheckpointException | RestoreException | InterruptedException e ) {
38
+ e .printStackTrace ();
39
+ }
40
+ })).start ();
41
+ break ;
42
+ default :
43
+ // Just echo. Will also be used to break out of curl waiting for connection.
44
+ break ;
45
+ }
54
46
}
55
- // process Lambda API response
56
- try {
57
- GetAccountSettingsResponse settings = accountSettings .get ();
58
- response = gson .toJson (settings .accountUsage ());
59
- logger .info ("Account usage: {}" , response );
60
- } catch (Exception e ) {
61
- e .getStackTrace ();
62
- }
47
+
63
48
return response ;
64
49
}
65
- }
50
+ }
0 commit comments