async def start_internal(self): try: async with self.connection as ws: async for msg in ws: if msg.type == aiohttp.WSMsgType.TEXT: try: data = msg.json(loads=lambda s: checker.parse_json( s, [ 'id', 'x', 'y', 'message', 'public', 'user' ], ['id'])) except Exception as ex: checker.mumble( error='can\'t parse service responce', exception=ex) await self.queue.put(data) elif msg.type == aiohttp.WSMsgType.CLOSED: self.closed = True break else: checker.mumble( error= 'get message with unexpected type {}\nmessage: {}'. format(msg.type, msg.data)) except Exception as ex: checker.down(error='something down', exception=ex)
def process(self): if len(self.specs) == 0: checker.down(message='No one signal package') data = numpy.concatenate(self.specs) mx = numpy.max(data) data = numpy.log(data / mx) >= -1.5 skiped, comp = compress(data) if len(comp) < 2: checker.corrupt(message='No signal') bounds = get_bounds(numpy.unique(comp)) if len(bounds) == 0: checker.mumble(message="Can't understand dot size") silence = comp[1::2] signal = comp[0::2] if skiped == 2: signal, silence = silence, signal signal = list(numpy.where(signal <= bounds[0], '.', '-')) silence = apply_silence_bounds(silence, bounds) if skiped == 2: signal, silence = silence, signal morse = merge(signal, silence) text = convert_to_text(morse) if not text: checker.corrupt(message='No one symbol in signal') return text
async def check_status(response, log_info): if response.status >= 500: checker.down(error='{}\n\tstatus code is {}. Content: {}\n'.format( log_info, response.status, await response.text())) if response.status != 200: checker.mumble(error='{}\n\tstatus code is {}. Content: {}\n'.format( log_info, response.status, await response.text()))
def send(self, method, message): try: if type(method) is str: method = get_method(method) self.socket.sendall(method + message) except Exception as ex: checker.down(error="can't send data. {}".format(message), exception=ex)
async def get(self, url): url = self.get_url(url) try: async with self.session.get(url) as response: await check_status(response) return await response.text() except Exception as ex: checker.down(error=url, exception=ex)
def __init__(self, hostname, port=None): self.hostname = hostname self.port = 12345 if port is None else port self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: self.socket.connect((self.hostname, self.port)) except Exception as ex: checker.down(error="can't connect to {}".format(hostname), exception=ex)
def get_listener(self): url = self.get_url('publics', proto='ws') try: connection = self.session.ws_connect(url, origin=self.get_url('')) except Exception as ex: checker.down(exception=ex) helper = WSHelper(connection) helper.start() return helper
def recv(self, length): buf = bytearray() try: while len(buf) < length: buf += self.socket.recv(length - len(buf)) return buf except Exception as ex: checker.down( error="can't recive full data. recived: {}".format(buf), exception=ex)
async def get_connection(self, url): url = self.get_url(url, proto='ws') log_info = get_log_info(self.name, url) try: connection = await self.session.ws_connect(url, origin=self.get_url('')) checker.log(log_info + ' connected') except Exception as ex: checker.down(error=log_info, exception=ex) return log_info, connection
async def post(self, url, data={}, need_check_status=True): url = self.get_url(url) try: async with self.session.post(url, data=data) as response: if need_check_status: await check_status(response) return await response.text() else: return response.status, await response.text() except Exception as ex: checker.down(error='{}\n{}'.format(url, data), exception=ex)
async def get(self, url): url = self.get_url(url) log_info = get_log_info(self.name, url) try: async with self.session.get(url) as response: await check_status(response, log_info) text = await response.text() checker.log(log_info + ' responsed') return text except Exception as ex: checker.down(error=log_info, exception=ex)
def get_listener(self, url): url = self.get_url(url, proto='ws') log_info = get_log_info(self.name, url) try: checker.log(log_info + ' cookies:' + get_cookie_string(self.session.cookie_jar)) connection = self.session.ws_connect(url, origin=self.get_url('')) checker.log(log_info + ' connected') except Exception as ex: checker.down(error=log_info, exception=ex) helper = WSHelper(connection) helper.start() return helper
async def post(self, url, data={}, need_check_status=True): url = self.get_url(url) log_info = get_log_info(self.name, url) try: checker.log(log_info + ' ' + json.dumps(data)) async with self.session.post(url, json=data) as response: if need_check_status: await check_status(response, log_info) text = await response.text() checker.log(log_info + ' responsed') return text else: return response.status, await response.text() except Exception as ex: checker.down(error='{}\n{}'.format(log_info, data), exception=ex)
async def start_internal(self): try: async for msg in self.connection: if msg.type == self.type: checker.log(self.log_info + 'get data, length: {}'.format(len(msg.data))) try: await self.process(msg) except Exception as ex: checker.mumble(error='can\'t process service responce', exception=ex) elif msg.type == aiohttp.WSMsgType.CLOSED: self.closed = True break else: checker.mumble( error='get message with unexpected type {}\nmessage: {}' .format(msg.type, msg.data)) except Exception as ex: checker.down(error='something down', exception=ex)