5
5
6
6
package com .aws .greengrass .localdebugconsole ;
7
7
8
+ import com .amazonaws .greengrass .streammanager .model .MessageStreamDefinition ;
8
9
import com .aws .greengrass .builtin .services .pubsub .PubSubIPCEventStreamAgent ;
9
10
import com .aws .greengrass .builtin .services .pubsub .PublishEvent ;
10
11
import com .aws .greengrass .builtin .services .pubsub .SubscribeRequest ;
16
17
import com .aws .greengrass .localdebugconsole .messageutils .MessageType ;
17
18
import com .aws .greengrass .localdebugconsole .messageutils .PackedRequest ;
18
19
import com .aws .greengrass .localdebugconsole .messageutils .Request ;
20
+ import com .aws .greengrass .localdebugconsole .messageutils .StreamManagerResponseMessage ;
19
21
import com .aws .greengrass .logging .api .Logger ;
20
22
import com .aws .greengrass .mqttclient .MqttClient ;
21
23
import com .aws .greengrass .mqttclient .MqttRequestException ;
24
26
import com .aws .greengrass .mqttclient .v5 .Unsubscribe ;
25
27
import com .aws .greengrass .util .DefaultConcurrentHashMap ;
26
28
import com .aws .greengrass .util .Pair ;
29
+ import com .aws .greengrass .util .Utils ;
27
30
import com .fasterxml .jackson .core .JsonProcessingException ;
28
31
import com .fasterxml .jackson .databind .JsonNode ;
29
32
import com .fasterxml .jackson .databind .ObjectMapper ;
@@ -71,20 +74,23 @@ public class DashboardServer extends WebSocketServer implements KernelMessagePus
71
74
private final Authenticator authenticator ;
72
75
private final MqttClient mqttClient ;
73
76
77
+ private final StreamManagerHelper streamManagerHelper ;
78
+
74
79
PubSubIPCEventStreamAgent pubSubIPCAgent ;
75
80
private final String SERVICE_NAME = "LocalDebugConsole" ;
76
81
77
82
public DashboardServer (InetSocketAddress address , Logger logger , Kernel root , DeviceConfiguration deviceConfig ,
78
- Authenticator authenticator , Provider <SSLEngine > engineProvider ) {
83
+ Authenticator authenticator , Provider <SSLEngine > engineProvider , String streamManagerAuthToken ) {
79
84
this (address , logger , new KernelCommunicator (root , logger , deviceConfig ), authenticator , engineProvider ,
80
85
root .getContext ().get (PubSubIPCEventStreamAgent .class ),
81
- root .getContext ().get (MqttClient .class ));
86
+ root .getContext ().get (MqttClient .class ),
87
+ new StreamManagerHelper (root , streamManagerAuthToken ));
82
88
}
83
89
84
90
// constructor for unit testing
85
91
DashboardServer (InetSocketAddress address , Logger logger , DashboardAPI dashboardAPI , Authenticator authenticator ,
86
92
Provider <SSLEngine > engineProvider , PubSubIPCEventStreamAgent pubSubIPCAgent ,
87
- MqttClient mqttClient ) {
93
+ MqttClient mqttClient , StreamManagerHelper streamManagerHelper ) {
88
94
super (address );
89
95
setReuseAddr (true );
90
96
setTcpNoDelay (true );
@@ -97,6 +103,7 @@ public DashboardServer(InetSocketAddress address, Logger logger, Kernel root, De
97
103
this .logger .atInfo ().log ("Starting dashboard server on address: {}" , address );
98
104
this .pubSubIPCAgent = pubSubIPCAgent ;
99
105
this .mqttClient = mqttClient ;
106
+ this .streamManagerHelper = streamManagerHelper ;
100
107
}
101
108
102
109
// links the API impl and starts the socket server
@@ -251,6 +258,40 @@ public void onMessage(WebSocket conn, String msg) {
251
258
unsubscribeFromPubSubTopic (conn , packedRequest , req );
252
259
break ;
253
260
}
261
+ case streamManagerListStreams : {
262
+ streamManagerListStreams (conn , packedRequest );
263
+ break ;
264
+ }
265
+ case streamManagerDescribeStream : {
266
+ streamManagerDescribeStream (conn , packedRequest , req );
267
+ break ;
268
+ }
269
+
270
+ case streamManagerDeleteMessageStream : {
271
+ streamManagerDeleteMessageStream (conn , packedRequest , req );
272
+ break ;
273
+ }
274
+
275
+ case streamManagerReadMessages : {
276
+ streamManagerReadMessages (conn , packedRequest , req );
277
+ break ;
278
+ }
279
+
280
+ case streamManagerAppendMessage :{
281
+ streamManagerAppendMessage (conn , packedRequest , req );
282
+ break ;
283
+ }
284
+
285
+ case streamManagerCreateMessageStream :{
286
+ streamManagerCreateMessageStream (conn , packedRequest , req );
287
+ break ;
288
+ }
289
+
290
+ case streamManagerUpdateMessageStream :{
291
+ streamManagerUpdateMessageStream (conn , packedRequest , req );
292
+ break ;
293
+ }
294
+
254
295
default : { // echo
255
296
sendIfOpen (conn , new Message (MessageType .RESPONSE , packedRequest .requestID , req .call ));
256
297
break ;
@@ -355,6 +396,111 @@ private void publishToPubSubTopic(WebSocket conn, PackedRequest packedRequest, R
355
396
}
356
397
}
357
398
399
+ private void streamManagerListStreams (WebSocket conn , PackedRequest packedRequest ) {
400
+ StreamManagerResponseMessage responseMessage = new StreamManagerResponseMessage ();
401
+ try {
402
+ responseMessage .streamsList = this .streamManagerHelper .listStreams ();
403
+ responseMessage .successful = true ;
404
+ }
405
+ catch (Exception e ){
406
+ logger .error ("Error while listing streams:" , e );
407
+ responseMessage .errorMsg = Utils .generateFailureMessage (e );
408
+ }
409
+ sendIfOpen (conn , new Message (MessageType .RESPONSE , packedRequest .requestID , responseMessage ));
410
+ }
411
+
412
+ private void streamManagerDescribeStream (WebSocket conn , PackedRequest packedRequest , Request req ) {
413
+ StreamManagerResponseMessage responseMessage = new StreamManagerResponseMessage ();
414
+ try {
415
+ responseMessage .messageStreamInfo = this .streamManagerHelper .describeStream (req .args [0 ]);
416
+ responseMessage .successful = true ;
417
+ }
418
+ catch (Exception e ){
419
+ logger .error ("Error while describing stream:" ,e );
420
+ responseMessage .errorMsg = Utils .generateFailureMessage (e );
421
+ }
422
+ sendIfOpen (conn , new Message (MessageType .RESPONSE , packedRequest .requestID , responseMessage ));
423
+ }
424
+
425
+ private void streamManagerDeleteMessageStream (WebSocket conn , PackedRequest packedRequest , Request req ) {
426
+ StreamManagerResponseMessage responseMessage = new StreamManagerResponseMessage ();
427
+ try {
428
+ this .streamManagerHelper .deleteMessageStream (req .args [0 ]);
429
+ responseMessage .successful = true ;
430
+ }
431
+ catch (Exception e ){
432
+ logger .error ("Error while deleting stream:" , e );
433
+ responseMessage .errorMsg = Utils .generateFailureMessage (e );
434
+ }
435
+ sendIfOpen (conn , new Message (MessageType .RESPONSE , packedRequest .requestID , responseMessage ));
436
+ }
437
+
438
+ private void streamManagerReadMessages (WebSocket conn , PackedRequest packedRequest , Request req ) {
439
+ StreamManagerResponseMessage responseMessage = new StreamManagerResponseMessage ();
440
+ try {
441
+ if (req .args .length == 5 ) {
442
+ responseMessage .messagesList = this .streamManagerHelper .readMessages (
443
+ req .args [0 ],
444
+ Long .parseLong (req .args [1 ]),
445
+ Long .parseLong (req .args [2 ]),
446
+ Long .parseLong (req .args [3 ]),
447
+ Long .parseLong (req .args [4 ]));
448
+ responseMessage .successful = true ;
449
+ }
450
+ else {
451
+ logger .atError ().log ("StreamManagerReadMessages requires 5 arguments" );
452
+ responseMessage .errorMsg = "StreamManagerReadMessages requires 5 arguments" ;
453
+ }
454
+ }
455
+ catch (Exception e ){
456
+ logger .error ("Error while reading messages:" , e );
457
+ responseMessage .errorMsg = Utils .generateFailureMessage (e );
458
+ }
459
+ sendIfOpen (conn , new Message (MessageType .RESPONSE , packedRequest .requestID , responseMessage ));
460
+ }
461
+
462
+ private void streamManagerAppendMessage (WebSocket conn , PackedRequest packedRequest , Request req ) {
463
+ StreamManagerResponseMessage responseMessage = new StreamManagerResponseMessage ();
464
+ try {
465
+ this .streamManagerHelper .appendMessage (req .args [0 ], req .args [1 ].getBytes ());
466
+ responseMessage .successful = true ;
467
+ }
468
+ catch (Exception e ){
469
+ logger .error ("Error while appending message to the stream:" , e );
470
+ responseMessage .errorMsg = Utils .generateFailureMessage (e );
471
+ }
472
+ sendIfOpen (conn , new Message (MessageType .RESPONSE , packedRequest .requestID , responseMessage ));
473
+ }
474
+
475
+ private void streamManagerCreateMessageStream (WebSocket conn , PackedRequest packedRequest , Request req ) {
476
+ StreamManagerResponseMessage responseMessage = new StreamManagerResponseMessage ();
477
+ try {
478
+ MessageStreamDefinition messageStreamDefinition = jsonMapper .readValue (req .args [0 ], MessageStreamDefinition .class );
479
+ this .streamManagerHelper .createMessageStream (messageStreamDefinition );
480
+ responseMessage .successful = true ;
481
+ }
482
+ catch (Exception e ){
483
+ logger .error ("Error while appending message to the stream:" , e );
484
+ responseMessage .errorMsg = Utils .generateFailureMessage (e );
485
+ }
486
+ sendIfOpen (conn , new Message (MessageType .RESPONSE , packedRequest .requestID , responseMessage ));
487
+ }
488
+
489
+ private void streamManagerUpdateMessageStream (WebSocket conn , PackedRequest packedRequest , Request req ) {
490
+ StreamManagerResponseMessage responseMessage = new StreamManagerResponseMessage ();
491
+ try {
492
+ MessageStreamDefinition messageStreamDefinition = jsonMapper .readValue (req .args [0 ], MessageStreamDefinition .class );
493
+ this .streamManagerHelper .updateMessageStream (messageStreamDefinition );
494
+ responseMessage .successful = true ;
495
+ }
496
+ catch (Exception e ){
497
+ logger .error ("Error while appending message to the stream:" , e );
498
+ responseMessage .errorMsg = Utils .generateFailureMessage (e );
499
+ }
500
+ sendIfOpen (conn , new Message (MessageType .RESPONSE , packedRequest .requestID , responseMessage ));
501
+ }
502
+
503
+
358
504
@ Override
359
505
public void onClose (WebSocket conn , int code , String reason , boolean remote ) {
360
506
connections .remove (conn );
0 commit comments