Skip to content

Commit d3e0877

Browse files
committed
fix(session): separate ping and check for idle/dead sessions
Signed-off-by: Cedric Hombourger <[email protected]>
1 parent 38abdf0 commit d3e0877

File tree

2 files changed

+38
-14
lines changed

2 files changed

+38
-14
lines changed

mtda/main.py

+16-9
Original file line numberDiff line numberDiff line change
@@ -1662,7 +1662,7 @@ def start(self):
16621662

16631663
if self.is_server is True:
16641664
from mtda.utils import RepeatTimer
1665-
handler = self.session_ping
1665+
handler = self.session_check
16661666
self._session_timer = RepeatTimer(10, handler)
16671667
self._session_timer.start()
16681668

@@ -1715,6 +1715,20 @@ def stop(self):
17151715
self.socket.close()
17161716
self.socket = None
17171717

1718+
def session_check(self):
1719+
self.mtda.debug(4, "main.session_check()")
1720+
1721+
self._session_manager.check()
1722+
1723+
now = time.monotonic()
1724+
if self._power_expiry is not None and now > self._power_expiry:
1725+
self._target_off()
1726+
self._power_expiry = None
1727+
self.mtda.debug(2, "device powered down after "
1728+
f"{self._power_timeout} seconds of inactivity")
1729+
1730+
self.mtda.debug(4, "main.session_check: exit")
1731+
17181732
def session_event(self, info):
17191733
self.mtda.debug(4, f"main.session_event({info})")
17201734

@@ -1752,14 +1766,7 @@ def session_ping(self, session=None):
17521766

17531767
result = None
17541768
if self._session_manager is not None:
1755-
result = self._session_manager.check(session)
1756-
1757-
now = time.monotonic()
1758-
if self._power_expiry is not None and now > self._power_expiry:
1759-
self._target_off()
1760-
self._power_expiry = None
1761-
self.mtda.debug(2, "device powered down after "
1762-
f"{self._power_timeout} seconds of inactivity")
1769+
result = self._session_manager.ping(session)
17631770

17641771
self.mtda.debug(4, f"main.session_ping: {result}")
17651772
return result

mtda/session.py

+22-5
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,9 @@ def check(self, session=None):
3636
result = None
3737

3838
with self._lock:
39-
# Register new session
40-
if session is not None:
41-
if session not in self._sessions:
42-
events.append(f"{CONSTS.SESSION.ACTIVE} {session}")
43-
self._sessions[session] = now + self._session_timeout
39+
if self._ping(session):
40+
# Announce new session
41+
events.append(f"{CONSTS.SESSION.ACTIVE} {session}")
4442

4543
# Check for inactive sessions
4644
inactive = []
@@ -150,6 +148,25 @@ def monitor(self, monitor):
150148
self.mtda.debug(4, f"session.monitor: {result}")
151149
return result
152150

151+
def _ping(self, session=None):
152+
self.mtda.debug(4, f"session._ping({session})")
153+
154+
now = time.monotonic()
155+
result = False
156+
157+
# Register new session
158+
if session is not None:
159+
if session not in self._sessions:
160+
result = True
161+
self._sessions[session] = now + self._session_timeout
162+
163+
self.mtda.debug(4, f"session._ping: {result}")
164+
return result
165+
166+
def ping(self, session=None):
167+
with self._lock:
168+
self._ping(session)
169+
153170
def set_timeout(self, timeout, session=None):
154171
self.mtda.debug(4, f"session.set_timeout({timeout}, {session})")
155172

0 commit comments

Comments
 (0)