コード例 #1
0
   def getParmsForPage(self, root, repos):
      repoList = []
      for userRepo in repos:
         try:
            repoHistory = librdiff.getLastBackupHistoryEntry(rdw_helpers.joinPaths(root, userRepo))
         except librdiff.FileError:
            repoSize = "0"
            repoDate = "Error"
            repoList.append({ "repoName" : userRepo,
                           "repoSize" : repoSize,
                           "repoDate" : repoDate,
                           "repoBrowseUrl" : self.buildBrowseUrl(userRepo, "/", False),
                           "repoHistoryUrl" : self.buildHistoryUrl(userRepo),
                           'failed': True})
         else:
            repoSize = rdw_helpers.formatFileSizeStr(repoHistory.size)
            if repoHistory.inProgress:
               repoSize = "In Progress"
            repoDate = repoHistory.date.getDisplayString()
            repoList.append({ "repoName" : userRepo,
                              "repoSize" : repoSize,
                              "repoDate" : repoDate,
                              "repoBrowseUrl" : self.buildBrowseUrl(userRepo, "/", False),
                              "repoHistoryUrl" : self.buildHistoryUrl(userRepo),
                              'failed': False})

      self._sortLocations(repoList)
      # Make second pass through list, setting the 'altRow' attribute
      for i in range(0, len(repoList)):
         repoList[i]['altRow'] = (i % 2 == 0)
      return { "title" : "browse", "repos" : repoList }
コード例 #2
0
    def index(self):
        page = self.startPage("Backup Locations")
        page = page + self.writeTopLinks()

        repoList = []
        for userRepo in self.userDB.getUserRepoPaths(self.getUsername()):
            try:
                repoHistory = librdiff.getLastBackupHistoryEntry(
                    rdw_helpers.joinPaths(
                        self.userDB.getUserRoot(self.getUsername()), userRepo))
            except librdiff.FileError:
                repoSize = "0"
                repoDate = "Error"
            else:
                repoSize = rdw_helpers.formatFileSizeStr(repoHistory.size)
                repoDate = repoHistory.date.getDisplayString()
            repoList.append({
                "repoName":
                userRepo,
                "repoSize":
                repoSize,
                "repoDate":
                repoDate,
                "repoBrowseUrl":
                self.buildBrowseUrl(userRepo, "/", False),
                "repoHistoryUrl":
                self.buildHistoryUrl(userRepo)
            })
        page = page + self.compileTemplate(
            "repo_listing.html", title="browse", repos=repoList)
        page = page + self.endPage()
        return page
コード例 #3
0
 def getParmsForPage(self, root, repos):
     repoList = []
     repoErrors = []
     for userRepo in repos:
         try:
             repoHistory = librdiff.getLastBackupHistoryEntry(rdw_helpers.joinPaths(root, userRepo))
         except librdiff.FileError:
             repoSize = "0"
             repoDate = "Error"
             repoErrors.append(
                 {
                     "repoName": userRepo,
                     "repoSize": repoSize,
                     "repoDate": repoDate,
                     "repoBrowseUrl": self.buildBrowseUrl(userRepo, "/", False),
                     "repoHistoryUrl": self.buildHistoryUrl(userRepo),
                 }
             )
         else:
             repoSize = rdw_helpers.formatFileSizeStr(repoHistory.size)
             if repoHistory.inProgress:
                 repoSize = "In Progress"
             repoDate = repoHistory.date.getDisplayString()
             repoList.append(
                 {
                     "repoName": userRepo,
                     "repoSize": repoSize,
                     "repoDate": repoDate,
                     "repoBrowseUrl": self.buildBrowseUrl(userRepo, "/", False),
                     "repoHistoryUrl": self.buildHistoryUrl(userRepo),
                 }
             )
     return {"title": "browse", "repos": repoList, "badrepos": repoErrors}
コード例 #4
0
 def sendEmails(self):
    for user in self.userDB.getUserList():
       userRepos = self.userDB.getUserRepoPaths(user)
       oldRepos = []
       for repo in userRepos:
          maxDaysOld = self.userDB.getRepoMaxAge(user, repo)
          if maxDaysOld != 0:
             # get the last backup date
             try:
                lastBackup = librdiff.getLastBackupHistoryEntry(rdw_helpers.joinPaths(self.userDB.getUserRoot(user), repo), False)
             except librdiff.FileError:
                pass # Skip repos that have never been successfully backed up
             else:
                if lastBackup:
                   oldestGoodBackupTime = rdw_helpers.rdwTime()
                   oldestGoodBackupTime.initFromMidnightUTC(-maxDaysOld)
                   if lastBackup.date < oldestGoodBackupTime:
                      oldRepos.append({"repo" : repo, "lastBackupDate" : lastBackup.date.getDisplayString(), "maxAge" : maxDaysOld })
                
       if oldRepos:
          userEmailAddress = self.userDB.getUserEmail(user)
          emailText = rdw_helpers.compileTemplate("email_notification.txt", repos=oldRepos, sender=self._getEmailSender(), user=user)
 
          session = smtplib.SMTP(self._getEmailHost())
          session.login(self._getEmailUsername(), self._getEmailPassword())
          smtpresult = session.sendmail(self._getEmailSender(), userEmailAddress.split(";"), emailText)
          session.quit()
