Skip to content

Commit aa2a5e0

Browse files
authored
Merge pull request #1401 from bbc/upstream/improve-ab-logging
feat: improve ab notifications and logging
2 parents 47f977d + e054aaa commit aa2a5e0

File tree

8 files changed

+477
-70
lines changed

8 files changed

+477
-70
lines changed

packages/corelib/src/dataModel/RundownPlaylist.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export interface ABSessionInfo {
3131

3232
export interface ABSessionAssignment {
3333
sessionId: string
34+
sessionName: string
3435
playerId: number | string
3536
lookahead: boolean // purely informational for debugging
3637
}

packages/job-worker/src/playout/abPlayback/__tests__/abPlayback.spec.ts

Lines changed: 235 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ function createBasicResolvedPieceInstance(
3333
const piece = literal<PieceInstancePiece>({
3434
_id: protectString(id),
3535
externalId: id,
36-
name: id,
36+
name: `name-${id}`,
3737
enable: {
3838
start,
3939
},
@@ -142,13 +142,37 @@ describe('resolveMediaPlayers', () => {
142142
[1, 2],
143143
4500
144144
)
145-
expect(assignments.failedRequired).toEqual(['inst_2_clip_ghi'])
145+
expect(assignments.failedRequired).toEqual([{ id: 'inst_2_clip_ghi', name: 'ghi', pieceNames: ['name-2'] }])
146146
expect(assignments.failedOptional).toHaveLength(0)
147147
expect(assignments.requests).toHaveLength(3)
148148
expect(assignments.requests).toEqual([
149-
{ end: 5400, id: 'inst_0_clip_abc', playerId: 1, start: 400, optional: false },
150-
{ end: 5400, id: 'inst_1_clip_def', playerId: 2, start: 400, optional: false },
151-
{ end: 4800, id: 'inst_2_clip_ghi', playerId: undefined, start: 800, optional: false }, // Massive overlap
149+
{
150+
end: 5400,
151+
id: 'inst_0_clip_abc',
152+
name: 'abc',
153+
playerId: 1,
154+
start: 400,
155+
optional: false,
156+
pieceNames: ['name-0'],
157+
},
158+
{
159+
end: 5400,
160+
id: 'inst_1_clip_def',
161+
name: 'def',
162+
playerId: 2,
163+
start: 400,
164+
optional: false,
165+
pieceNames: ['name-1'],
166+
},
167+
{
168+
end: 4800,
169+
id: 'inst_2_clip_ghi',
170+
name: 'ghi',
171+
playerId: undefined,
172+
start: 800,
173+
optional: false,
174+
pieceNames: ['name-2'],
175+
}, // Massive overlap
152176
])
153177

154178
expect(mockGetPieceSessionId).toHaveBeenCalledTimes(3)
@@ -189,13 +213,37 @@ describe('resolveMediaPlayers', () => {
189213
['player1', 'player2'],
190214
4500
191215
)
192-
expect(assignments.failedRequired).toEqual(['inst_2_clip_ghi'])
216+
expect(assignments.failedRequired).toEqual([{ id: 'inst_2_clip_ghi', name: 'ghi', pieceNames: ['name-2'] }])
193217
expect(assignments.failedOptional).toHaveLength(0)
194218
expect(assignments.requests).toHaveLength(3)
195219
expect(assignments.requests).toEqual([
196-
{ end: 5400, id: 'inst_0_clip_abc', playerId: 'player1', start: 400, optional: false },
197-
{ end: 5400, id: 'inst_1_clip_def', playerId: 'player2', start: 400, optional: false },
198-
{ end: 4800, id: 'inst_2_clip_ghi', playerId: undefined, start: 800, optional: false }, // Massive overlap
220+
{
221+
end: 5400,
222+
id: 'inst_0_clip_abc',
223+
name: 'abc',
224+
playerId: 'player1',
225+
start: 400,
226+
optional: false,
227+
pieceNames: ['name-0'],
228+
},
229+
{
230+
end: 5400,
231+
id: 'inst_1_clip_def',
232+
name: 'def',
233+
playerId: 'player2',
234+
start: 400,
235+
optional: false,
236+
pieceNames: ['name-1'],
237+
},
238+
{
239+
end: 4800,
240+
id: 'inst_2_clip_ghi',
241+
name: 'ghi',
242+
playerId: undefined,
243+
start: 800,
244+
optional: false,
245+
pieceNames: ['name-2'],
246+
}, // Massive overlap
199247
])
200248

201249
expect(mockGetPieceSessionId).toHaveBeenCalledTimes(3)
@@ -236,13 +284,37 @@ describe('resolveMediaPlayers', () => {
236284
[1, 'player2'],
237285
4500
238286
)
239-
expect(assignments.failedRequired).toEqual(['inst_2_clip_ghi'])
287+
expect(assignments.failedRequired).toEqual([{ id: 'inst_2_clip_ghi', name: 'ghi', pieceNames: ['name-2'] }])
240288
expect(assignments.failedOptional).toHaveLength(0)
241289
expect(assignments.requests).toHaveLength(3)
242290
expect(assignments.requests).toEqual([
243-
{ end: 5400, id: 'inst_0_clip_abc', playerId: 1, start: 400, optional: false },
244-
{ end: 5400, id: 'inst_1_clip_def', playerId: 'player2', start: 400, optional: false },
245-
{ end: 4800, id: 'inst_2_clip_ghi', playerId: undefined, start: 800, optional: false }, // Massive overlap
291+
{
292+
end: 5400,
293+
id: 'inst_0_clip_abc',
294+
name: 'abc',
295+
playerId: 1,
296+
start: 400,
297+
optional: false,
298+
pieceNames: ['name-0'],
299+
},
300+
{
301+
end: 5400,
302+
id: 'inst_1_clip_def',
303+
name: 'def',
304+
playerId: 'player2',
305+
start: 400,
306+
optional: false,
307+
pieceNames: ['name-1'],
308+
},
309+
{
310+
end: 4800,
311+
id: 'inst_2_clip_ghi',
312+
name: 'ghi',
313+
playerId: undefined,
314+
start: 800,
315+
optional: false,
316+
pieceNames: ['name-2'],
317+
}, // Massive overlap
246318
])
247319

248320
expect(mockGetPieceSessionId).toHaveBeenCalledTimes(3)
@@ -286,7 +358,15 @@ describe('resolveMediaPlayers', () => {
286358
expect(assignments.failedOptional).toHaveLength(0)
287359
expect(assignments.requests).toHaveLength(1)
288360
expect(assignments.requests).toEqual([
289-
{ end: 7400, id: 'tmp_clip_abc', playerId: 1, start: 400, optional: false },
361+
{
362+
end: 7400,
363+
id: 'tmp_clip_abc',
364+
name: 'abc',
365+
playerId: 1,
366+
start: 400,
367+
optional: false,
368+
pieceNames: ['name-0', 'name-1', 'name-2', 'name-3'],
369+
},
290370
])
291371

292372
expect(mockGetPieceSessionId).toHaveBeenCalledTimes(4)
@@ -335,9 +415,33 @@ describe('resolveMediaPlayers', () => {
335415
expect(assignments.failedOptional).toHaveLength(0)
336416
expect(assignments.requests).toHaveLength(3)
337417
expect(assignments.requests).toEqual([
338-
{ end: 5400, id: 'inst_0_clip_abc', playerId: 1, start: 400, optional: false },
339-
{ end: 4800, id: 'inst_1_clip_def', playerId: 2, start: 800, optional: false },
340-
{ end: 7400, id: 'inst_3_clip_ghi', playerId: 2, start: 6400, optional: false },
418+
{
419+
end: 5400,
420+
id: 'inst_0_clip_abc',
421+
name: 'abc',
422+
playerId: 1,
423+
start: 400,
424+
optional: false,
425+
pieceNames: ['name-0'],
426+
},
427+
{
428+
end: 4800,
429+
id: 'inst_1_clip_def',
430+
name: 'def',
431+
playerId: 2,
432+
start: 800,
433+
optional: false,
434+
pieceNames: ['name-1'],
435+
},
436+
{
437+
end: 7400,
438+
id: 'inst_3_clip_ghi',
439+
name: 'ghi',
440+
playerId: 2,
441+
start: 6400,
442+
optional: false,
443+
pieceNames: ['name-3'],
444+
},
341445
])
342446

343447
expect(mockGetPieceSessionId).toHaveBeenCalledTimes(3)
@@ -382,9 +486,33 @@ describe('resolveMediaPlayers', () => {
382486
expect(assignments.failedOptional).toHaveLength(0)
383487
expect(assignments.requests).toHaveLength(3)
384488
expect(assignments.requests).toEqual([
385-
{ end: 5400, id: 'inst_0_clip_abc', playerId: 1, start: 400, optional: false },
386-
{ end: 6800, id: 'inst_1_clip_def', playerId: 2, start: 800, optional: false },
387-
{ end: 6400, id: 'inst_3_clip_ghi', playerId: 1, start: 5400, optional: false },
489+
{
490+
end: 5400,
491+
id: 'inst_0_clip_abc',
492+
name: 'abc',
493+
playerId: 1,
494+
start: 400,
495+
optional: false,
496+
pieceNames: ['name-0'],
497+
},
498+
{
499+
end: 6800,
500+
id: 'inst_1_clip_def',
501+
name: 'def',
502+
playerId: 2,
503+
start: 800,
504+
optional: false,
505+
pieceNames: ['name-1'],
506+
},
507+
{
508+
end: 6400,
509+
id: 'inst_3_clip_ghi',
510+
name: 'ghi',
511+
playerId: 1,
512+
start: 5400,
513+
optional: false,
514+
pieceNames: ['name-3'],
515+
},
388516
])
389517

390518
expect(mockGetPieceSessionId).toHaveBeenCalledTimes(3)
@@ -429,9 +557,33 @@ describe('resolveMediaPlayers', () => {
429557
expect(assignments.failedOptional).toHaveLength(0)
430558
expect(assignments.requests).toHaveLength(3)
431559
expect(assignments.requests).toEqual([
432-
{ end: 5400, id: 'inst_0_clip_abc', playerId: 1, start: 400, optional: false },
433-
{ end: 6800, id: 'inst_1_clip_def', playerId: 2, start: 800, optional: false },
434-
{ end: 6400, id: 'inst_3_clip_ghi', playerId: 1, start: 5400, optional: false },
560+
{
561+
end: 5400,
562+
id: 'inst_0_clip_abc',
563+
name: 'abc',
564+
playerId: 1,
565+
start: 400,
566+
optional: false,
567+
pieceNames: ['name-0'],
568+
},
569+
{
570+
end: 6800,
571+
id: 'inst_1_clip_def',
572+
name: 'def',
573+
playerId: 2,
574+
start: 800,
575+
optional: false,
576+
pieceNames: ['name-1'],
577+
},
578+
{
579+
end: 6400,
580+
id: 'inst_3_clip_ghi',
581+
name: 'ghi',
582+
playerId: 1,
583+
start: 5400,
584+
optional: false,
585+
pieceNames: ['name-3'],
586+
},
435587
])
436588

437589
expect(mockGetPieceSessionId).toHaveBeenCalledTimes(3)
@@ -454,11 +606,13 @@ describe('resolveMediaPlayers', () => {
454606
const previousAssignments: ABSessionAssignments = {
455607
inst_0_clip_abc: {
456608
sessionId: 'inst_0_clip_abc',
609+
sessionName: 'abc',
457610
playerId: 5,
458611
lookahead: false,
459612
},
460613
inst_1_clip_def: {
461614
sessionId: 'inst_1_clip_def',
615+
sessionName: 'def',
462616
playerId: 1,
463617
lookahead: true,
464618
},
@@ -483,13 +637,37 @@ describe('resolveMediaPlayers', () => {
483637
[1, 2],
484638
0
485639
)
486-
expect(assignments.failedRequired).toEqual(['inst_2_clip_ghi'])
640+
expect(assignments.failedRequired).toEqual([{ id: 'inst_2_clip_ghi', name: 'ghi', pieceNames: ['name-2'] }])
487641
expect(assignments.failedOptional).toHaveLength(0)
488642
expect(assignments.requests).toHaveLength(3)
489643
expect(assignments.requests).toEqual([
490-
{ end: 7400, id: 'inst_0_clip_abc', playerId: 2, start: 2400, optional: false },
491-
{ end: 7400, id: 'inst_1_clip_def', playerId: 1, start: 2400, optional: false },
492-
{ end: 6800, id: 'inst_2_clip_ghi', playerId: undefined, start: 2800, optional: false },
644+
{
645+
end: 7400,
646+
id: 'inst_0_clip_abc',
647+
name: 'abc',
648+
playerId: 2,
649+
start: 2400,
650+
optional: false,
651+
pieceNames: ['name-0'],
652+
},
653+
{
654+
end: 7400,
655+
id: 'inst_1_clip_def',
656+
name: 'def',
657+
playerId: 1,
658+
start: 2400,
659+
optional: false,
660+
pieceNames: ['name-1'],
661+
},
662+
{
663+
end: 6800,
664+
id: 'inst_2_clip_ghi',
665+
name: 'ghi',
666+
playerId: undefined,
667+
start: 2800,
668+
optional: false,
669+
pieceNames: ['name-2'],
670+
},
493671
])
494672

495673
expect(mockGetPieceSessionId).toHaveBeenCalledTimes(3)
@@ -512,11 +690,13 @@ describe('resolveMediaPlayers', () => {
512690
const previousAssignments: ABSessionAssignments = {
513691
inst_0_clip_abc: {
514692
sessionId: 'inst_0_clip_abc',
693+
sessionName: 'abc',
515694
playerId: 2,
516695
lookahead: false,
517696
},
518697
inst_1_clip_def: {
519698
sessionId: 'inst_1_clip_def',
699+
sessionName: 'def',
520700
playerId: 1,
521701
lookahead: false,
522702
},
@@ -542,12 +722,36 @@ describe('resolveMediaPlayers', () => {
542722
0
543723
)
544724
expect(assignments.failedRequired).toHaveLength(0)
545-
expect(assignments.failedOptional).toEqual(['inst_1_clip_def'])
725+
expect(assignments.failedOptional).toEqual([{ id: 'inst_1_clip_def', name: 'def', pieceNames: ['name-1'] }])
546726
expect(assignments.requests).toHaveLength(3)
547727
expect(assignments.requests).toEqual([
548-
{ end: 7400, id: 'inst_0_clip_abc', playerId: 2, start: 2400, optional: false },
549-
{ end: 7400, id: 'inst_1_clip_def', playerId: undefined, start: 2400, optional: true },
550-
{ end: 6800, id: 'inst_2_clip_ghi', playerId: 1, start: 2800, optional: false },
728+
{
729+
end: 7400,
730+
id: 'inst_0_clip_abc',
731+
name: 'abc',
732+
playerId: 2,
733+
start: 2400,
734+
optional: false,
735+
pieceNames: ['name-0'],
736+
},
737+
{
738+
end: 7400,
739+
id: 'inst_1_clip_def',
740+
name: 'def',
741+
playerId: undefined,
742+
start: 2400,
743+
optional: true,
744+
pieceNames: ['name-1'],
745+
},
746+
{
747+
end: 6800,
748+
id: 'inst_2_clip_ghi',
749+
name: 'ghi',
750+
playerId: 1,
751+
start: 2800,
752+
optional: false,
753+
pieceNames: ['name-2'],
754+
},
551755
])
552756

553757
expect(mockGetPieceSessionId).toHaveBeenCalledTimes(3)

0 commit comments

Comments
 (0)