From: <ke...@us...> - 2006-07-28 13:20:33
|
Revision: 3337 Author: kevca Date: 2006-07-28 06:20:13 -0700 (Fri, 28 Jul 2006) ViewCVS: http://svn.sourceforge.net/mailmanager/?rev=3337&view=rev Log Message: ----------- Fixing graph generation for Reporting performance (#1521220) Fixing adding of version history Modified Paths: -------------- MailManager/branches/RELENG_2_1/Reporting.py MailManager/branches/RELENG_2_1/migrations/__init__.py MailManager/branches/RELENG_2_1/migrations/v2_1/__init__.py MailManager/branches/RELENG_2_1/sql/v2_1/addVersionHistory.zsql MailManager/branches/RELENG_2_1/tests/testReportingCache.py Modified: MailManager/branches/RELENG_2_1/Reporting.py =================================================================== --- MailManager/branches/RELENG_2_1/Reporting.py 2006-07-28 12:31:43 UTC (rev 3336) +++ MailManager/branches/RELENG_2_1/Reporting.py 2006-07-28 13:20:13 UTC (rev 3337) @@ -1004,16 +1004,25 @@ log('%sGenerating Report for %s %s' % (self.getLogName(), section, subsection), logging.DEBUG, 'reporting.engine') + # Include live statistics should the from date be before tonight, and + # the to date be after this morning. This means that the date range + # covers some part of today. Date ranges with from > to aren't worth + # considering. + now = self.sql.getCurrentTime()[0].now yesterday = now - 1 this_morning = DateTime.DateTime(yesterday.strftime('%Y-%m-%d 00:00')) + tonight = DateTime.DateTime(yesterday.strftime('%Y-%m-%d 23:59')) + live_start_date = this_morning + today_included = False - if report_to >= this_morning: + if report_to >= this_morning and report_from <= tonight: log('%sReport include live statistics' % (self.getLogName()), logging.DEBUG, 'reporting.engine') today_included = True + if not (report_from <= this_morning): + live_start_date = report_from - ## Snapshot ######################################################### if section == 'snapshot': @@ -1133,9 +1142,9 @@ res = self.sql.getReportCacheReceived( sqv_from_date = report_from.HTML4(), sqv_to_date = report_to.HTML4(), - sqv_today_date = this_morning.HTML4(), + sqv_today_date = live_start_date.HTML4(), sqv_subsection = subsection, - sqv_include_live_stats = today_included and self.sql_truevar or self.sql_falsevar, + sqv_include_live_stats = today_included, ) if subsection == 'account': @@ -1169,9 +1178,9 @@ res = self.sql.getReportCachePerformance ( sqv_from_date = report_from.HTML4(), sqv_to_date = report_to.HTML4(), - sqv_today_date = this_morning.HTML4(), + sqv_today_date = live_start_date.HTML4(), sqv_subsection = subsection, - sqv_include_live_stats = today_included and self.sql_truevar or self.sql_falsevar, + sqv_include_live_stats = today_included, ) if subsection == 'account': @@ -1201,8 +1210,8 @@ res = self.sql.getReportCacheTargets( sqv_from_date = report_from.HTML4(), sqv_to_date = report_to.HTML4(), - sqv_today_date = this_morning.HTML4(), - sqv_include_live_stats = today_included and self.sql_truevar or self.sql_falsevar, + sqv_today_date = live_start_date.HTML4(), + sqv_include_live_stats = today_included, ) results = [(stat.account, self.formatTargetEn(stat.target_time), @@ -1370,39 +1379,17 @@ return output - def generateGraph(self, section='', subsection='', report_from=None, report_to=None, period='daily', graphkey = ''): - """ Generate HTML structure to display a graph """ + def generateGraph(self, section='', subsection='', + report_from=None, report_to=None, + period='daily', graphkey = ''): + """ Generate HTML structure to display a graph + """ - assigned = '' - account_id = '' - category0 = '' - category1 = '' - category2 = '' - - if section == 'received': - if subsection == 'account': - account_id = graphkey - if subsection == 'user': - assigned = graphkey - if subsection == 'category0': - category0 = graphkey - if subsection == 'category1': - category0 = graphkey - if subsection == 'category2': - category0 = graphkey - - x = self.generateReportData(section=section, subsection=subsection, - report_from=report_from, report_to=report_to) - # getGraphDetails returns {'max': max, 'scale': scale, 'label': label, 'values': results} results = self.getGraphDetails( - report_from, report_to, - account_id = account_id, - assigned = assigned, - category0 = category0, - category1 = category1, - category2 = category2 - ) + section=section, subsection=subsection, + report_from=report_from, report_to=report_to + ) vals = results['values'] scale = results['scale'] @@ -1439,8 +1426,7 @@ security.declareProtected('MailManager Reports', 'getGraphDetails') - def getGraphDetails(self, report_from, report_to, account_id='', - assigned='', category0='', category1='', category2=''): + def getGraphDetails(self, report_from, report_to, subsection, graphkey): """ Return details for producing graphs by accounts, users or category. First return the maximum value to be displayed on the y-axis, @@ -1459,16 +1445,6 @@ @type report_from: DateTime @param report_to: end date for search @type report_to: DateTime - @param account_id: Restrict list to a named account - @type account_id: string - @param assigned: Restrict list to a named user - @type assigned: string - @param category0: Restrict search to tickets with a given category - @type category0: string - @param category1: Restrict search to tickets with a given category - @type category1: string - @param category1: Restrict search to tickets with a given category - @type category1: string @return: dict of max, scale, label, values @rtype: dict @@ -1490,18 +1466,19 @@ month_start = DateTime.DateTime(year, month, 1, 0, 0, 0) month_end = DateTime.DateTime(year, month, calendar.monthrange(year, month)[1], 23, 59, 59) - val = self.sql.listTickets( - sqv_count=1, - sqv_from_date=month_start.HTML4(), - sqv_to_date=month_end.HTML4(), - sqv_account_id=account_id, - sqv_assigned=assigned, - sqv_category0=category0, - sqv_category1=category1, - sqv_category2=category2)[0][0] - results.append(val) - if val > max: - max = val + (header, res) = self.generateReportData( + section = 'received', + subsection = subsection, + report_from = month_start, + report_to = month_end, + ) + for item in res: + value = 0 + if item[0] == graphkey: + value = item[1] + if value > max: + max = value + results.append(value) else: # Month's report broken down by days. label = 'Day' @@ -1509,18 +1486,20 @@ for day in range(1, calendar.monthrange(year, month)[1] + 1): day_start = DateTime.DateTime(year, month, day, 0, 0 , 0) day_end = DateTime.DateTime(year, month, day, 23, 59, 59) - val = self.sql.listTickets( - sqv_count=1, - sqv_from_date=day_start.HTML4(), - sqv_to_date=day_end.HTML4(), - sqv_account_id=account_id, - sqv_assigned=assigned, - sqv_category0=category0, - sqv_category1=category1, - sqv_category2=category2)[0][0] - results.append(val) - if val > max: - max = val + + (header, res) = self.generateReportData( + section = 'received', + subsection = subsection, + report_from = day_start, + report_to = day_end, + ) + for item in res: + value = 0 + if item[0] == graphkey: + value = item[1] + if value > max: + max = value + results.append(value) # Now calculate scale value so graph isn't too small or too big. if max > 0: Modified: MailManager/branches/RELENG_2_1/migrations/__init__.py =================================================================== --- MailManager/branches/RELENG_2_1/migrations/__init__.py 2006-07-28 12:31:43 UTC (rev 3336) +++ MailManager/branches/RELENG_2_1/migrations/__init__.py 2006-07-28 13:20:13 UTC (rev 3337) @@ -56,14 +56,17 @@ logging.INFO, 'migration') # Put exception wrapper here + + mversion = self.mversion + migrationParams['targetstate'] = migrations[self.mversion]['targetstate'] migrations[self.mversion]['method'](self, migrationParams) - if migrations[self.mversion].get('logupgrade', False): + if migrations[mversion].get('logupgrade', False): # Log the upgrade self.sql.addVersionHistory( sqv_mversion = self.mversion, - sqv_version = self.version + sqv_version_string = self.version ) Modified: MailManager/branches/RELENG_2_1/migrations/v2_1/__init__.py =================================================================== --- MailManager/branches/RELENG_2_1/migrations/v2_1/__init__.py 2006-07-28 12:31:43 UTC (rev 3336) +++ MailManager/branches/RELENG_2_1/migrations/v2_1/__init__.py 2006-07-28 13:20:13 UTC (rev 3337) @@ -365,7 +365,7 @@ def migrate_v2_1_10_v2_1_11(self, migrationParams): """ Add in a revision history table """ - self.sql.migrateAddVersionHistory() + self.sql.migrateCreateVersionHistory() # Update the mversion to show we are complete self.mversion = 'v2_1_11' Modified: MailManager/branches/RELENG_2_1/sql/v2_1/addVersionHistory.zsql =================================================================== --- MailManager/branches/RELENG_2_1/sql/v2_1/addVersionHistory.zsql 2006-07-28 12:31:43 UTC (rev 3336) +++ MailManager/branches/RELENG_2_1/sql/v2_1/addVersionHistory.zsql 2006-07-28 13:20:13 UTC (rev 3337) @@ -10,8 +10,8 @@ version_string, change_date ) VALUES ( - sqv_mversion, - sqv_version_string, + <dtml-sqlvar sqv_mversion type="nb">, + <dtml-sqlvar sqv_version_string type="nb">, <dtml-var sql_now> ) Modified: MailManager/branches/RELENG_2_1/tests/testReportingCache.py =================================================================== --- MailManager/branches/RELENG_2_1/tests/testReportingCache.py 2006-07-28 12:31:43 UTC (rev 3336) +++ MailManager/branches/RELENG_2_1/tests/testReportingCache.py 2006-07-28 13:20:13 UTC (rev 3337) @@ -88,11 +88,53 @@ def reportingCacheTests(self): # self.snapshotCacheTest() # self.compressionTest() +# self.reportCacheTest() + self.graphGenTest() - self.reportCacheTest() + def graphGenTest(self): + """ Generate the cached reports from the general reports pages (as + opposed to just the snapshot cache). + """ + self.mmobj.setStartDate(mx.DateTime.Parser.DateTimeFromString("20010101 00:00")) + if self.dbplatform == 'postgres': + self.mmobj.sql_now = "CAST ('2001-01-01 12:00' AS TIMESTAMP)" + elif self.dbplatform == 'mysql': + self.mmobj.sql_now = "(SELECT CAST('2001-01-01 12:00' AS DATETIME))" + else: + raise NotImplementedError("testReportingCache isn't implemented for platform %s yet" % self.dbplatform) + self.mmobj.populateDataset('acmestatic') + + self.mmobj.setStartDate(mx.DateTime.Parser.DateTimeFromString("20010101 00:00")) + if self.dbplatform == 'postgres': + self.mmobj.sql_now = "CAST ('2001-01-02 12:00' AS TIMESTAMP)" + elif self.dbplatform == 'mysql': + self.mmobj.sql_now = "(SELECT CAST('2001-01-02 12:00' AS DATETIME))" + else: + raise NotImplementedError("testReportingCache isn't implemented for platform %s yet" % self.dbplatform) + + self.mmobj.rebuildReportCache() + + graphdata = self.mmobj.Reports.getGraphDetails( + report_from=DateTime.DateTime('2001-01-01'), + report_to=DateTime.DateTime('2001-01-31'), + subsection='account', + graphkey='support@acmewidgets.example') + + print graphdata + + (header, res) = self.mmobj.Reports.generateReportData( + section = 'received', + subsection = 'account', + report_from = DateTime.DateTime('2001-01-01'), + report_to = DateTime.DateTime('2001-01-31'), + ) + + pprint.pprint((header,res)) + + def reportCacheTest(self): """ Generate the cached reports from the general reports pages (as opposed to just the snapshot cache). This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |