Skip to content

Commit 131206b

Browse files
committed
feat: add ab session names to logging SOFIE-213
1 parent 811bd8e commit 131206b

File tree

5 files changed

+54
-25
lines changed

5 files changed

+54
-25
lines changed

packages/corelib/src/dataModel/RundownPlaylist.ts

+1
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/abPlaybackResolver.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import * as _ from 'underscore'
44

55
export interface SessionRequest {
66
readonly id: string
7+
readonly name: string
78
readonly start: number
89
readonly end: number | undefined
910
readonly optional?: boolean
@@ -14,6 +15,7 @@ export interface SessionRequest {
1415

1516
export interface FailedSession {
1617
id: string
18+
name: string
1719
pieceNames: string[]
1820
}
1921

@@ -318,9 +320,9 @@ export function resolveAbAssignmentsFromRequests(
318320
if (req.lookaheadRank !== undefined) {
319321
// ignore
320322
} else if (req.optional) {
321-
res.failedOptional.push({ id: req.id, pieceNames: req.pieceNames })
323+
res.failedOptional.push({ id: req.id, name: req.name, pieceNames: req.pieceNames })
322324
} else {
323-
res.failedRequired.push({ id: req.id, pieceNames: req.pieceNames })
325+
res.failedRequired.push({ id: req.id, name: req.name, pieceNames: req.pieceNames })
324326
}
325327
}
326328
}

packages/job-worker/src/playout/abPlayback/abPlaybackSessions.ts

+15-5
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ export function calculateSessionTimeRanges(
4444
// This session is already known, so extend the session to cover all the pieces
4545
sessionRequests[sessionId] = {
4646
id: sessionId,
47+
name: session.sessionName,
4748
start: Math.min(val.start, start),
4849
end: val.end === undefined || end === undefined ? undefined : Math.max(val.end, end),
4950
optional: val.optional && (session.optional ?? false),
@@ -55,6 +56,7 @@ export function calculateSessionTimeRanges(
5556
// New session
5657
sessionRequests[sessionId] = {
5758
id: sessionId,
59+
name: session.sessionName,
5860
start,
5961
end,
6062
optional: session.optional ?? false,
@@ -69,7 +71,10 @@ export function calculateSessionTimeRanges(
6971
const result = _.compact(Object.values<SessionRequest | undefined>(sessionRequests))
7072

7173
// Include lookaheads, as they dont have pieces
72-
const groupedLookaheadMap = new Map<string, Array<OnGenerateTimelineObj<TSR.TSRTimelineContent>>>()
74+
const groupedLookaheadMap = new Map<
75+
string,
76+
{ name: string; objs: Array<OnGenerateTimelineObj<TSR.TSRTimelineContent>> }
77+
>()
7378
for (const obj of timelineObjects) {
7479
if (
7580
!!obj.isLookahead &&
@@ -82,16 +87,20 @@ export function calculateSessionTimeRanges(
8287
for (const session of obj.abSessions) {
8388
if (session.poolName === poolName) {
8489
const sessionId = abSessionHelper.getTimelineObjectAbSessionId(obj, session)
85-
if (sessionId) {
86-
const existing = groupedLookaheadMap.get(sessionId)
87-
groupedLookaheadMap.set(sessionId, existing ? [...existing, obj] : [obj])
90+
if (!sessionId) continue
91+
92+
const existing = groupedLookaheadMap.get(sessionId)
93+
if (existing) {
94+
existing.objs.push(obj)
95+
} else {
96+
groupedLookaheadMap.set(sessionId, { name: session.sessionName, objs: [obj] })
8897
}
8998
}
9099
}
91100
}
92101
}
93102

94-
const groupedLookahead = Array.from(groupedLookaheadMap.entries()).map(([id, objs]) => ({ objs, id }))
103+
const groupedLookahead = Array.from(groupedLookaheadMap.entries()).map(([id, info]) => ({ id, ...info }))
95104
const sortedLookaheadGroups = _.sortBy(groupedLookahead, (grp) => {
96105
// Find the highest priority of the objects
97106
const r = _.max(_.pluck(grp.objs, 'priority')) || -900
@@ -102,6 +111,7 @@ export function calculateSessionTimeRanges(
102111
if (!sessionRequests[grp.id]) {
103112
result.push({
104113
id: grp.id,
114+
name: grp.name,
105115
start: Number.MAX_SAFE_INTEGER, // Distant future
106116
end: undefined,
107117
lookaheadRank: i + 1, // This is so that we can easily work out which to use first

packages/job-worker/src/playout/abPlayback/applyAssignments.ts

+28-14
Original file line numberDiff line numberDiff line change
@@ -35,24 +35,28 @@ export function applyAbPlayerObjectAssignments(
3535
poolName: string
3636
): ABSessionAssignments {
3737
const newAssignments: ABSessionAssignments = {}
38-
const persistAssignment = (sessionId: string, playerId: AbPlayerId, lookahead: boolean): void => {
38+
const persistAssignment = (session: ABSessionAssignment): void => {
3939
// Track the assignment, so that the next onTimelineGenerate can try to reuse the same session
40-
if (newAssignments[sessionId]) {
40+
if (newAssignments[session.sessionId]) {
4141
// TODO - warn?
4242
}
43-
newAssignments[sessionId] = { sessionId, playerId, lookahead }
43+
newAssignments[session.sessionId] = session
4444
}
4545

4646
// collect objects by their sessionId
47-
const groupedObjectsMap = new Map<string, Array<OnGenerateTimelineObjExt>>()
47+
const groupedObjectsMap = new Map<string, { name: string; objs: Array<OnGenerateTimelineObjExt> }>()
4848
for (const obj of timelineObjs) {
4949
if (obj.abSessions && obj.pieceInstanceId) {
5050
for (const session of obj.abSessions) {
5151
if (session.poolName === poolName) {
5252
const sessionId = abSessionHelper.getTimelineObjectAbSessionId(obj, session)
53-
if (sessionId) {
54-
const existing = groupedObjectsMap.get(sessionId)
55-
groupedObjectsMap.set(sessionId, existing ? [...existing, obj] : [obj])
53+
if (!sessionId) continue
54+
55+
const existing = groupedObjectsMap.get(sessionId)
56+
if (existing) {
57+
existing.objs.push(obj)
58+
} else {
59+
groupedObjectsMap.set(sessionId, { name: session.sessionName, objs: [obj] })
5660
}
5761
}
5862
}
@@ -63,7 +67,7 @@ export function applyAbPlayerObjectAssignments(
6367
const unexpectedSessions: string[] = []
6468

6569
// Apply the known assignments
66-
for (const [sessionId, objs] of groupedObjectsMap.entries()) {
70+
for (const [sessionId, info] of groupedObjectsMap.entries()) {
6771
if (sessionId === 'undefined') continue
6872

6973
const matchingAssignment = resolvedAssignments.find((req) => req.id === sessionId)
@@ -76,24 +80,34 @@ export function applyAbPlayerObjectAssignments(
7680
abConfiguration,
7781
poolName,
7882
matchingAssignment.playerId,
79-
objs
83+
info.objs
8084
)
8185
)
82-
persistAssignment(sessionId, matchingAssignment.playerId, !!matchingAssignment.lookaheadRank)
86+
persistAssignment({
87+
sessionId,
88+
sessionName: matchingAssignment.name,
89+
playerId: matchingAssignment.playerId,
90+
lookahead: !!matchingAssignment.lookaheadRank,
91+
})
8392
} else {
8493
// A warning will already have been raised about this having no player
8594
}
8695
} else {
8796
// This is a group that shouldn't exist, so are likely a bug. There isnt a lot we can do beyond warn about the issue
88-
unexpectedSessions.push(`${sessionId}(${objs.map((obj) => obj.id).join(',')})`)
97+
unexpectedSessions.push(`${sessionId}(${info.objs.map((obj) => obj.id).join(',')})`)
8998

9099
// If there was a previous assignment, hopefully that is better than nothing
91100
const prev = previousAssignmentMap?.[sessionId]
92101
if (prev) {
93102
failedObjects.push(
94-
...updateObjectsToAbPlayer(blueprintContext, abConfiguration, poolName, prev.playerId, objs)
103+
...updateObjectsToAbPlayer(blueprintContext, abConfiguration, poolName, prev.playerId, info.objs)
95104
)
96-
persistAssignment(sessionId, prev.playerId, false)
105+
persistAssignment({
106+
sessionId,
107+
sessionName: '?',
108+
playerId: prev.playerId,
109+
lookahead: false,
110+
})
97111
}
98112
}
99113
}
@@ -110,7 +124,7 @@ export function applyAbPlayerObjectAssignments(
110124
for (const assignment of Object.values<ABSessionAssignment | undefined>(newAssignments)) {
111125
if (!assignment) continue
112126
logger.silly(
113-
`ABPlayback: Assigned session "${poolName}"-"${assignment.sessionId}" to player "${assignment.playerId}" (lookahead: ${assignment.lookahead})`
127+
`ABPlayback: Assigned session "${poolName}"-"${assignment.sessionId}" (${assignment.sessionName}) to player "${assignment.playerId}" (lookahead: ${assignment.lookahead})`
114128
)
115129
}
116130

packages/job-worker/src/playout/abPlayback/index.ts

+6-4
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ export function applyAbPlaybackForTimeline(
6969
for (const assignment of Object.values<ABSessionAssignment | undefined>(assignments)) {
7070
if (assignment) {
7171
logger.silly(
72-
`ABPlayback: Previous assignment "${pool}"-"${assignment.sessionId}" to player "${assignment.playerId}"`
72+
`ABPlayback: Previous assignment "${pool}"-"${assignment.sessionId}" (${assignment.sessionName}) to player "${assignment.playerId}"`
7373
)
7474
}
7575
}
@@ -110,14 +110,16 @@ export function applyAbPlaybackForTimeline(
110110

111111
for (const assignment of Object.values<SessionRequest>(assignments.requests)) {
112112
logger.silly(
113-
`ABPlayback resolved session "${poolName}"-"${assignment.id}" to player "${
113+
`ABPlayback resolved session "${poolName}"-"${assignment.id}" (${assignment.name}) to player "${
114114
assignment.playerId
115115
}" (${JSON.stringify(assignment)})`
116116
)
117117
}
118118
for (const failedSession of assignments.failedRequired) {
119119
const uniqueNames = _.uniq(failedSession.pieceNames).join(', ')
120-
logger.warn(`ABPlayback failed to assign session for "${poolName}"-"${failedSession.id}": ${uniqueNames}`)
120+
logger.warn(
121+
`ABPlayback failed to assign session for "${poolName}"-"${failedSession.id}" (${failedSession.name}): ${uniqueNames}`
122+
)
121123

122124
// Ignore lookahead
123125
if (failedSession.pieceNames.length === 0) continue
@@ -134,7 +136,7 @@ export function applyAbPlaybackForTimeline(
134136
for (const failedSession of assignments.failedOptional) {
135137
const uniqueNames = _.uniq(failedSession.pieceNames).join(', ')
136138
logger.info(
137-
`ABPlayback failed to assign optional session for "${poolName}"-"${failedSession.id}": ${uniqueNames}`
139+
`ABPlayback failed to assign optional session for "${poolName}"-"${failedSession.id}" (${failedSession.name}): ${uniqueNames}`
138140
)
139141

140142
// Ignore lookahead

0 commit comments

Comments
 (0)