Ejemplo n.º 1
0
	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)
Ejemplo n.º 2
0
	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()
Ejemplo n.º 3
0
	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)
Ejemplo n.º 4
0
	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.')