Example #1
0
 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)
Example #2
0
 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)
Example #3
0
 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')
Example #4
0
 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')
Example #5
0
 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)