def _on_read(self, data): #logging.info("read %d bytes" % len(data)) if len(data) == 38: timestamp, toklen, token = struct.unpack_from('!IH32s', data, 0) logging.info("flagging user %s at %d" % (token.encode('hex'), timestamp)) mc.set(token.encode('hex'), timestamp)
def _finish_send(self, response, data, started): elapsed = time.time() - started self.concurrent -= 1 if response.error or response.code != 200: self.error_level = min(settings.get('max_backoff') or 15, (self.error_level + 1 + self.error_level/2)) if response.code == 401: self.stats['client_login_failed'] += 1 self.clear_token() elif response.code == 503: self.stats['unavailable'] += 1 self.write_queue.appendleft(data) logging.exception("send failed", response.error) else: body = response.buffer.getvalue() retvals = {} items = response.body.split('\n') for item in items: pair = item.split('=') if len(pair) == 2: retvals[pair[0].strip()] = pair[1].strip() if 'id' in retvals: self.stats['notifications_ok'] += 1 logging.info("sent(%s): %s %f", retvals.get('id'), data.get('payload'), elapsed) elif 'Error' in retvals: err = retvals.get('Error') logging.warning("%s: %s", err, data.get('payload')) if err == 'InvalidRegistration' or err == 'NotRegistered': mc.set(data.get('registration_id'), int(time.time())) self.stats['invalid_registration'] += 1 elif err == 'QuotaExceeded': self.stats['quota_exceeded'] += 1 self.write_queue.appendleft(data)
def _on_read(self, data): ''' The only message we expect here is an error response... sadly, followed by a disconnect. ''' logging.info('_on_read: %d bytes' % (len(data))) try: status, identifier, err_string = parse_response(data) logging.warning('_on_read err: %d %d %s' % (status, identifier, err_string)) if status == 8: for msg in self.recent: if msg['identifier'] == identifier: token = msg['token'] logging.info('flagging token: %s' % (token)) self.stats['invalid_tokens'] += 1 mc.set(token, int(time.time())) except: logging.info('parse_response failed')