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 }
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
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}
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()
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
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 }
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 }
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}
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()
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()
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}
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
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 }