コード例 #5
0
   def _getOldRepoInfo(self, repoName, repoPath,
                     notifySettings, isAdminMonitoring):
      if isAdminMonitoring:
         maxAge = notifySettings['adminMaxAge']
      else:
         maxAge = notifySettings['anyRepoMaxAge']
         if not maxAge:
            maxAge = notifySettings['repos'][repoName]

      if maxAge == 0:
         return None

      try:
         lastBackup = librdiff.getLastBackupHistoryEntry(repoPath, False)
      except librdiff.FileError:
         return {
            "repo" : repoName,
            "lastBackupDate" : "never",
            "maxAge" : maxAge
         }
      except Exception:
         rdw_logging.log_exception()
         rdw_logging.log('(Previous exception occurred for repo %s.)' % repoPath)
      else:
         if lastBackup:
            oldestGoodBackupTime = rdw_helpers.rdwTime()
            oldestGoodBackupTime.initFromMidnightUTC(-maxAge)
            if lastBackup.date < oldestGoodBackupTime:
               return {
                  "repo" : repoName,
                  "lastBackupDate" : lastBackup.date.getDisplayString(),
                  "maxAge" : maxAge
               }
      return None
コード例 #6
0
ファイル: page_locations.py プロジェクト: chencho/rdiffweb
   def getParmsForPage(self, root, repos):
      repoList = []
      for reponame in repos:
         try:
            repoHistory = librdiff.getLastBackupHistoryEntry(rdw_helpers.joinPaths(root, reponame))
            reposize = rdw_helpers.formatFileSizeStr(repoHistory.size)
            reposizeinbytes = repoHistory.size
            if repoHistory.inProgress:
               reposize = "En Progreso"
            repoDate = repoHistory.date.getDisplayString()
            repodateinseconds = repoHistory.date.getLocalSeconds()
            failed = False
         except librdiff.FileError:
            logging.exception("No se puede obtener informacion previa de %s" % reponame)
            reposize = "0"
            reposizeinbytes = 0 
            repoDate = "Error"
            repodateinseconds = 0
            failed = True
         repoList.append({ "reponame" : reponame,
                           "reposize" : reposize,
                           "reposizeinbytes" : reposizeinbytes,
                           "repodate" : repoDate,
                           "repodateinseconds" : repodateinseconds,
                           "repoBrowseUrl" : self.buildBrowseUrl(reponame, "/", False),
                           "repoHistoryUrl" : self.buildHistoryUrl(reponame),
                           'failed': failed})

      self._sortLocations(repoList)
      return { "title" : "browse", "repos" : repoList }
コード例 #7
0
ファイル: page_locations.py プロジェクト: lxsol/rdiffweb
   def getParmsForPage(self, root, repos):
      repoList = []
      for reponame in repos:
         try:
            repoHistory = librdiff.getLastBackupHistoryEntry(rdw_helpers.joinPaths(root, reponame))
            reposize = rdw_helpers.formatFileSizeStr(repoHistory.size)
            reposizeinbytes = repoHistory.size
            if repoHistory.inProgress:
               reposize = "In Progress"
            repoDate = repoHistory.date.getDisplayString()
            repodateinseconds = repoHistory.date.getLocalSeconds()
            failed = False
         except librdiff.FileError:
            logging.exception("Can't get reference on the last backup history for %s" % reponame)
            reposize = "0"
            reposizeinbytes = 0 
            repoDate = "Error"
            repodateinseconds = 0
            failed = True
         repoList.append({ "reponame" : reponame,
                           "reposize" : reposize,
                           "reposizeinbytes" : reposizeinbytes,
                           "repodate" : repoDate,
                           "repodateinseconds" : repodateinseconds,
                           "repoBrowseUrl" : self.buildBrowseUrl(reponame, "/", False),
                           "repoHistoryUrl" : self.buildHistoryUrl(reponame),
                           'failed': failed})

      self._sortLocations(repoList)
      return { "title" : "browse", "repos" : repoList }
