pymtt
 All Classes Namespaces Files Functions Variables Groups
Logger.py
Go to the documentation of this file.
1 from __future__ import print_function
2 from builtins import str
3 #!/usr/bin/env python
4 #
5 # Copyright (c) 2015-2018 Intel, Inc. All rights reserved.
6 # $COPYRIGHT$
7 #
8 # Additional copyrights may follow
9 #
10 # $HEADER$
11 #
12 
13 import sys
14 import datetime
15 from BaseMTTUtility import *
16 
17 ## @addtogroup Utilities
18 # @{
19 # @section Logger
20 # Log results and provide debug output when directed
21 # @}
23  def __init__(self):
24  BaseMTTUtility.__init__(self)
25  self.fh = sys.stdout
26  self.results = []
27  self.options = {}
28  self.printout = False
29  self.timestamp = False
30  self.cmdtimestamp = False
31  self.sectimestamp = False
32  self.timestampeverything = False
33  self.stage_start = {}
34 
35  def reset(self):
36  self.results = []
37  self.stage_start = {}
38 
39  def print_name(self):
40  return "Logger"
41 
42  def print_options(self, testDef, prefix):
43  lines = testDef.printOptions(self.options)
44  for line in lines:
45  print(prefix + line)
46  return
47 
48  def open(self, testDef):
49  # init the logging file handle
50  try:
51  if testDef.options['logfile'] is not None:
52  self.fh = open(testDef.options['logfile'], 'w')
53  else:
54  self.fh = sys.stdout
55  except KeyError:
56  self.fh = sys.stdout
57  # define the verbosity/debug flags
58  try:
59  if testDef.options['verbose']:
60  self.printout = True
61  except KeyError:
62  pass
63  try:
64  if testDef.options['extraverbose']:
65  self.printout = True
66  self.timestamp = True
67  self.sectimestamp = True
68  self.cmdtimestamp = True
69  self.timestampeverything = True
70  except KeyError:
71  pass
72  try:
73  if testDef.options['debug']:
74  self.printout = True
75  except KeyError:
76  pass
77  try:
78  if testDef.options['dryrun']:
79  self.printout = True
80  except KeyError:
81  pass
82  # define the time flags
83  try:
84  if testDef.options['sectime']:
85  self.timestamp = True
86  self.sectimestamp = True
87  except KeyError:
88  pass
89  try:
90  if testDef.options['cmdtime']:
91  self.timestamp = True
92  self.cmdtimestamp = True
93  except KeyError:
94  pass
95  try:
96  if testDef.options['time']:
97  self.timestamp = True
98  self.cmdtimestamp = True
99  self.sectimestamp = True
100  except KeyError:
101  pass
102  return
103 
104  def stage_start_print(self, stagename, pluginname):
105  self.stage_start[stagename] = datetime.datetime.now()
106  if self.printout:
107  print(("%sStart executing [%s] plugin=%s" % ("%s "%self.stage_start[stagename] if self.sectimestamp else "",
108  stagename, pluginname)), file=self.fh)
109 
110  def stage_end_print(self, stagename, pluginname, log):
111  stage_end = datetime.datetime.now()
112  if self.printout:
113  print(("%sDone executing [%s] plugin=%s elapsed=%s" % ("%s "%stage_end if self.sectimestamp else "",
114  stagename, pluginname, stage_end-self.stage_start[stagename])), file=self.fh)
115  log['time'] = (stage_end-self.stage_start[stagename]).total_seconds()
116  log['time_start'] = self.stage_start[stagename]
117  log['time_end'] = stage_end
118 
119  def verbose_print(self, string, timestamp=None):
120  if self.printout:
121  print(("%s%s" % ("%s "%(datetime.datetime.now() if timestamp is None else timestamp) \
122  if (self.timestampeverything or timestamp) else "", string)), file=self.fh)
123  return
124 
125  def timestamp(self):
126  if self.timestamp:
127  return datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
128 
129  def close(self):
130  if self.fh is not sys.stdout:
131  self.fh.close()
132  return
133 
134  def logResults(self, title, result):
135  self.verbose_print("LOGGING results for " + title)
136  self.results.append(result)
137  return
138 
139  def outputLog(self):
140  # cycle across the logged results and output
141  # them to the logging file
142  for result in self.results:
143  try:
144  if result['status'] is not None:
145  print("Section " + result['section'] + ": Status " + str(result['status']), file=self.fh)
146  if 0 != result['status']:
147  try:
148  print(" " + result['stderr'], file=self.fh)
149  except KeyError:
150  pass
151  except KeyError:
152  print("Section " + result['section'] + " did not return a status", file=self.fh)
153  return
154 
155  def getLog(self, key):
156  # if the key is None, then they want the entire
157  # log list
158  if key is None:
159  return self.results
160  # we have been passed the name of a section, so
161  # see if we have its log in the results
162  for result in self.results:
163  try:
164  if key == result['section']:
165  return result
166  except KeyError:
167  pass
168  # if we get here, then the key wasn't found
169  return None
def getLog
Definition: Logger.py:155
def verbose_print
Definition: Logger.py:119
def print_options
Definition: Logger.py:42
def reset
Definition: Logger.py:35
def outputLog
Definition: Logger.py:139
def stage_end_print
Definition: Logger.py:110
timestampeverything
Definition: Logger.py:32
def stage_start_print
Definition: Logger.py:104
def print_name
Definition: Logger.py:39
def open
Definition: Logger.py:48
def __init__
Definition: Logger.py:23
def logResults
Definition: Logger.py:134