-added methods to help scp files to / from Remotes
[tests.git] / qaapi / qa / logger.py
1 import os
2 import traceback
3 import time
4 import sys
5
6 class Logfile:
7     """
8     Represents a logfile. Used to write data to a file. e.g.
9
10         logfile = Logfile('filename')
11         print >> logfile, data          
12     """         
13     def __init__(self, filename, date_in_filename = True):
14         if date_in_filename:
15             if filename.find(".log") > -1:
16                 filename = filename.split(".log")[0] 
17             localtime = time.localtime()
18             (year, month, day) = localtime[:3]
19             filename = "%(filename)s-%(year)s.%(month)s.%(day)s.log" % locals()   
20         self.filename = filename
21
22     def write(self, data):
23         try:
24             fd = os.open(self.filename, os.O_WRONLY | os.O_CREAT | os.O_APPEND, 0644)
25             os.write(fd, '%s' % data)
26             os.close(fd)
27         except OSError:
28             sys.stderr.write(data)
29             sys.stderr.flush()
30
31 log_filename = '/var/log/qaapi.log'
32 logfile = Logfile(log_filename)
33
34 def log(method, method_name = None, \
35         log_filename = 'system.log', errorlog_filename = 'system_error.log'):
36     """
37     Logs whether the specified method completed successfully or not and 
38     returns the method result. Use as a decorator, e.g.,
39         
40         @log
41         def foo(...):
42             ...
43         
44     Or:
45         def foo(...):
46             ...
47         foo = log(foo)
48
49     Or:
50         result = log(foo)(...)                  
51
52     """
53     logfile = Logfile(log_filename)
54     error_logfile = Logfile(errorlog_filename)                  
55     
56     if method_name is None:
57         method_name = method.__name__
58     
59     def wrapper(*args, **kwds):
60         
61         print >> logfile, method_name + ": ",
62         try:
63             #print >> logfile, args, 
64             result = method(*args, **kwds)
65             print >> logfile, " [OK]"
66         except:
67             print >>logfile, " [FAILED]"
68             print >> error_logfile, "%s: %s\n" % (method_name, traceback.format_exc())
69             raise
70
71     return wrapper
72