Exemplo n.º 1
0
 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
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
    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)