Skip to content

Commit 22860af

Browse files
author
Janelle Law
authored
Send notification on explicit recording stop (#796)
1 parent 8347e65 commit 22860af

File tree

4 files changed

+50
-5
lines changed

4 files changed

+50
-5
lines changed

src/main/java/io/cryostat/net/web/http/api/v1/HttpApiV1Module.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
*/
3838
package io.cryostat.net.web.http.api.v1;
3939

40+
import io.cryostat.messaging.notifications.NotificationFactory;
4041
import io.cryostat.net.TargetConnectionManager;
4142
import io.cryostat.net.web.http.RequestHandler;
4243
import io.cryostat.recordings.RecordingArchiveHelper;
@@ -98,8 +99,9 @@ static TargetRecordingPatchSave provideTargetRecordingPatchSave(
9899

99100
@Provides
100101
static TargetRecordingPatchStop provideTargetRecordingPatchStop(
101-
TargetConnectionManager targetConnectionManager) {
102-
return new TargetRecordingPatchStop(targetConnectionManager);
102+
TargetConnectionManager targetConnectionManager,
103+
NotificationFactory notificationFactory) {
104+
return new TargetRecordingPatchStop(targetConnectionManager, notificationFactory);
103105
}
104106

105107
@Binds

src/main/java/io/cryostat/net/web/http/api/v1/TargetRecordingPatchStop.java

+23-1
Original file line numberDiff line numberDiff line change
@@ -37,25 +37,34 @@
3737
*/
3838
package io.cryostat.net.web.http.api.v1;
3939

40+
import java.util.Map;
4041
import java.util.Optional;
4142

4243
import javax.inject.Inject;
4344

4445
import org.openjdk.jmc.rjmx.services.jfr.IRecordingDescriptor;
4546

47+
import io.cryostat.messaging.notifications.NotificationFactory;
4648
import io.cryostat.net.ConnectionDescriptor;
4749
import io.cryostat.net.TargetConnectionManager;
50+
import io.cryostat.net.web.http.HttpMimeType;
4851

4952
import io.vertx.ext.web.RoutingContext;
5053
import io.vertx.ext.web.handler.impl.HttpStatusException;
5154

5255
class TargetRecordingPatchStop {
5356

5457
private final TargetConnectionManager targetConnectionManager;
58+
private final NotificationFactory notificationFactory;
59+
60+
private static final String NOTIFICATION_CATEGORY = "RecordingStopped";
5561

5662
@Inject
57-
TargetRecordingPatchStop(TargetConnectionManager targetConnectionManager) {
63+
TargetRecordingPatchStop(
64+
TargetConnectionManager targetConnectionManager,
65+
NotificationFactory notificationFactory) {
5866
this.targetConnectionManager = targetConnectionManager;
67+
this.notificationFactory = notificationFactory;
5968
}
6069

6170
void handle(RoutingContext ctx, ConnectionDescriptor connectionDescriptor) throws Exception {
@@ -80,5 +89,18 @@ void handle(RoutingContext ctx, ConnectionDescriptor connectionDescriptor) throw
8089
});
8190
ctx.response().setStatusCode(200);
8291
ctx.response().end();
92+
93+
notificationFactory
94+
.createBuilder()
95+
.metaCategory(NOTIFICATION_CATEGORY)
96+
.metaType(HttpMimeType.JSON)
97+
.message(
98+
Map.of(
99+
"recording",
100+
recordingName,
101+
"target",
102+
connectionDescriptor.getTargetId()))
103+
.build()
104+
.send();
83105
}
84106
}

src/test/java/io/cryostat/net/web/http/api/v1/TargetRecordingPatchStopTest.java

+22-1
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,11 @@
4343
import org.openjdk.jmc.rjmx.services.jfr.IRecordingDescriptor;
4444

4545
import io.cryostat.core.net.JFRConnection;
46+
import io.cryostat.messaging.notifications.Notification;
47+
import io.cryostat.messaging.notifications.NotificationFactory;
4648
import io.cryostat.net.ConnectionDescriptor;
4749
import io.cryostat.net.TargetConnectionManager;
50+
import io.cryostat.net.web.http.HttpMimeType;
4851

4952
import io.vertx.core.http.HttpServerResponse;
5053
import io.vertx.ext.web.RoutingContext;
@@ -71,10 +74,28 @@ class TargetRecordingPatchStopTest {
7174
@Mock HttpServerResponse resp;
7275
@Mock JFRConnection connection;
7376
@Mock IFlightRecorderService service;
77+
@Mock NotificationFactory notificationFactory;
78+
@Mock Notification notification;
79+
@Mock Notification.Builder notificationBuilder;
7480

7581
@BeforeEach
7682
void setup() {
77-
this.patchStop = new TargetRecordingPatchStop(targetConnectionManager);
83+
Mockito.lenient().when(notificationFactory.createBuilder()).thenReturn(notificationBuilder);
84+
Mockito.lenient()
85+
.when(notificationBuilder.metaCategory(Mockito.any()))
86+
.thenReturn(notificationBuilder);
87+
Mockito.lenient()
88+
.when(notificationBuilder.metaType(Mockito.any(Notification.MetaType.class)))
89+
.thenReturn(notificationBuilder);
90+
Mockito.lenient()
91+
.when(notificationBuilder.metaType(Mockito.any(HttpMimeType.class)))
92+
.thenReturn(notificationBuilder);
93+
Mockito.lenient()
94+
.when(notificationBuilder.message(Mockito.any()))
95+
.thenReturn(notificationBuilder);
96+
Mockito.lenient().when(notificationBuilder.build()).thenReturn(notification);
97+
98+
this.patchStop = new TargetRecordingPatchStop(targetConnectionManager, notificationFactory);
7899
}
79100

80101
@Test

0 commit comments

Comments
 (0)