Skip to content

Commit 5f69668

Browse files
Merge branch 'master' into fix/speed-up-mk-unit-tests
# Conflicts: # src/main/java/uk/gov/hmcts/reform/preapi/media/MediaKind.java
2 parents 1557214 + e18d82f commit 5f69668

29 files changed

+1063
-132
lines changed

charts/pre-api/Chart.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ appVersion: "1.0"
33
description: A Helm chart for pre-api App
44
name: pre-api
55
home: https://github.com/hmcts/pre-api
6-
version: 0.0.68
6+
version: 0.0.69
77
maintainers:
88
- name: HMCTS pre team
99
dependencies:

charts/pre-api/values.dev.template.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ java:
2525
ENABLE_NEW_EMAIL_SERVICE: true
2626
ENABLE_STREAMING_LOCATOR_ON_START: true
2727
ENABLE_AUTOMATED_EDITING: true
28+
ENABLE_ENHANCED_PROCESSING: true
2829
# Don't modify below here
2930
image: ${IMAGE_NAME}
3031
ingressHost: ${SERVICE_FQDN}

charts/pre-api/values.stg.template.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@ java:
1111
ENABLE_NEW_EMAIL_SERVICE: true
1212
ENABLE_STREAMING_LOCATOR_ON_START: true
1313
ENABLE_AUTOMATED_EDITING: true
14+
ENABLE_ENHANCED_PROCESSING: true
1415
image: ${IMAGE_NAME}
1516
ingressHost: ${SERVICE_FQDN}

charts/pre-api/values.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ java: &javavalues #This is an anchor to reuse settings in Job mode.
6868
ENABLE_NEW_EMAIL_SERVICE: false
6969
ENABLE_STREAMING_LOCATOR_ON_START: false
7070
ENABLE_AUTOMATED_EDITING: false
71+
ENABLE_ENHANCED_PROCESSING: false
7172
TASK_START_LIVE_EVENTS_BATCH_SIZE: 20
7273
TASK_START_LIVE_EVENTS_POLL_INTERVAL: 2000
7374
TASK_CLEANUP_LIVE_EVENTS_BATCH_SIZE: 3

src/main/java/uk/gov/hmcts/reform/preapi/config/JacksonConfiguration.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public ObjectMapper getMapper() {
3434
.configure(ACCEPT_CASE_INSENSITIVE_ENUMS, true)
3535
.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false)
3636
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
37+
.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true)
3738
.enable(INFER_BUILDER_TYPE_BINDINGS)
3839
.serializationInclusion(JsonInclude.Include.NON_NULL)
3940
.build();

src/main/java/uk/gov/hmcts/reform/preapi/controllers/MediaServiceController.java

Lines changed: 50 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import jakarta.validation.Valid;
77
import lombok.extern.log4j.Log4j2;
88
import org.springframework.beans.factory.annotation.Autowired;
9+
import org.springframework.beans.factory.annotation.Value;
910
import org.springframework.data.domain.Pageable;
1011
import org.springframework.http.ResponseEntity;
1112
import org.springframework.security.access.prepost.PreAuthorize;
@@ -22,12 +23,14 @@
2223
import uk.gov.hmcts.reform.preapi.controllers.params.SearchRecordings;
2324
import uk.gov.hmcts.reform.preapi.dto.CaptureSessionDTO;
2425
import uk.gov.hmcts.reform.preapi.dto.CreateRecordingDTO;
26+
import uk.gov.hmcts.reform.preapi.dto.EncodeJobDTO;
2527
import uk.gov.hmcts.reform.preapi.dto.media.AssetDTO;
2628
import uk.gov.hmcts.reform.preapi.dto.media.GenerateAssetDTO;
2729
import uk.gov.hmcts.reform.preapi.dto.media.GenerateAssetResponseDTO;
2830
import uk.gov.hmcts.reform.preapi.dto.media.LiveEventDTO;
2931
import uk.gov.hmcts.reform.preapi.dto.media.PlaybackDTO;
3032
import uk.gov.hmcts.reform.preapi.enums.CaseState;
33+
import uk.gov.hmcts.reform.preapi.enums.EncodeTransform;
3134
import uk.gov.hmcts.reform.preapi.enums.RecordingStatus;
3235
import uk.gov.hmcts.reform.preapi.exception.AssetFilesNotFoundException;
3336
import uk.gov.hmcts.reform.preapi.exception.ConflictException;
@@ -40,6 +43,7 @@
4043
import uk.gov.hmcts.reform.preapi.media.storage.AzureIngestStorageService;
4144
import uk.gov.hmcts.reform.preapi.security.authentication.UserAuthentication;
4245
import uk.gov.hmcts.reform.preapi.services.CaptureSessionService;
46+
import uk.gov.hmcts.reform.preapi.services.EncodeJobService;
4347
import uk.gov.hmcts.reform.preapi.services.RecordingService;
4448

