def createContent(self): user = self.getSessionValue('user') nodelist=model.getStatmonACL(user,'node_name') emptyMessage='''No active viewable nodes selected for user `%s' found matching: %s<br/> Please contact the site administrator for assistance with full details of the task you are trying to carry out.''' % (user,', '.join(nodelist)) if not nodelist: emptyMessage='''No viewable nodes selected for user `%s'.<br/> Please contact the site administrator for assistance with full details of the task you are trying to carry out.''' % user self.nodeTable = nodeTable = TableController(self.req,'nodes','Nodes',emptyMessage=emptyMessage) nodeTable.addHeader(TH('node_name', 'Node Name',TH.TEXT,self.linkNode,sorted=True)) nodeTable.addHeader(TH('domain_name', 'Domain Name',TH.TEXT,self.linkDomain)) nodeTable.addHeader(TH('platform_name', 'Platform',TH.TEXT,sortDesc=False)) nodeTable.addHeader(TH('node_version', 'Version',TH.NUMBER,sum=False)) nodeTable.addHeader(TH('fs_min_backup_end', 'Last Time Every Filespace on Node was Successfully Backed up',TH.DATETIME,abbr='Last Complete Backup')) #nodeTable.addHeader(TH('fs_max_backup_end', 'Most Recent Time any Single Filespace on Node was Successfully Backed up',TH.DATETIME,abbr='Most Recent Backup')) #nodeTable.addHeader(TH('logical_bytes_bkup', 'Total Backup',TH.BYTES)) #nodeTable.addHeader(TH('logical_bytes_arch', 'Total Archive',TH.BYTES)) nodeTable.addHeader(TH('logical_total', 'Total Backup + Total Archive',TH.BYTES,dbOrder=False,abbr='Total Storage')) nodes = model.getNodes( nodelist=nodelist, orderby=nodeTable.getOrderBy() ) for i in nodes: if not i.platform_name: i['platform_name'] = 'Unknown' i['logical_total'] = i.logical_bytes_arch+i.logical_bytes_bkup nodeTable.addRow(**i)
def createContent(self): self.days = [] # List container for all days recorded self.hosts = [] # List of all hosts recorded start, end = self.getStartEnd('historystart','endyesterday') schedules = model.getBackupHistory(start) schedules.sort(key=lambda x: x['nodename']) hosts = core.utils.DefaultDict( [] ) # We need to reformat start to a datetime object. self.day = day = datetime.timedelta(days=1) user = self.getSessionValue('user') nodelist=model.getStatmonACL(user,'node_name') nodes = model.getNodes( nodelist=nodelist ) self.nodeMap = {} for i in nodes: self.nodeMap[i.node_name] = i i = start last_success = {} while i <= end: self.days.append(i) i = i + day for i in schedules: if not self.nodeMap.has_key(i.nodename): continue hosts[i.nodename].append( i ) for host, records in hosts.iteritems(): self.hosts.append(host) log = core.utils.DefaultDict( 'U' ) for i in records: if i['msgno'] == 2507: ls = max( self.parseDate(i['date_time']), last_success.get(host,None)) last_success[host] = ls if log[ self.parseDate( i['date_time'] ) ] == 'N': i['successful'] = 'N' else: i['successful'] = 'Y' elif i['msgno'] == 2579: i['successful'] = 'N' elif i['msgno'] == 2578: i['successful'] = 'M' else: i['successful'] = 'U' log[ self.parseDate( i['date_time'] ) ] = i['successful'] i = start while i < end: log[ self.parseDate(i)] = log[ self.parseDate(i)] i = i + day hosts[host] = log self.hostMap = hosts self.hosts.sort(key=lambda x: last_success.get(x,None) ) self.last_success = last_success self.days.sort()
def createContent(self): start, end = self.getStartEnd('graphstart','graphend') params = self.params user = self.getSessionValue('user') params['nodelist'] = model.getStatmonACL(user,'node_name') params['domainfilter'] = '*' params['graphstart'] = start params['graphend'] = end self.params['imagewidth'] = '411' # ca 41em self.graphNodeCount = grapher.NodeCount(**params) self.graphDailyRestore = grapher.DailyRestore(**params) self.graphDailyBackup = grapher.DailyBackup(**params) self.graphTotalArchive = grapher.TotalArchive(**params) self.graphTotalBackup = grapher.TotalBackup(**params) self.graphTransferSpeed = grapher.TransferBackupSpeed(**params) self.graphSessionDuration = grapher.SessionBackupDuration(**params) self.graphSessionCount = grapher.SessionBackupCount(**params)
def createContent(self): update, user = self.processInputs(allowBlankUser=False) updateNodes = StringToBool(self.getField('updateNodes')) # checked="checked" jsScript = '''<input class="checkbox" type="checkbox" name="_ALL_" onchange="SetAllCheckBoxes(this,this.checked);"/>''' extraFooter = '''<input class="submit commit" value="Add/Update User" type="submit">''' self.nodeTable = nodeTable = TableController(self.req,'nodes','Nodes',emptyMessage='No Matching Nodes Found',extraFooter=extraFooter,extraFooterClass='button') nodeTable.addHeader(TH('show_hide', jsScript,TH.HTML,sortable=False,escapeName=False)) #nodeTable.addHeader(TH('view', 'View',TH.TEXT)) nodeTable.addHeader(TH('node_name', 'Node Name',TH.TEXT,self.linkNode,sorted=True)) nodeTable.addHeader(TH('domain_name', 'Domain Name',TH.TEXT,self.linkDomain)) nodeTable.addHeader(TH('platform_name', 'Platform',TH.TEXT,sortDesc=False)) nodeTable.addHeader(TH('node_version', 'Version',TH.NUMBER,sum=False)) nodeTable.addHeader(TH('contact', 'Contact',TH.TEXT)) self.addHiddenValue('user',user) domainfilter = self.processInput(self.standardInputs['domain']) nodefilter = self.processInput(self.standardInputs['node']) # TODO: ehrm.. something contacts = map( lambda x: (x['contact'],'%s (%d)' % (x['contact'],x['count'])), model.getAnzaContacts() ) contactfilter = self.processInput(II('contact','Contact',II.DROPDOWN,options=contacts,allowBlank=True,blankVal='')) currentOpts = [('','-'),('1','Currently Seen'),('2','Currently Not Seen')] current = self.processInput(II('current','User Nodes',II.DROPDOWN,options=currentOpts,allowBlank=True,blankVal='')) invertOpts = [('','No'),('1','Yes')] invert = self.processInput(II('invert','Invert Result',II.DROPDOWN,options=invertOpts,allowBlank=True,blankVal='')) aclNodes = {} nodelist = [] if user: for node in model.getStatmonACL(user,'node_name'): aclNodes[node] = True if current: nodelist.append(node) if not current: nodelist = None nodes = model.getNodes( nodefilter=nodefilter, nodelist=nodelist, domainfilter=domainfilter, contactfilter=contactfilter, orderby=nodeTable.getOrderBy(), invert=invert, invertNodelist=(current=='2'), ) protected = model.getNodes( nodefilter=nodefilter, nodelist=nodelist, domainfilter=domainfilter, contactfilter=contactfilter, invert=not invert, invertNodelist=(current=='2'), ) newAcl = {} if protected: self.inputHidden = False for node in protected: if aclNodes.has_key(node.node_name): newAcl[node.node_name] = True for node in nodes: checkname = '_%s_' % node.node_name old = checked = aclNodes.get(node.node_name,False) if updateNodes: checked = bool(self.getField(checkname,False)) if checked: newAcl[node.node_name] = True node['oddevenclass'] = 'Checked' if not update and (old != checked): node['oddevenclass'] = 'Pending' check = '' if checked: check = 'checked="checked"' node['show_hide'] = '''<input class="checkbox" name="%s" type="checkbox" %s/>''' % (checkname, check) nodeTable.addRow(**node) if updateNodes: if update: intersect = {} deleted = {} added = {} union = {} for node in newAcl.keys(): union[node] = True if aclNodes.has_key(node): intersect[node] = True else: added[node] = True for node in aclNodes.keys(): union[node] = True if newAcl.has_key(node): intersect[node] = True else: deleted[node] = True self.addMessage('Node list updated: <span class="varible">%d</span> nodes affected, <span class="varible">%d</span> unchanged, <span class="varible">%d</span> added and <span class="varible">%d</span> deleted.' % (len(union),len(intersect),len(added),len(deleted))) model.updateStatmonACL(user,'node_name',newAcl) else: self.addMessage('Node list changes in red not applied, see above error.')