Compare commits

...

1 Commits

Author SHA1 Message Date
Andrey
f9f97a91b6 add timeouts 2021-04-19 21:46:12 +03:00

View File

@@ -185,7 +185,10 @@ class MegaD:
continue continue
if x.port in ports: if x.port in ports:
continue continue
await self.get_port(x.port, force_http=True, http_cmd=x.http_cmd) try:
await self.get_port(x.port, force_http=True, http_cmd=x.http_cmd)
except asyncio.TimeoutError:
continue
ports.append(x.port) ports.append(x.port)
@property @property
@@ -232,12 +235,15 @@ class MegaD:
""" """
for x in self.ds2413_ports: for x in self.ds2413_ports:
self.lg.debug(f'poll ds2413 for %s', x) self.lg.debug(f'poll ds2413 for %s', x)
await self.get_port( try:
port=x, await self.get_port(
force_http=True, port=x,
http_cmd='list', force_http=True,
conv=False http_cmd='list',
) conv=False
)
except asyncio.TimeoutError:
continue
async def poll(self): async def poll(self):
""" """
@@ -252,6 +258,7 @@ class MegaD:
ret = await self._update_i2c(x) ret = await self._update_i2c(x)
if isinstance(ret, dict): if isinstance(ret, dict):
self.values.update(ret) self.values.update(ret)
for x in self.extenders: for x in self.extenders:
ret = await self._update_extender(x) ret = await self._update_extender(x)
if not isinstance(ret, dict): if not isinstance(ret, dict):
@@ -291,7 +298,7 @@ class MegaD:
async with self._http_lck(priority): async with self._http_lck(priority):
for _ntry in range(3): for _ntry in range(3):
try: try:
async with aiohttp.request("get", url=url) as req: async with aiohttp.request("get", url=url, timeout=aiohttp.ClientTimeout(total=5)) as req:
if req.status != 200: if req.status != 200:
self.lg.warning('%s returned %s (%s)', url, req.status, await req.text()) self.lg.warning('%s returned %s (%s)', url, req.status, await req.text())
return None return None
@@ -301,7 +308,8 @@ class MegaD:
return ret return ret
except asyncio.TimeoutError: except asyncio.TimeoutError:
self.lg.warning(f'timeout while requesting {url}') self.lg.warning(f'timeout while requesting {url}')
await asyncio.sleep(1) raise
# await asyncio.sleep(1)
raise asyncio.TimeoutError('after 3 tries') raise asyncio.TimeoutError('after 3 tries')
async def save(self): async def save(self):
@@ -355,7 +363,10 @@ class MegaD:
return {e.port for e in self.entities} return {e.port for e in self.entities}
async def get_all_ports(self, only_out=False, check_skip=False): async def get_all_ports(self, only_out=False, check_skip=False):
ret = await self.request(cmd='all') try:
ret = await self.request(cmd='all')
except asyncio.TimeoutError:
return
for port, x in enumerate(ret.split(';')): for port, x in enumerate(ret.split(';')):
if port in self.ds2413_ports: if port in self.ds2413_ports:
continue continue
@@ -451,7 +462,10 @@ class MegaD:
:param port: :param port:
:return: :return:
""" """
values = await self.request(pt=port, cmd='get') try:
values = await self.request(pt=port, cmd='get')
except asyncio.TimeoutError:
return
ret = {} ret = {}
for i, x in enumerate(values.split(';')): for i, x in enumerate(values.split(';')):
ret[f'{port}e{i}'] = x ret[f'{port}e{i}'] = x
@@ -467,9 +481,12 @@ class MegaD:
delay = None delay = None
if 'delay' in params: if 'delay' in params:
delay = params.pop('delay') delay = params.pop('delay')
ret = { try:
_params: await self.request(**params) ret = {
} _params: await self.request(**params)
}
except asyncio.TimeoutError:
return
self.lg.debug('i2c response: %s', ret) self.lg.debug('i2c response: %s', ret)
if delay: if delay:
self.lg.debug('delay %s', delay) self.lg.debug('delay %s', delay)