def updateUserPage(self, user): """ Update user HTML page with current status of all LFNs which belong to that user. """ try: iList, sList = self.userDict[user] except Exception as _exc: return "" page = "" style = "" for idx in xrange(0, len(iList)): lfn = iList[idx] try: statusCode, statusMsg = sList[idx] except Exception as exc: print "\n### userDict", self.userDict[user] print_exc(exc) HTTPError(500, "Server error") if statusCode == StatusCode.DONE: # append remove request statusMsg += " | " + removeLfn(lfn) else: # sanitize msg and append cancel request msg = cgi.escape(statusMsg) + " | " + cancelLfn(lfn) if statusMsg.lower().find('error') != -1: img = '' else: img = """<img src="images/loading.gif"/> """ statusMsg = img + msg if style: style = "" else: style = "zebra" spanid = spanId(lfn) page += self.templatepage('templateLfnRow', style=style, lfn=lfn, \ spanid=spanid, statusCode=statusCode, statusMsg=statusMsg) page += self.templatepage('templateCheckStatus', lfn=lfn) return page
def request(self, lfn, user=None): """Request LFN transfer""" validate_lfn(lfn) self.request_lock.acquire() try: if lfn in self.failed_lfns: del self.failed_lfns[lfn] if lfn not in self.lfn_requests: mover = FileMover(self.cp) mover.request(lfn, self.base) self._add_user_request(lfn, user) self.user_requests[user] self.lfn_requests[lfn] = mover self.pool.queue(mover) else: self._add_user_request(lfn, user) except Exception as exc: print_exc(exc) if str(exc).find('Fail to look-up T[1-3] CMS site') != -1: self.failed_lfns[lfn] = (StatusCode.FAILED, StatusMsg.NO_SITE) else: self.failed_lfns[lfn] = (StatusCode.FAILED, StatusMsg.SERVER_FAILURE) finally: self.request_lock.release()
def updatePageWithLfnInfo(self, user, lfn): """Update page with LFN info""" page = "" lfnList, statList = self.userDict[user] self.makedir(user) if not lfnList: return "" try: idx = lfnList.index(lfn) statusCode, statusMsg = statList[idx] if statusCode == StatusCode.DONE: filename = lfn.split('/')[-1] pfn = os.path.join(self.transfer_dir, lfn[1:]) if os.path.isfile(pfn): if not os.path.isfile("%s/%s/%s" \ % (self.download_dir, user, filename)): try: os.link(pfn, "%s/%s/%s" \ % (self.download_dir, user, filename)) os.symlink(pfn, "%s/%s/softlinks/%s" \ % (self.download_dir, user, filename)) except Exception as exc: print_exc(exc) link = "download/%s/%s" % (user, filename) filepath = "%s/%s/%s" % (self.download_dir, user, filename) fileStat = os.stat(filepath) fileSize = sizeFormat(fileStat[stat.ST_SIZE]) msg = "<a href=\"%s/%s\">Download (%s)</a>" \ % (self.url, link, fileSize) statList[idx] = (StatusCode.DONE, msg) else: statList[idx] = (StatusCode.TRANSFER_STATUS_UNKNOWN, \ StatusMsg.TRANSFER_STATUS_UNKNOWN) msg = cgi.escape(StatusMsg.TRANSFER_STATUS_UNKNOWN) page += msg + " | " + removeLfn(lfn) else: page += cgi.escape(statusMsg) + " | " + cancelLfn(lfn) except ValueError as err: print_exc(err) print lfn print self.userDict except Exception as exc: print_exc(exc) print lfn print self.userDict return page
todo = [clean_path + '/' + i for i in os.listdir(clean_path)] file_ages = [] cur_size = 0 while todo: filename = todo.pop(0) mystat = os.stat(filename) isdir = stat.S_ISDIR(mystat.st_mode) if isdir: todo.extend([filename + '/' + i for i in os.listdir(filename)]) else: file_ages.append((filename, mystat.st_size, mystat.st_atime)) cur_size += mystat.st_size if cur_size > self.max_size_gb * 1024**3: file_ages.sort(key=operator.itemgetter(2)) deleted_size = 0 needed_size = cur_size - self.max_size_gb * 1024**3 while deleted_size < needed_size: filename, size, _ = file_ages.pop(0) self.log.info("os.unlink(%s)" % filename) if filename.startswith(clean_path): try: os.unlink(filename) except Exception as exc: print_exc(exc) deleted_size += size def graceful_exit(self): """Exit method""" self.pool.drain() self.pool.join()
def handleExc(exc): """exception handler""" print_exc(exc) page = "<div>Request failed</div>" return page