async def flush_metrics_to_remote(url): fields = [ User.user_id, User.ip_list, User.tcp_conn_num, User.upload_traffic, User.download_traffic, ] with db.atomic("EXCLUSIVE"): users = list(User.select(*fields).where(User.need_sync == True)) User.update( ip_list=set(), upload_traffic=0, download_traffic=0, need_sync=False ).where(User.need_sync == True).execute() data = [] for user in users: data.append( { "user_id": user.user_id, "ip_list": list(user.ip_list), "tcp_conn_num": user.tcp_conn_num, "upload_traffic": user.upload_traffic, "download_traffic": user.download_traffic, } ) async with httpx.AsyncClient() as client: await client.post(url, json={"data": data})
async def __report_user_stats(self): """ 上报用户数据 :return: """ users = User.select().where(User.is_deleted == False) User.update(conn_ip_set=set(), upload_traffic=0, download_traffic=0, total_traffic=0).where(User.is_deleted == False) await self.api.report_user_stats(user_data=users)