~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to tests/lib/sys_mgmt/time_management.py

  • Committer: patrick crews
  • Date: 2011-01-26 21:35:28 UTC
  • mfrom: (2088.9.25 project_steve_austin)
  • mto: This revision was merged to the branch mainline in revision 2121.
  • Revision ID: gleebix@gmail.com-20110126213528-rounf54hyridrak4
Re-merge with trunk to fix make-distcheck

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#! /usr/bin/python
 
2
# -*- mode: c; c-basic-offset: 2; indent-tabs-mode: nil; -*-
 
3
# vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
 
4
#
 
5
# Copyright (C) 2010 Patrick Crews
 
6
#
 
7
"""time_management.py
 
8
   code for dealing with timing, mostly
 
9
   we want to keep track of how long certain things
 
10
   take, so we do that here
 
11
 
 
12
"""
 
13
 
 
14
# imports
 
15
import time
 
16
 
 
17
class timeRecord:
 
18
    """ data structure to keep track of execution times """
 
19
 
 
20
    def __init__(self, start_time, type):
 
21
        self.start_time = start_time
 
22
        self.stop_time = None
 
23
        self.elapsed_time = None
 
24
        self.type = type
 
25
 
 
26
    def set_stop_time(self, stop_time):
 
27
        self.stop_time = stop_time
 
28
        self.elapsed_time = self.stop_time - self.start_time
 
29
 
 
30
class timeManager:
 
31
    """ keeps track of the elapsed time for various events
 
32
        and provides access to this information as needed
 
33
 
 
34
    """
 
35
 
 
36
    def __init__(self, system_manager):
 
37
        self.skip_keys = [ 'system_manager'
 
38
                         ]
 
39
        self.debug = system_manager.debug
 
40
        self.verbose = system_manager.verbose
 
41
        self.system_manager = system_manager
 
42
        self.logging = system_manager.logging
 
43
        self.time_records = {}
 
44
  
 
45
    def start(self, key_value, type):
 
46
        """ We create a new record to keep track of
 
47
            with the key being key_value
 
48
 
 
49
            We track type as a convenience.  Not
 
50
            sure how useful it will be / long it
 
51
            will live
 
52
 
 
53
        """
 
54
 
 
55
        start_time = time.time()
 
56
        self.time_records[key_value] = timeRecord(start_time, type)
 
57
 
 
58
    def stop(self, key_value):
 
59
        """ We stop timing for key_value, and return elapsed time """
 
60
        stop_time = time.time()
 
61
        self.time_records[key_value].set_stop_time(stop_time)
 
62
        return self.time_records[key_value].elapsed_time  
 
63
 
 
64
    def summary_report(self):
 
65
        """ We do a bit o' reporting """
 
66
        records = self.sort_records_by_type()
 
67
        total_time = self.time_records['total_time'].elapsed_time
 
68
        for record_type in records.keys():
 
69
            if record_type != 'total_time': # skip this it would be silly
 
70
                type_total_time = self.get_total_time(records[record_type])
 
71
                self.logging.info("Spent %d / %d seconds on: %s(s)" % ( type_total_time
 
72
                                                                        , total_time
 
73
                                                                        , record_type.upper()
 
74
                                                                        ))
 
75
 
 
76
    def sort_records_by_type(self):
 
77
        """ We go through our records and return a dictionary
 
78
            with keys = 'type', and a list of timeRecords with that type
 
79
            as the data
 
80
 
 
81
        """
 
82
        sorted_records = {}
 
83
        for time_record in self.time_records.values():
 
84
            if time_record.type not in sorted_records:
 
85
                sorted_records[time_record.type] = [time_record]
 
86
            else:
 
87
                sorted_records[time_record.type].append(time_record)
 
88
        return sorted_records
 
89
 
 
90
    def get_total_time(self, record_list):
 
91
        """ We return the total elapsed time for
 
92
            all of the records in our record list
 
93
 
 
94
        """
 
95
       
 
96
        total_elapsed_time = 0
 
97
        for record in record_list:
 
98
            total_elapsed_time = total_elapsed_time + record.elapsed_time
 
99
        return total_elapsed_time
 
100
         
 
101
        
 
102
 
 
103