4549
import java.util.List;
@@ -56,19 +60,27 @@ public class MediaServiceController extends PreApiController {
5660
private final AzureFinalStorageService azureFinalStorageService;
5761
private final AzureIngestStorageService azureIngestStorageService;
5862
private final RecordingService recordingService;
63+
private final EncodeJobService encodeJobService;
64+
65+
private final boolean enableEnhancedProcessing;
5966

6067
@Autowired
6168
public MediaServiceController(MediaServiceBroker mediaServiceBroker,
6269
CaptureSessionService captureSessionService,
6370
RecordingService recordingService,
6471
AzureFinalStorageService azureFinalStorageService,
65-
AzureIngestStorageService azureIngestStorageService) {
72+
AzureIngestStorageService azureIngestStorageService,
73+
EncodeJobService encodeJobService,
74+
@Value("${feature-flags.enable-enhanced-processing:}")
75+
Boolean enableEnhancedProcessing) {
6676
super();
6777
this.mediaServiceBroker = mediaServiceBroker;
6878
this.captureSessionService = captureSessionService;
6979
this.recordingService = recordingService;
7080
this.azureFinalStorageService = azureFinalStorageService;
7181
this.azureIngestStorageService = azureIngestStorageService;
82+
this.encodeJobService = encodeJobService;
83+
this.enableEnhancedProcessing = enableEnhancedProcessing;
7284
}
7385

7486
@GetMapping("/health")
@@ -188,19 +200,48 @@ public ResponseEntity<CaptureSessionDTO> stopLiveEvent(
188200
}
189201

190202
var recordingId = UUID.randomUUID();
191-
dto = captureSessionService.stopCaptureSession(captureSessionId, RecordingStatus.PROCESSING, recordingId);
203+
if (!enableEnhancedProcessing) {
204+
// todo code to removed once feature fully enabled (deprecated)
205+
dto = captureSessionService.stopCaptureSession(captureSessionId, RecordingStatus.PROCESSING, recordingId);
206+
}
192207

193208
var mediaService = mediaServiceBroker.getEnabledMediaService();
194209
try {
195-
var status = mediaService.stopLiveEvent(dto, recordingId);
196-
if (status == RecordingStatus.FAILURE) {
197-
throw new UnknownServerException("Encountered an error during encoding process for CaptureSession("
198-
+ captureSessionId
199-
+ ")");
210+
if (!enableEnhancedProcessing) {
211+
// todo code to removed once feature fully enabled (deprecated)
212+
var status = mediaService.stopLiveEventAndProcess(dto, recordingId);
213+
if (status == RecordingStatus.FAILURE) {
214+
throw new UnknownServerException("Encountered an error during encoding process for CaptureSession("
215+
+ captureSessionId
216+
+ ")");
217+
}
218+
dto = captureSessionService.stopCaptureSession(captureSessionId, status, recordingId);
219+
} else {
220+
mediaService.stopLiveEvent(dto, recordingId);
221+
var jobName = mediaService.triggerProcessingStep1(
222+
dto,
223+
dto.getId().toString().replace("-", ""),
224+
recordingId
225+
);
226+
if (jobName == null) {
227+
dto =
228+
captureSessionService.stopCaptureSession(captureSessionId, RecordingStatus.NO_RECORDING, null);
229+
} else {
230+
var encodeJob = new EncodeJobDTO();
231+
encodeJob.setCaptureSessionId(captureSessionId);
232+
encodeJob.setJobName(jobName);
233+
encodeJob.setRecordingId(recordingId);
234+
encodeJob.setTransform(EncodeTransform.ENCODE_FROM_INGEST);
235+
encodeJobService.upsert(encodeJob);
236+
dto = captureSessionService.stopCaptureSession(
237+
captureSessionId,
238+
RecordingStatus.PROCESSING,
239+
recordingId
240+
);
241+
}
200242
}
201-
dto = captureSessionService.stopCaptureSession(captureSessionId, status, recordingId);
202243
} catch (Exception e) {
203-
captureSessionService.stopCaptureSession(captureSessionId, RecordingStatus.FAILURE, recordingId);
244+
captureSessionService.stopCaptureSession(captureSessionId, RecordingStatus.FAILURE, null);
204245
throw e;
205246
}
206247

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package uk.gov.hmcts.reform.preapi.dto;
2+
3+
import lombok.Data;
4+
import lombok.NoArgsConstructor;
5+
import uk.gov.hmcts.reform.preapi.entities.EncodeJob;
6+
import uk.gov.hmcts.reform.preapi.enums.EncodeTransform;
7+
8+
import java.sql.Timestamp;
9+
import java.util.UUID;
10+
11+
@Data
12+
@NoArgsConstructor
13+
public class EncodeJobDTO {
14+
private UUID id;
15+
private UUID captureSessionId;
16+
private UUID recordingId;
17+
private String jobName;
18+
private EncodeTransform transform;
19+
private Timestamp createdAt;
20+
private Timestamp modifiedAt;
21+
22+
public EncodeJobDTO(EncodeJob encodeJob) {
23+
this.id = encodeJob.getId();
24+
this.captureSessionId = encodeJob.getCaptureSession().getId();
25+
this.recordingId = encodeJob.getRecordingId();
26+
this.jobName = encodeJob.getJobName();
27+
this.transform = encodeJob.getTransform();
28+
this.createdAt = encodeJob.getCreatedAt();
29+
this.modifiedAt = encodeJob.getModifiedAt();
30+
}
31+
}

src/main/java/uk/gov/hmcts/reform/preapi/entities/CaptureSession.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package uk.gov.hmcts.reform.preapi.entities;
22

3-
43
import jakarta.persistence.Column;
54
import jakarta.persistence.Entity;
65
import jakarta.persistence.EnumType;
@@ -78,6 +77,9 @@ public class CaptureSession extends BaseEntity implements ISoftDeletable {
7877
@Fetch(FetchMode.SUBSELECT)
7978
private Set<Recording> recordings;
8079

80+
@OneToMany(mappedBy = "captureSession")
81+
private Set<EncodeJob> encodeJobs;
82+
8183
public boolean isDeleted() {
8284
return deletedAt != null;
8385
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package uk.gov.hmcts.reform.preapi.entities;
2+
3+
import jakarta.persistence.Column;
4+
import jakarta.persistence.Entity;
5+
import jakarta.persistence.EnumType;
6+
import jakarta.persistence.Enumerated;
7+
import jakarta.persistence.FetchType;
8+
import jakarta.persistence.JoinColumn;
9+
import jakarta.persistence.ManyToOne;
10+
import jakarta.persistence.Table;
11+
import lombok.Getter;
12+
import lombok.Setter;
13+
import org.hibernate.annotations.JdbcTypeCode;
14+
import org.hibernate.type.SqlTypes;
15+
import uk.gov.hmcts.reform.preapi.entities.base.CreatedModifiedAtEntity;
16+
import uk.gov.hmcts.reform.preapi.enums.EncodeTransform;
17+
18+
import java.util.HashMap;
19+
import java.util.UUID;
20+
21+
@Getter
22+
@Setter
23+
@Entity
24+
@Table(name = "encode_jobs")
25+
public class EncodeJob extends CreatedModifiedAtEntity {
26+
@ManyToOne(fetch = FetchType.EAGER)
27+
@JoinColumn(name = "capture_session_id", referencedColumnName = "id")
28+
private CaptureSession captureSession;
29+
30+
@Column(name = "recording_id", nullable = false)
31+
private UUID recordingId;
32+
33+
@Column(name = "job_name", nullable = false)
34+
private String jobName;
35+
36+
@Enumerated(EnumType.STRING)
37+
@Column(name = "transform", nullable = false, columnDefinition = "encode_transform")
38+
@JdbcTypeCode(SqlTypes.NAMED_ENUM)
39+
private EncodeTransform transform;
40+
41+
@Override
42+
public HashMap<String, Object> getDetailsForAudit() {
43+
var details = new HashMap<String, Object>();
44+
details.put("captureSessionId", captureSession.getId());
45+
details.put("recordingId", recordingId);
46+
details.put("jobName", jobName);
47+
details.put("transform", transform);
48+
return details;
49+
}
50+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package uk.gov.hmcts.reform.preapi.enums;
2+
3+
public enum EncodeTransform {
4+
ENCODE_FROM_INGEST,
5+
ENCODE_FROM_MP4,
6+
}

0 commit comments

Comments
 (0)