Hi,
I would like to use dcc.Interval as watchdog to monitor incoming SSE (expected every 1s) and raise alert if no SSE has been received for 10s. To do so, I would need to reset counting every time SSE is received, but I seems not to be possible to reset Interval’s counter using exposed Interval’s properties.
However I see, resetTimer() function defined in dcc internals:
So, I thought about adding dcc.Store component used as trampoline to fire clientside callback and call resetTimer there:
WATCHDOG_TIMEOUT = 10 # [s]
def watchdog(name):
"""Watchdog"""
return html.Div(
[
dcc.Interval(
id={"role": "watchdog", "name": name},
interval=WATCHDOG_TIMEOUT * 1000, # in milliseconds
n_intervals=0,
),
dcc.Store(
id={"role": "watchdog_reset", "name": name},
data=0,
),
html.Div(
id={"role": "watchdog_dummy", "name": name},
children=[],
hidden=True,
),
],
id={"role": "doghouse", "name": name},
)
app.clientside_callback(
"""
function(n, id) {
var interval = document.getElementById(id);
interval.resetTimer();
return n;
}
""",
Output({"role": "watchdog_dummy", "name": MATCH}, "children"),
Input({"role": "watchdog_reset", "name": MATCH}, "data"),
Input({"role": "watchdog", "name": MATCH}, "id"),
)
But it seems that reset is not working.
Any ideas how to fix the concept above or anyhow reset dcc.Interval’s counter are appreciated. Thanks