def new_ticket(online): _datetime = datetime.datetime.now() _starttime = datetime.datetime.strptime(online.acct_start_time, '%Y-%m-%d %H:%M:%S') session_time = (_datetime - _starttime).seconds stop_time = _datetime.strftime('%Y-%m-%d %H:%M:%S') ticket = Storage() ticket.id = utils.get_uuid() ticket.account_number = (online.account_number,) ticket.acct_session_id = (online.acct_session_id,) ticket.acct_start_time = (online.acct_start_time,) ticket.nas_addr = (online.nas_addr,) ticket.framed_ipaddr = (online.framed_ipaddr,) ticket.acct_session_time = (session_time,) ticket.acct_stop_time = (stop_time,) ticket.sync_ver = tools.gen_sync_ver() return ticket
def updateArea(self, wsbody): formdata = Storage() formdata.id = self.get_ws_attr(wsbody, 'areaCode', notnull=True) formdata.node_name = self.get_ws_attr(wsbody, 'areaName', notnull=True) formdata.node_desc = u'BOSS 接入区域' formdata.rule_id = 0 node = self.db.query(models.TrNode).get(formdata.id) if not node: return self.send_wsresp('updateArea', code=Codes.ERROR_ALREADY_EXIST, error=u'区域不存在') manager = NodeService(self.db, self.aes) ret = manager.update(formdata) if not ret: self.send_wsresp('updateArea', code=Codes.ERROR_UNKNOWN, error=manager.last_error) else: self.send_wsresp('updateArea', code=Codes.SUCCESS)
def updateProduct(self, wsbody): formdata = Storage() formdata.id = self.get_ws_attr(wsbody, 'productCode', notnull=True) product = self.db.query(models.TrProduct).get(formdata.id) if not product: return self.send_wsresp('updateProduct', code=Codes.ERROR_ALREADY_EXIST, error=u'套餐不存在') else: formdata.product_name = self.get_ws_attr(wsbody, 'productName', notnull=True) formdata.product_status = 0 formdata.bind_mac = self.get_ws_attr(wsbody, 'bindMac', defval=0) formdata.bind_vlan = self.get_ws_attr(wsbody, 'bindVlan', defval=0) formdata.concur_number = self.get_ws_attr(wsbody, 'concurNumber', defval=0) formdata.bandwidthCode = self.get_ws_attr(wsbody, 'bandwidthCode', defval='') formdata.input_max_limit = utils.bb2mb( self.get_ws_attr(wsbody, 'inputMaxLimit', defval=0)) formdata.output_max_limit = utils.bb2mb( self.get_ws_attr(wsbody, 'outputMaxLimit', defval=0)) formdata.fee_months = product.fee_months formdata.fee_price = product.fee_price formdata.product_policy = BOMonth formdata.fee_times = product.fee_times formdata.fee_flows = product.fee_flows formdata.product_charges = None formdata.free_auth = product.free_auth formdata.free_auth_uprate = product.free_auth_uprate formdata.free_auth_downrate = product.free_auth_downrate manager = ProductService(self.db, self.aes) ret = manager.update(formdata) if not ret: self.send_wsresp('updateProduct', code=Codes.ERROR_UNKNOWN, error=manager.last_error) else: self.send_wsresp('updateProduct', code=Codes.SUCCESS) return
def process(self): next_interval = self.config.ha.get('interval', 5) if not self.running: reactor.callLater(next_interval, self.process) return try: table = models.TrRepliSyncStatus.__table__ with self.db_engine.begin() as conn: squery = conn.execute(table.select().where( table.c.sync_status.in_([0, 2 ])).where(table.c.sync_times < 5)) count = squery.rowcount self.cache.set(hadb_sync_count_cache_key, count) if count == 0: reactor.callLater(next_interval, self.process) return if count > 100: next_interval = 1.0 logger.info(u'等待同步数据记录数:{}'.format(count)) _total = 0 for _status in squery.fetchmany(size=100): try: statobj = Storage() statobj.id = _status[table.c.id] statobj.table_name = _status[table.c.table_name] statobj.action = _status.action statobj.pkeys = json.loads(_status[table.c.pkeys]) statobj.content = json.loads(_status[table.c.content]) statobj.sync_ver = _status[table.c.sync_ver] message = msgpack.packb(statobj) d = self.syncer.sendMsg(message) d.addCallback(self.on_reply, statobj.id) d.addErrback(self.on_fail, statobj.id) _total += 1 except Exception as err: logger.error(traceback.format_exc()) except Exception as err: logger.error(traceback.format_exc()) reactor.callLater(next_interval, self.process)