Example #1
0
def render_samples(query_params,minDate,maxDate,numRecords):
	"""
	Queries datastore for error data based on the input params
	Returns a Tuple of 2 lists of DataSamples in error state - (sensorerrors,s3errors)

	query_params = list of string tuples (param,value) to be queried for (eg ('user','stark'))
	minDate = start of date range for results
	maxDate = end of date range for results
	numRecords = number of records to query for
	"""	
	
	sensorQuery = DataSample.all()
	sensorQuery.filter('numHits =',0)
	s3Query = DataSample.all()
	s3Query.filter('s3FileStatus =',False)
	
	if(query_params):
		for param in query_params:
			#add the param:value tuple to the query if the value is not null
			if(param[1]):
				sensorQuery.filter(param[0]+' =',param[1])
				s3Query.filter(param[0]+' =',param[1])
			
	if(maxDate):
		maxdt = datetime.strptime(maxDate,'%Y-%m-%d %H:%M:%S')
		sensorQuery.filter('timeStamp <=',maxdt)
		s3Query.filter('timeStamp <=',maxdt)
	
	if(minDate):
		mindt = datetime.strptime(minDate,'%Y-%m-%d %H:%M:%S')
		sensorQuery.filter('timeStamp >=',mindt)
		s3Query.filter('timeStamp >=',mindt)
		
	if numRecords is None:
		numRecords = 500

	#get errors, grouped by timestamp desc
	sensorQuery.order('-timeStamp')
	s3Query.order('-timeStamp')
	
	sensorErrors = sensorQuery.fetch(numRecords)
	s3errors = s3Query.fetch(numRecords)
	
	return (sensorErrors,s3errors)
Example #2
0
	def get(self):
		
		#Get URL Params - default to None
		user = self.request.get('user',None)
		site = self.request.get('site',None)
		sensor = self.request.get('sensor',None)

		startDate = self.request.get('start',None)
		endDate = self.request.get('end',None)
		
		#variables to be passed to django template
		pageTitle = None
		graphName = None
		graphData = []
		s3errors = []
		sensorErrors = []
		message = None
		
		
		if user is None and site is None and sensor is None:
			#Heads up page - recent errors
			pageTitle = 'Recent System Errors'
			
			resultsTuple = render_samples(None,None,None,750)
			
			sensorErrors = resultsTuple[0]
			s3errors = resultsTuple[1]
			
			if sensorErrors is None and s3errors is None:
				message = 'No recent errors. Party on, Wayne!'
		
		else:
			#Run a search for the specified params
			
			#Dump params into pageTitle - used to log/display query
			pageTitle = 'User: '******', Site: '+site+', Sensor: '+sensor
			logging.debug('Query for:'+pageTitle)
			
			queryParams=[]
			queryParams.append(('user',user))
			queryParams.append(('site',site))
			queryParams.append(('sensor',sensor))
			
			try:
				resultsTuple = render_samples(queryParams,startDate,endDate,750)
			
				sensorErrors = resultsTuple[0]
				s3errors = resultsTuple[1]
				
				if len(sensorErrors) is 0 and len(s3errors) is 0:
					message = 'No recent errors. Party on, Garth!'
			except:
				message = 'Malformed query: please try again.'
				logging.error('Error for query: '+pageTitle)
					
			#sensor health - get recent hits if sensor has been queried for
			if sensor:
				recentHits_query = DataSample.gql("WHERE sensor = :sensorName ORDER BY timeStamp asc", sensorName=sensor)
				recentHits = recentHits_query.fetch(750)
				
				for dataPoint in recentHits:
					graphData.append((dataPoint.timeStamp,dataPoint.numHits))
				
				graphName = "Recent activity of "+sensor
			
		#dump django template values into dictionary for rendering
		template_values = {
			'pageTitle': pageTitle, #param for displaying queries - remove if not needed
			'graphName': graphName,
			'graphData': graphData,
			's3errors': s3errors,
			'sensorErrors': sensorErrors,
			'message': message
		}
		
		path = os.path.join(os.path.dirname(__file__), 'index.html')
		self.response.out.write(template.render(path, template_values))