def flushsquid(): prefix = request.query.jsoncallback RawUrls = request.query.urls urlstype = int(request.query.urlstype) LogKeyName = "key"+str(request.query.key) if RawUrls.strip() == "": DataDict = {'success':'0','text':'请输入需要刷新的URLS列表!'} return prefix+"("+ujson.encode(DataDict)+")" else: RawUrls = RawUrls.strip(",") UrlsList = RawUrls.split(",") QuitFlag = False PathList = [] #判断收到的URL是否是同域名下同类型的URL(同是文件或目录) FirstUrl = UrlsList[0] proto,rest = urllib.splittype(FirstUrl) DomainName,path = urllib.splithost(rest) if "." in path: UrlType = "file" else: UrlType = "dir" for url in UrlsList: proto,rest = urllib.splittype(url) Thost,Tpath = urllib.splithost(rest) if "." in Tpath: TUrlType = "file" else: TUrlType = "dir" if DomainName != Thost or UrlType != TUrlType: QuitFlag = True break else: PathList.append(Tpath) if QuitFlag == False: try: #调用刷新类 PurgeCacheObj = exeCachePurge(UrlType,PathList,DomainName,LogKeyName) PurgeCacheObj.start() except Exception,e: DataDict = {'success':'0','text':'%s'%e} else: DataDict = {'success':'1'}
redata = redis.Redis(connection_pool=redispool) redpipe = redata.pipeline() for i in xrange(public.PerHandleNum): redpipe.lpop(public.PendingHandleListName) PathsList = redpipe.execute() #规范及分离数据 PathsList_NoNone = [i for i in PathsList if i] if len(PathsList_NoNone) == 0: logger.info("NO HAVE PATHS NEED TO PURGE") sys.exit() else: FilePathsList = [i for i in PathsList_NoNone if "." in i] FilePathsList = [ i for i in FilePathsList if "A0.xml" not in i and "A05.xml" not in i and "A0A.xml" not in i ] DirPathsList = [i for i in PathsList_NoNone if "." not in i] try: if len(FilePathsList) != 0: PurgeFilesObj = exeCachePurge("file", FilePathsList) PurgeFilesObj.start() if len(DirPathsList) != 0: PurgeDirsObj = exeCachePurge("dir", DirPathsList) PurgeDirsObj.start() except Exception, e: logger.error("PURGE SQUID AND CDN EXECEPTION,%s" % e) sys.exit()
#获取待处理队列中数据 redispool = redis.ConnectionPool(host=public.RedisIP,port=public.RedisPort,db=0) redata = redis.Redis(connection_pool=redispool) redpipe = redata.pipeline() for i in xrange(public.PerHandleNum): redpipe.lpop(public.PendingHandleListName) PathsList = redpipe.execute() #规范及分离数据 PathsList_NoNone = [i for i in PathsList if i] if len(PathsList_NoNone) == 0: logger.info("NO HAVE PATHS NEED TO PURGE") sys.exit() else: FilePathsList = [i for i in PathsList_NoNone if "." in i] FilePathsList = [i for i in FilePathsList if "A0.xml" not in i and "A05.xml" not in i and "A0A.xml" not in i] DirPathsList = [i for i in PathsList_NoNone if "." not in i] try: if len(FilePathsList) != 0: PurgeFilesObj = exeCachePurge("file",FilePathsList) PurgeFilesObj.start() if len(DirPathsList) != 0: PurgeDirsObj = exeCachePurge("dir",DirPathsList) PurgeDirsObj.start() except Exception,e: logger.error("PURGE SQUID AND CDN EXECEPTION,%s"%e) sys.exit()