Skip to content

Commit 3c4d559

Browse files
committed
common: fix sequentialTimerX log line to warn if configured time took longer than configured
1 parent 2bc01da commit 3c4d559

File tree

1 file changed

+28
-31
lines changed

1 file changed

+28
-31
lines changed

packages/indexer-common/src/sequential-timer.ts

Lines changed: 28 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,27 @@ export interface TimerTaskContext {
1717
milliseconds: number
1818
}
1919

20+
function logWorkTime(
21+
workStarted: number,
22+
logger: Logger,
23+
loopTime: number,
24+
caller: string | undefined,
25+
milliseconds: number,
26+
) {
27+
const workTimeWarningThreshold = 1000
28+
const workTime = Date.now() - workStarted
29+
logger.debug(`timer loop took ${loopTime}ms workTime ${workTime} caller(${caller})`)
30+
if (loopTime > milliseconds + workTimeWarningThreshold) {
31+
logger.warn(
32+
'timer work took longer than the sequential timer was configured for (+1s)',
33+
{
34+
loopTime,
35+
milliseconds,
36+
},
37+
)
38+
}
39+
}
40+
2041
/**
2142
* Create an eventual that performs the work in the Reducer<number, U> function every `milliseconds` milliseconds.
2243
* The main difference between this and `timer(...).reduce(...)` is that this function will wait for the previous work to complete before starting the next one.
@@ -52,36 +73,25 @@ export function sequentialTimerReduce<T, U>(
5273
function work() {
5374
const workStarted = Date.now()
5475
const promiseOrT = reducer(acc, workStarted)
55-
const workEnded = Date.now()
5676
const loopTime = workStarted - lastWorkStarted
57-
const workTime = workEnded - workStarted
58-
logger.debug(
59-
`sequentialTimerReduce loop took ${loopTime}ms, work took ${workTime}ms caller(${caller})`,
60-
)
6177

62-
if (workTime > milliseconds) {
63-
logger.warn(
64-
'sequentialTimerReduce work took longer than the sequential timer was configured for',
65-
{
66-
workTime,
67-
milliseconds,
68-
},
69-
)
70-
}
7178
lastWorkStarted = workStarted
7279
if (isPromiseLike(promiseOrT)) {
7380
promiseOrT.then(
7481
function onfulfilled(value) {
7582
outputReduce(value)
83+
logWorkTime(workStarted, logger, loopTime, caller, milliseconds)
7684
setTimeout(work, Math.max(0, milliseconds - (Date.now() - workStarted)))
7785
},
7886
function onrejected(err) {
7987
console.error(err)
88+
logWorkTime(workStarted, logger, loopTime, caller, milliseconds)
8089
setTimeout(work, Math.max(0, milliseconds - (Date.now() - workStarted)))
8190
},
8291
)
8392
} else {
8493
outputReduce(promiseOrT)
94+
logWorkTime(workStarted, logger, loopTime, caller, milliseconds)
8595
setTimeout(work, Math.max(0, milliseconds - (Date.now() - workStarted)))
8696
}
8797
}
@@ -123,40 +133,27 @@ export function sequentialTimerMap<U>(
123133

124134
function work() {
125135
const workStarted = Date.now()
126-
const promiseOrU = mapper(Date.now())
127-
const workEnded = Date.now()
136+
const promiseOrU = mapper(workStarted)
128137
const loopTime = workStarted - lastWorkStarted
129-
const workTime = workEnded - workStarted
130-
logger.debug(
131-
`sequentialTimerMap loop took ${loopTime}ms, work took ${workTime}ms caller(${caller})`,
132-
)
133-
134-
if (workTime > milliseconds) {
135-
logger.warn(
136-
'sequentialTimerMap work took longer than the sequential timer was configured for',
137-
{
138-
workTime,
139-
milliseconds,
140-
},
141-
)
142-
}
143-
144138
lastWorkStarted = workStarted
145139

146140
if (isPromiseLike(promiseOrU)) {
147141
promiseOrU.then(
148142
function onfulfilled(value) {
149143
checkMappedValue(value)
144+
logWorkTime(workStarted, logger, loopTime, caller, milliseconds)
150145
setTimeout(work, Math.max(0, milliseconds - (Date.now() - workStarted)))
151146
},
152147
function onrejected(err) {
153148
options?.onError(err)
149+
logWorkTime(workStarted, logger, loopTime, caller, milliseconds)
154150
setTimeout(work, Math.max(0, milliseconds - (Date.now() - workStarted)))
155151
},
156152
)
157153
} else {
158154
// resolved value
159155
checkMappedValue(promiseOrU)
156+
logWorkTime(workStarted, logger, loopTime, caller, milliseconds)
160157
setTimeout(work, Math.max(0, milliseconds - (Date.now() - workStarted)))
161158
}
162159
}

0 commit comments

Comments
 (0)