def push(self, packet): start_time = time.time() t = int(time.time()) * 1000 t_info = QueryHelper.get_terminal_basic_info(self.tid, self.db) uid = t_info.get('umobile','') cid = t_info.get('cid','') lst = [] if uid: lst.append(uid) if cid: lst.append(cid) for item in set(lst): push_key = get_push_key(item, t) res = WSPushHelper.push(item, t, push_key, packet, self.redis) end_time = time.time() print "push time: %s" % (end_time - start_time) print res
def push_packet(tid, packet, db, redis, t_info=None): """Push packet to tid. :arg tid: string :arg db: database instance :arg redis: redis instance :arg t_info: dict, e.g. { 'tid':'', 'umobile':'', 'group_id':'', 'cid':'', 'oid':[] } """ # NOTE: t_info has higher priority compared with tid if not t_info: # tid is avaliable t_info = QueryHelper.get_terminal_basic_info(tid, db) uid = t_info.get('umobile', '') cid = t_info.get('cid', '') oid = t_info.get('oid', []) t = int(time.time()) * 1000 lst = [] if uid: lst.append(uid) if cid: lst.append(cid) if oid: lst.extend(oid) for item in set(lst): push_key = get_push_key(item, t) res = WSPushHelper.push(item, t, push_key, packet, redis)
def delete_terminal_new(tid, db, redis, del_user=True): """Delete terminal from platform and clear the associated info. """ terminal = db.get("SELECT mobile, owner_mobile, group_id FROM T_TERMINAL_INFO" " WHERE tid = %s", tid) if not terminal: logging.info("Terminal: %s already does not exist, do nothing.", tid) return else: t_info = QueryHelper.get_terminal_basic_info(tid, db) # NOTE: record the del action. corp = QueryHelper.get_corp_by_gid(terminal.group_id, db) bind_info = dict(tid=tid, tmobile=terminal.mobile, umobile=terminal.owner_mobile, group_id=terminal.group_id, cid=corp.get('cid', '') if corp else '', del_time=int(time.time())) record_del_action(bind_info, db) WSPushHelper.pushS3(tid, db, redis, t_info) clear_data(tid, db, redis) logging.info("[PUBLIC] Delete Terminal: %s, tmobile: %s, umobile: %s", tid, terminal.mobile, terminal.owner_mobile)
def record_manual_status(db, redis, tid, mannual_status): """Record the mannual_status of one terminal. @params: db @params: redis @params: tid @params: mannual_status """ terminal = QueryHelper.get_terminal_basic_info(tid, db) db.execute("INSERT INTO T_MANUAL_LOG(tid, tmobile, umobile," " group_id, cid, manual_status, timestamp)" " VALUES(%s, %s, %s, %s, %s, %s, %s)", terminal.get('tid', ''), terminal.get('tmobile', ''), terminal.get('umobile', ''), terminal.get('group_id', -1), terminal.get('cid', ''), mannual_status, int(time.time())) logging.info("[PUBLIC] Record the mannual status, tid: %s, mannual_status: %s", tid, mannual_status)
def pushS3(tid, db, redis, t_info=None): """ S3 Information about organization. :arg tid: string :arg db: database instance :arg redis: redis instance :arg t_info: dict, record the terminal's basic info. it has higher privilege then tid. e.g. { 'tid':'', 'umobile':'', 'group_id':'', 'cid':'' } group_1=dict(group_id=1, group_name='jia', tids=['tid1', 'tid2', 'tid3']) group_2=dict(group_id=2, group_name='jia', tids=['tid1', 'tid2', 'tid3']) res = [] res.append(group_1) res.append(group_2) """ res = [] if not t_info: # tid is avaliable t_info = QueryHelper.get_terminal_basic_info(tid, db) cid = t_info.get('cid', '') groups = db.query("SELECT * FROM T_GROUP WHERE corp_id = %s", cid) for group in groups: terminals = db.query("SELECT * FROM T_TERMINAL_INFO" " WHERE group_id = %s " " AND service_status= 1", # only success group['id']) tids = [] for terminal in terminals: t = QueryHelper.get_terminal_info(terminal['tid'], db, redis) dct = dict(tid=terminal['tid'], biz_type=t.get('biz_type', 0)) tids.append(dct) res.append(dict(group_id=group['id'], group_name=group['name'], tids=tids, )) packet = dict(packet_type="S3", res=res) res = WSPushHelper.push_packet(tid, packet, db, redis, t_info)
def delete(self): """Delete a terminal. """ try: status = ErrorCode.SUCCESS tid = self.get_argument('tid', None) flag = self.get_argument('flag', 0) logging.info("[UWEB] Corp delete terminal request. tid: %s, flag: %s, cid: %s", tid, flag, self.current_user.cid) terminal = QueryHelper.get_available_terminal(tid, self.db) if not terminal: logging.error("[UWEB] The terminal with tid: %s does not exist!", tid) status = ErrorCode.TERMINAL_NOT_EXISTED self.write_ret(status) return t_info = QueryHelper.get_terminal_basic_info(tid, self.db) key = get_del_data_key(tid) self.redis.set(key, flag) biz_type = QueryHelper.get_biz_type_by_tmobile( terminal.mobile, self.db) if int(biz_type) == UWEB.BIZ_TYPE.YDWS: if terminal.login != GATEWAY.TERMINAL_LOGIN.ONLINE: if terminal.mobile == tid: delete_terminal(tid, self.db, self.redis) else: status = self.send_jb_sms( terminal.mobile, terminal.owner_mobile, tid) if status == ErrorCode.SUCCESS: WSPushHelper.pushS3(tid, self.db, self.redis, t_info) self.write_ret(status) return else: delete_terminal(tid, self.db, self.redis) if status == ErrorCode.SUCCESS: WSPushHelper.pushS3(tid, self.db, self.redis, t_info) self.write_ret(status) return # unbind terminal seq = str(int(time.time() * 1000))[-4:] args = DotDict(seq=seq, tid=tid) response = GFSenderHelper.forward(GFSenderHelper.URLS.UNBIND, args) response = json_decode(response) logging.info( "[UWEB] UNBind terminal: %s, response: %s", tid, response) if response['success'] == ErrorCode.SUCCESS: logging.info("[UWEB] uid:%s, tid: %s, tmobile:%s GPRS unbind successfully", self.current_user.uid, tid, terminal.mobile) else: status = response['success'] # unbind failed. clear sessionID for relogin, then unbind it # again clear_sessionID(self.redis, tid) logging.error('[UWEB] uid:%s, tid: %s, tmobile:%s GPRS unbind failed, message: %s, send JB sms...', self.current_user.uid, tid, terminal.mobile, ErrorCode.ERROR_MESSAGE[status]) status = self.send_jb_sms( terminal.mobile, terminal.owner_mobile, tid) if status == ErrorCode.SUCCESS: WSPushHelper.pushS3(tid, self.db, self.redis, t_info) self.write_ret(status) except Exception as e: logging.exception("[UWEB] Delete terminal failed. cid: %s, Exception: %s", self.current_user.cid, e.args) status = ErrorCode.SERVER_BUSY self.write_ret(status)