def queueHandle(self): if self.dmb.queue_to_send: for rec in self.dmb.queue_to_send: sended = 0 log.info(rec['jid']) for j in rec['jid']: if rec.get('send') or self.ui.getStatus(j): queue_output.put((j, rec.get('message'), rec.get('extra'))) sended = 1 break if not sended: post = rec.get('post') message = rec.get('message') comment = rec.get('comment') id_recommend = rec.get('id_recommend') try: self.dmb.addToSendQueue(login = rec['login'], post = post, comment = comment, id_recommend = id_recommend, message = message) except dmbError: log.debug('%d %s %s' % (sys.exc_traceback.tb_lineno, sys.exc_type, sys.exc_value)) except: log.error('%d %s %s' % (sys.exc_traceback.tb_lineno, sys.exc_type, sys.exc_value)) tick = time.time() self.dmb.queue_to_send = [] tick = time.time() - tick log.debug('%s %s' % ('queueHandle', tick))
def queueHandle(self): if self.dmb.queue_to_send: for rec in self.dmb.queue_to_send: sended = 0 log.info(rec['jid']) for j in rec['jid']: if rec.get('send') or self.ui.getStatus(j): queue_output.put( (j, rec.get('message'), rec.get('extra'))) sended = 1 break if not sended: post = rec.get('post') message = rec.get('message') comment = rec.get('comment') id_recommend = rec.get('id_recommend') try: self.dmb.addToSendQueue(login=rec['login'], post=post, comment=comment, id_recommend=id_recommend, message=message) except dmbError: log.debug('%d %s %s' % (sys.exc_traceback.tb_lineno, sys.exc_type, sys.exc_value)) except: log.error('%d %s %s' % (sys.exc_traceback.tb_lineno, sys.exc_type, sys.exc_value)) tick = time.time() self.dmb.queue_to_send = [] tick = time.time() - tick log.debug('%s %s' % ('queueHandle', tick))
def initDB(self): if not self.conn.params.find({'name': 'counter'}).count(): self.conn.params.insert({'name': 'counter', 'value': 0}) if not self.conn.params.find({'name': 's2s_in'}).count(): self.conn.params.insert({'name': 's2s_in', 'value': s2s_in_allow}) if not self.conn.params.find({'name': 's2s_reg'}).count(): self.conn.params.insert({ 'name': 's2s_reg', 'value': s2s_reg_allow }) self.conn.users.create_index('login') self.conn.users.create_index([('jid', 1), ('priority', -1)]) self.conn.users.params.create_index('login') self.conn.users.lists.create_index('login') self.conn.users.alias.create_index('login') self.conn.users.regexp.create_index('login') self.conn.posts.create_index('login') self.conn.posts.create_index('id') self.conn.comments.create_index('login') self.conn.comments.create_index([('post', 1), ('id', 1)]) self.conn.recommends.create_index('login') self.conn.recommends.create_index([('post', 1), ('comment', 1)]) self.conn.subscribes.create_index('login') self.conn.subscribes.create_index('post') self.conn.subscribes.create_index('user') self.conn.subscribes.create_index('tag') self.conn.send.queue.create_index('login') self.conn.send.history.create_index([('login', 1), ('post', 1), ('comment', 1)]) log.info('create indexes') self.regUser('', 'anonymous')
def __init__(self, host, port=27017, base='dmb', user=None, passwd=None): try: self.conn = connection.Connection(host, port)[base] if self.conn: log.info('connected database') except: log.critical( '%d %s %s' % (sys.exc_traceback.tb_lineno, sys.exc_type, sys.exc_value))
def send(self, jid, message, extra): try: if message: message = message.rstrip() if message.count("\n"): message = "\n" + message msg = xmpp.protocol.Message(jid, message, "chat") if extra: for k, v in extra.iteritems(): msg.setAttr(k, v) log.info("%s(%s) -> %s" % (jid, msg.getBody(), msg.getAttrs())) self.client.send(msg) except: log.error("%d %s %s" % (sys.exc_traceback.tb_lineno, sys.exc_type, sys.exc_value))
def messageHandler(self, conn, msg): try: log.info("%s(%s) -> %s" % (msg.getFrom(), msg.getBody(), msg.getAttrs())) if msg.getAttrs().get("dmb") == "server": if self.s2sFunc: login = msg.getAttrs().get("dmb_login") self.s2sFunc(str(msg.getFrom()).split("/")[0], msg.getBody(), login) elif msg.getBody() and self.messageFunc: self.messageFunc(str(msg.getFrom()).split("/")[0], msg.getBody()) except SystemExit: log.info("%s" % "system exit") sys.exit() except: log.error("%d %s %s" % (sys.exc_traceback.tb_lineno, sys.exc_type, sys.exc_value))
def run(self): global is_run while is_run: try: jid, message, login = queue_input.get(timeout=10) log.info('%s %s' % (jid, message)) if not login: try: login = self.dmb.getLogin(jid=jid) except dmbErrorAuth: login = '******' try: self.dmb.def_locale = self.dmb.getUserParams( login)['locale'] except: log.error('%d %s %s' % (sys.exc_traceback.tb_lineno, sys.exc_type, sys.exc_value)) try: tick = time.time() if jid == config.admin: mesg = adminParsing(self.dmb, login=unicode(login), text=unicode(message), jid=jid) else: mesg = parsing(self.dmb, login=unicode(login), text=unicode(message), jid=jid) tick = time.time() - tick log.debug('%s %s' % (message.split(' ')[0], tick)) except SystemExit: log.info('exit') is_run = None self.ui.is_run = None sys.exit() except dmbError as exc: log.error('%d %s %s' % (sys.exc_traceback.tb_lineno, sys.exc_type, sys.exc_value)) mesg = '%s %s' % (exc.getText(), self.dmb.getText(exc.getCode())) except: log.error('%d %s %s' % (sys.exc_traceback.tb_lineno, sys.exc_type, sys.exc_value)) mesg = self.dmb.getText('ERR7') queue_output.put((jid, mesg, {})) self.queueHandle() except Queue.Empty: pass
def presenceHandler(self, conn, event): try: if event: log.info("%s %s" % (event.getFrom(), event.getAttrs())) if event.getAttrs().get("type") == "subscribe": self.client.getRoster().Authorize(event.getFrom()) jid = str(event.getFrom()).split("/")[0] status = self.getStatus(jid) if status and self.presenceFunc: self.presenceFunc(jid, status) except SystemExit: log.info("%s" % "system exit") sys.exit() except: log.error("%d %s %s" % (sys.exc_traceback.tb_lineno, sys.exc_type, sys.exc_value))
def send(self, jid, message, extra): try: if message: message = message.rstrip() if message.count('\n'): message = '\n' + message msg = xmpp.protocol.Message(jid, message, 'chat') if extra: for k, v in extra.iteritems(): msg.setAttr(k, v) log.info('%s(%s) -> %s' % (jid, msg.getBody(), msg.getAttrs())) self.client.send(msg) except: log.error( '%d %s %s' % (sys.exc_traceback.tb_lineno, sys.exc_type, sys.exc_value))
def presenceHandler(self, conn, event): try: if event: log.info('%s %s' % (event.getFrom(), event.getAttrs())) if event.getAttrs().get('type') == 'subscribe': self.client.getRoster().Authorize(event.getFrom()) jid = str(event.getFrom()).split('/')[0] status = self.getStatus(jid) if status and self.presenceFunc: self.presenceFunc(jid, status) except SystemExit: log.info('%s' % 'system exit') sys.exit() except: log.error( '%d %s %s' % (sys.exc_traceback.tb_lineno, sys.exc_type, sys.exc_value))
def messageHandler(self, conn, msg): try: log.info('%s(%s) -> %s' % (msg.getFrom(), msg.getBody(), msg.getAttrs())) if msg.getAttrs().get('dmb') == 'server': if self.s2sFunc: login = msg.getAttrs().get('dmb_login') self.s2sFunc( str(msg.getFrom()).split('/')[0], msg.getBody(), login) elif msg.getBody() and self.messageFunc: self.messageFunc( str(msg.getFrom()).split('/')[0], msg.getBody()) except SystemExit: log.info('%s' % 'system exit') sys.exit() except: log.error( '%d %s %s' % (sys.exc_traceback.tb_lineno, sys.exc_type, sys.exc_value))
def s2sHandler(self, jid, message, login = None): global dmb_servers log.info('***s2s*** %s %s' % (jid, message)) if message == 'registry': log.info('servers: %s' % dmb_servers) if jid in dmb_servers: queue_output.put((jid, 'registry already exists', {})) else: if config.s2s_reg == s2s_reg_deny: queue_output.put((jid, 'deny registry', {})) elif config.s2s_reg == s2s_reg_allow_confirm: queue_output.put((config.admin, '%s want to register' % jid, {})) else: try: dmb_servers = self.dmb.addServer(jid) msg_out = 'ok' except dmbErrorRepeat: msg_out = 'already exists' queue_output.put((jid, msg_out, {'dmb': 'server'})) elif config.s2s_msg == s2s_msg_allow: queue_input.put((jid, message, '%s@%s' % (login, getServerName(jid))))
def run(self): global is_run while is_run: try: jid, message, login = queue_input.get(timeout = 10) log.info('%s %s' % (jid, message)) if not login: try: login = self.dmb.getLogin(jid = jid) except dmbErrorAuth: login = '******' try: self.dmb.def_locale = self.dmb.getUserParams(login)['locale'] except: log.error('%d %s %s' % (sys.exc_traceback.tb_lineno, sys.exc_type, sys.exc_value)) try: tick = time.time() if jid == config.admin: mesg = adminParsing(self.dmb, login = unicode(login), text = unicode(message), jid = jid) else: mesg = parsing(self.dmb, login = unicode(login), text = unicode(message), jid = jid) tick = time.time() - tick log.debug('%s %s' % (message.split(' ')[0], tick)) except SystemExit: log.info('exit') is_run = None self.ui.is_run = None sys.exit() except dmbError as exc: log.error('%d %s %s' % (sys.exc_traceback.tb_lineno, sys.exc_type, sys.exc_value)) mesg = '%s %s' % (exc.getText(), self.dmb.getText(exc.getCode())) except: log.error('%d %s %s' % (sys.exc_traceback.tb_lineno, sys.exc_type, sys.exc_value)) mesg = self.dmb.getText('ERR7') queue_output.put((jid, mesg, {})) self.queueHandle() except Queue.Empty: pass
def s2sHandler(self, jid, message, login=None): global dmb_servers log.info('***s2s*** %s %s' % (jid, message)) if message == 'registry': log.info('servers: %s' % dmb_servers) if jid in dmb_servers: queue_output.put((jid, 'registry already exists', {})) else: if config.s2s_reg == s2s_reg_deny: queue_output.put((jid, 'deny registry', {})) elif config.s2s_reg == s2s_reg_allow_confirm: queue_output.put( (config.admin, '%s want to register' % jid, {})) else: try: dmb_servers = self.dmb.addServer(jid) msg_out = 'ok' except dmbErrorRepeat: msg_out = 'already exists' queue_output.put((jid, msg_out, {'dmb': 'server'})) elif config.s2s_msg == s2s_msg_allow: queue_input.put( (jid, message, '%s@%s' % (login, getServerName(jid))))
def close(self): log.info('disconnected database')