コード例 #8
0
    def getParmsForPage(self, root, repos):
        repoList = []
        for userRepo in repos:
            try:
                repoHistory = librdiff.getLastBackupHistoryEntry(
                    rdw_helpers.joinPaths(root, userRepo))
            except librdiff.FileError:
                repoSize = "0"
                repoDate = "Error"
                repoList.append({
                    "repoName":
                    userRepo,
                    "repoSize":
                    repoSize,
                    "repoDate":
                    repoDate,
                    "repoBrowseUrl":
                    self.buildBrowseUrl(userRepo, "/", False),
                    "repoHistoryUrl":
                    self.buildHistoryUrl(userRepo),
                    'failed':
                    True
                })
            else:
                repoSize = rdw_helpers.formatFileSizeStr(repoHistory.size)
                if repoHistory.inProgress:
                    repoSize = "In Progress"
                repoDate = repoHistory.date.getDisplayString()
                repoList.append({
                    "repoName":
                    userRepo,
                    "repoSize":
                    repoSize,
                    "repoDate":
                    repoDate,
                    "repoBrowseUrl":
                    self.buildBrowseUrl(userRepo, "/", False),
                    "repoHistoryUrl":
                    self.buildHistoryUrl(userRepo),
                    'failed':
                    False
                })

        self._sortLocations(repoList)
        # Make second pass through list, setting the 'altRow' attribute
        for i in range(0, len(repoList)):
            repoList[i]['altRow'] = (i % 2 == 0)
        return {"title": "browse", "repos": repoList}
コード例 #9
0
    def sendEmails(self):
        for user in self.userDB.getUserList():
            userRepos = self.userDB.getUserRepoPaths(user)
            oldRepos = []
            for repo in userRepos:
                maxDaysOld = self.userDB.getRepoMaxAge(user, repo)
                if maxDaysOld != 0:
                    # get the last backup date
                    try:
                        lastBackup = librdiff.getLastBackupHistoryEntry(
                            rdw_helpers.joinPaths(
                                self.userDB.getUserRoot(user), repo), False)
                    except librdiff.FileError:
                        pass  # Skip repos that have never been successfully backed up
                    else:
                        if lastBackup:
                            oldestGoodBackupTime = rdw_helpers.rdwTime()
                            oldestGoodBackupTime.initFromMidnightUTC(
                                -maxDaysOld)
                            if lastBackup.date < oldestGoodBackupTime:
                                oldRepos.append({
                                    "repo":
                                    repo,
                                    "lastBackupDate":
                                    lastBackup.date.getDisplayString(),
                                    "maxAge":
                                    maxDaysOld
                                })

            if oldRepos:
                userEmailAddress = self.userDB.getUserEmail(user)
                emailText = rdw_helpers.compileTemplate(
                    "email_notification.txt",
                    repos=oldRepos,
                    sender=self._getEmailSender(),
                    user=user)

                session = smtplib.SMTP(self._getEmailHost())
                session.login(self._getEmailUsername(),
                              self._getEmailPassword())
                smtpresult = session.sendmail(self._getEmailSender(),
                                              userEmailAddress.split(";"),
                                              emailText)
                session.quit()
コード例 #10
0
def emailNotifications():
   emailHost = getEmailHost()
   emailSender = getEmailSender()
   emailUsername = getEmailUsername()
   emailPassword = getEmailPassword()
      
   dbBackend = db.userDB().getUserDBModule()
   for user in dbBackend.getUserList():
      userRepos = dbBackend.getUserRepoPaths(user)
      oldRepos = []
      for repo in userRepos:
         maxDaysOld = dbBackend.getRepoMaxAge(user, repo)
         if maxDaysOld != 0:
            # get the last backup date
            try:
               lastBackup = librdiff.getLastBackupHistoryEntry(rdw_helpers.joinPaths(dbBackend.getUserRoot(user), repo), False)
            except librdiff.FileError:
               pass # Skip repos that have never been successfully backed up
            else:
               if lastBackup:
                  oldestGoodBackupTime = rdw_helpers.rdwTime()
                  oldestGoodBackupTime.initFromMidnightUTC(-maxDaysOld)
                  if lastBackup.date < oldestGoodBackupTime:
                     oldRepos.append({"repo" : repo, "lastBackupDate" : lastBackup.date.getDisplayString(), "maxAge" : maxDaysOld })
               
      if oldRepos:
         userEmailAddress = dbBackend.getUserEmail(user)
         emailText = rdw_helpers.compileTemplate("email_notification.txt", repos=oldRepos, sender=emailSender, user=user)

         session = smtplib.SMTP(emailHost)
         session.login(emailUsername, emailPassword)
         smtpresult = session.sendmail(emailSender, userEmailAddress.split(";"), emailText)
         if smtpresult:
            error = ""
            for recipient in smtpresult.keys():
               error = """Could not delivery mail to: %s

Server said: %s
%s

%s""" % (recipient, smtpresult[recipient][0], smtpresult[recipient][1], error)
            raise smtplib.SMTPException, error
         session.quit()
