Issue #2162: Add performance logging for GFE edit area query evaluation.

Change-Id: I916750fd00549dc53b1dd645792c04f4f63aa338

Former-commit-id: 11384d2198 [formerly ed39a866f0] [formerly 07312fe01f] [formerly 98f48e5a64 [formerly 07312fe01f [formerly 7d24f69078e324c56db448f293d3094df83f5c34]]]
Former-commit-id: 98f48e5a64
Former-commit-id: 0527b1c234a834d22bfd7b3815bbcd2f2a5ee8ef [formerly 0b8a48b12e]
Former-commit-id: ffa45d26d9
This commit is contained in:
David Gillingham 2013-08-12 12:17:49 -05:00
parent b886cddc80
commit ef8d1ab050

View file

@ -17,9 +17,24 @@
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for # See the AWIPS II Master Rights File ("Master Rights File.pdf") for
# further licensing information. # further licensing information.
## ##
##
#
# SOFTWARE HISTORY
#
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# Aug 12, 2013 2162 dgilling Add performance logging for
# query evaluation.
########################################################################
import numpy, copy, string, time, re, sys import numpy, copy, string, time, re, sys
#import AFPS
#from numpy import * from com.raytheon.uf.common.status import PerformanceStatus
from com.raytheon.uf.common.time.util import TimeUtil
PERF_LOG = PerformanceStatus.getHandler("GFE:");
class Query: class Query:
def mask(self, wx, query, isreg=0): def mask(self, wx, query, isreg=0):
@ -99,9 +114,14 @@ class Query:
self._fcst = self._client[fcst[0]] self._fcst = self._client[fcst[0]]
self._time = time.time() self._time = time.time()
def eval(self, str): def eval(self, queryStr):
co, glob, loc = self.getEval(str) timer = TimeUtil.getTimer()
return eval(co, glob, loc) timer.start()
co, glob, loc = self.getEval(queryStr)
area = eval(co, glob, loc)
timer.stop()
PERF_LOG.logDuration("Executing edit area query [" + queryStr + "]", timer.getElapsedTime())
return area
def getTime(self): def getTime(self):
return self._time return self._time
@ -154,22 +174,35 @@ class Query:
rval['contains'] = self.contains rval['contains'] = self.contains
fcstParms = self._fcst.keys() fcstParms = self._fcst.keys()
editAreas = self._client.editAreaNames() editAreas = self._client.editAreaNames()
timer = TimeUtil.getTimer()
for name in names: for name in names:
timer.reset()
timer.start()
if name in fcstParms: if name in fcstParms:
rval[name] = self.getGrid(self._fcst[name]) rval[name] = self.getGrid(self._fcst[name])
timer.stop()
PERF_LOG.logDuration("Retrieving grid for Parm [" + name + "]", timer.getElapsedTime())
elif name + "_SFC" in fcstParms: elif name + "_SFC" in fcstParms:
rval[name] = self.getGrid(self._fcst[name + "_SFC"]) rval[name] = self.getGrid(self._fcst[name + "_SFC"])
timer.stop()
PERF_LOG.logDuration("Retrieving grid for Parm [" + name + "_SFC]", timer.getElapsedTime())
elif name in editAreas: elif name in editAreas:
ea = self._client.getEditArea(name) ea = self._client.getEditArea(name)
if type(ea) == type(""): if type(ea) == type(""):
ea = self.eval(ea) ea = self.eval(ea)
rval[name] = ea rval[name] = ea
timer.stop()
PERF_LOG.logDuration("Retrieving edit area [" + name + "]", timer.getElapsedTime())
elif string.lower(name) == 'topo': elif string.lower(name) == 'topo':
rval[name] = self._client.getTopo() rval[name] = self._client.getTopo()
timer.stop()
PERF_LOG.logDuration("Retrieving topo grid", timer.getElapsedTime())
else: else:
tmp = self.getParm(name) tmp = self.getParm(name)
if tmp is not None: if tmp is not None:
rval[name] = self.getGrid(tmp) rval[name] = self.getGrid(tmp)
timer.stop()
PERF_LOG.logDuration("Retrieving grid for Parm [" + name + "]", timer.getElapsedTime())
return rval return rval
def willRecurse(self, name, str): def willRecurse(self, name, str):
@ -180,8 +213,23 @@ class Query:
return 1 return 1
return 0 return 0
def getEval(self, str): def getEval(self, queryStr):
co, names = self.getCode(str) timer = TimeUtil.getTimer()
timer.start()
co, names = self.getCode(queryStr)
timer.stop()
PERF_LOG.logDuration("Compiling edit area query [" + queryStr + "]", timer.getElapsedTime())
timer.reset()
timer.start()
loc = self.getLocals(names) loc = self.getLocals(names)
timer.stop()
PERF_LOG.logDuration("Retrieving local variables for edit area query [" + queryStr + "]", timer.getElapsedTime())
timer.reset()
timer.start()
glob = copy.copy(getattr(numpy, '__dict__')) glob = copy.copy(getattr(numpy, '__dict__'))
timer.stop()
PERF_LOG.logDuration("Creating global variables for edit area query [" + queryStr + "]", timer.getElapsedTime())
return co, glob, loc return co, glob, loc