Exemplo n.º 1
0
 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"/>&nbsp;"""
             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
Exemplo n.º 2
0
 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()
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
        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()
Exemplo n.º 5
0
def handleExc(exc):
    """exception handler"""
    print_exc(exc)
    page  = "<div>Request failed</div>"
    return page