コード例 #11
0
 def getParmsForPage(self, root, repos):
     repoList = []
     repoErrors = []
     for userRepo in repos:
         try:
             repoHistory = librdiff.getLastBackupHistoryEntry(
                 rdw_helpers.joinPaths(root, userRepo))
         except librdiff.FileError:
             repoSize = "0"
             repoDate = "Error"
             repoErrors.append({
                 "repoName":
                 userRepo,
                 "repoSize":
                 repoSize,
                 "repoDate":
                 repoDate,
                 "repoBrowseUrl":
                 self.buildBrowseUrl(userRepo, "/", False),
                 "repoHistoryUrl":
                 self.buildHistoryUrl(userRepo)
             })
         else:
             repoSize = rdw_helpers.formatFileSizeStr(repoHistory.size)
             if repoHistory.inProgress:
                 repoSize = "In Progress"
             repoDate = repoHistory.date.getDisplayString()
             repoList.append({
                 "repoName":
                 userRepo,
                 "repoSize":
                 repoSize,
                 "repoDate":
                 repoDate,
                 "repoBrowseUrl":
                 self.buildBrowseUrl(userRepo, "/", False),
                 "repoHistoryUrl":
                 self.buildHistoryUrl(userRepo)
             })
     return {"title": "browse", "repos": repoList, "badrepos": repoErrors}
コード例 #12
0
   def index(self):
      page = self.startPage("Backup Locations")
      page = page + self.writeTopLinks()

      repoList = []
      for userRepo in self.userDB.getUserRepoPaths(self.getUsername()):
         try:
            repoHistory = librdiff.getLastBackupHistoryEntry(rdw_helpers.joinPaths(self.userDB.getUserRoot(self.getUsername()), userRepo))
         except librdiff.FileError:
            repoSize = "0"
            repoDate = "Error"
         else:
            repoSize = rdw_helpers.formatFileSizeStr(repoHistory.size)
            repoDate = repoHistory.date.getDisplayString()
         repoList.append({ "repoName" : userRepo,
                           "repoSize" : repoSize,
                           "repoDate" : repoDate,
                           "repoBrowseUrl" : self.buildBrowseUrl(userRepo, "/", False),
                           "repoHistoryUrl" : self.buildHistoryUrl(userRepo) })
      page = page + self.compileTemplate("repo_listing.html", title="browse", repos=repoList)
      page = page + self.endPage()
      return page
コード例 #13
0
    def getParmsForPage(self,
                        root,
                        repos,
                        allowRepoDeletion=False,
                        message='',
                        error=''):
        repoList = []
        for userRepo in repos:
            try:
                repoHistory = librdiff.getLastBackupHistoryEntry(
                    rdw_helpers.joinPaths(root, userRepo))
            except librdiff.FileError:
                repoSize = "0"
                repoDate = "Error"
                repoList.append({
                    "repoName":
                    userRepo,
                    "repoSize":
                    repoSize,
                    "repoDate":
                    repoDate,
                    "repoBrowseUrl":
                    self.buildBrowseUrl(userRepo, "/", False),
                    "repoHistoryUrl":
                    self.buildHistoryUrl(userRepo),
                    'failed':
                    True
                })
            else:
                repoSize = rdw_helpers.formatFileSizeStr(repoHistory.size)
                if repoHistory.inProgress:
                    repoSize = "In Progress"
                repoDate = repoHistory.date.getDisplayString()
                repoList.append({
                    "repoName":
                    userRepo,
                    "repoSize":
                    repoSize,
                    "repoDate":
                    repoDate,
                    "repoBrowseUrl":
                    self.buildBrowseUrl(userRepo, "/", False),
                    "repoHistoryUrl":
                    self.buildHistoryUrl(userRepo),
                    'failed':
                    False
                })

        self._sortLocations(repoList)
        # Make second pass through list, setting the 'altRow' attribute
        for i in range(0, len(repoList)):
            repoList[i]['altRow'] = (i % 2 == 0)
        # Calculate disk usage
        diskUsage = ''
        diskUsageCommand = rdw_config.getConfigSetting('diskUsageCommand')
        if diskUsageCommand:
            diskUsage = subprocess.Popen(
                [
                    diskUsageCommand,
                    self.getUsername(),
                    self.getUserDB().getUserRoot(self.getUsername())
                ],
                stdout=subprocess.PIPE).communicate()[0]
            try:
                diskUsageNum = int(diskUsage)
            except:
                pass
            else:
                diskUsage = rdw_helpers.formatFileSizeStr(diskUsageNum)
        # Allow repository deletion?
        return {
            "title": "browse",
            "repos": repoList,
            "diskUsage": diskUsage,
            "allowRepoDeletion": allowRepoDeletion,
            "message": message,
            "error": error
        }