diff options
Diffstat (limited to 'bitbake/lib/bb/cooker.py')
-rw-r--r-- | bitbake/lib/bb/cooker.py | 126 |
1 files changed, 64 insertions, 62 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index 60ee5d7c4a..b2cf0cda17 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py | |||
@@ -42,6 +42,8 @@ import subprocess | |||
42 | import errno | 42 | import errno |
43 | import prserv.serv | 43 | import prserv.serv |
44 | import pyinotify | 44 | import pyinotify |
45 | import json | ||
46 | import pickle | ||
45 | 47 | ||
46 | logger = logging.getLogger("BitBake") | 48 | logger = logging.getLogger("BitBake") |
47 | collectlog = logging.getLogger("BitBake.Collection") | 49 | collectlog = logging.getLogger("BitBake.Collection") |
@@ -114,6 +116,63 @@ class CookerFeatures(object): | |||
114 | return next(self._features) | 116 | return next(self._features) |
115 | 117 | ||
116 | 118 | ||
119 | class EventLogWriteHandler: | ||
120 | |||
121 | def __init__(self, cooker, eventfile): | ||
122 | # set our handler's event processor | ||
123 | self.event = self.EventWriter(cooker, eventfile) | ||
124 | |||
125 | class EventWriter: | ||
126 | def __init__(self, cooker, eventfile): | ||
127 | self.file_inited = None | ||
128 | self.cooker = cooker | ||
129 | self.eventfile = eventfile | ||
130 | self.event_queue = [] | ||
131 | |||
132 | def init_file(self): | ||
133 | try: | ||
134 | # delete the old log | ||
135 | os.remove(self.eventfile) | ||
136 | except: | ||
137 | pass | ||
138 | |||
139 | # write current configuration data | ||
140 | with open(eventfile, "w") as f: | ||
141 | f.write("%s\n" % json.dumps({ "allvariables" : self.cooker.getAllKeysWithFlags(["doc", "func"])})) | ||
142 | |||
143 | def write_event(self, event): | ||
144 | with open(self.eventfile, "a") as f: | ||
145 | try: | ||
146 | f.write("%s\n" % json.dumps({"class":event.__module__ + "." + event.__class__.__name__, "vars":json.dumps(pickle.dumps(event)) })) | ||
147 | except Exception as e: | ||
148 | import traceback | ||
149 | print(e, traceback.format_exc()) | ||
150 | |||
151 | |||
152 | def send(self, event): | ||
153 | event_class = event.__module__ + "." + event.__class__.__name__ | ||
154 | |||
155 | # init on bb.event.BuildStarted | ||
156 | if self.file_inited is None: | ||
157 | if event_class == "bb.event.BuildStarted": | ||
158 | self.init_file() | ||
159 | self.file_inited = True | ||
160 | |||
161 | # write pending events | ||
162 | for e in self.event_queue: | ||
163 | self.write_event(e) | ||
164 | |||
165 | # also write the current event | ||
166 | self.write_event(event) | ||
167 | |||
168 | else: | ||
169 | # queue all events until the file is inited | ||
170 | self.event_queue.append(event) | ||
171 | |||
172 | else: | ||
173 | # we have the file, just write the event | ||
174 | self.write_event(event) | ||
175 | |||
117 | #============================================================================# | 176 | #============================================================================# |
118 | # BBCooker | 177 | # BBCooker |
119 | #============================================================================# | 178 | #============================================================================# |
@@ -151,6 +210,11 @@ class BBCooker: | |||
151 | 210 | ||
152 | self.initConfigurationData() | 211 | self.initConfigurationData() |
153 | 212 | ||
213 | # we log all events to a file if so directed | ||
214 | if self.configuration.writeeventlog: | ||
215 | # register the log file writer as UI Handler | ||
216 | bb.event.register_UIHhandler(EventLogWriteHandler(self, self.configuration.writeeventlog)) | ||
217 | |||
154 | self.inotify_modified_files = [] | 218 | self.inotify_modified_files = [] |
155 | 219 | ||
156 | def _process_inotify_updates(server, notifier_list, abort): | 220 | def _process_inotify_updates(server, notifier_list, abort): |
@@ -301,68 +365,6 @@ class BBCooker: | |||
301 | if consolelog: | 365 | if consolelog: |
302 | self.data.setVar("BB_CONSOLELOG", consolelog) | 366 | self.data.setVar("BB_CONSOLELOG", consolelog) |
303 | 367 | ||
304 | # we log all events to a file if so directed | ||
305 | if self.configuration.writeeventlog: | ||
306 | import json, pickle | ||
307 | DEFAULT_EVENTFILE = self.configuration.writeeventlog | ||
308 | class EventLogWriteHandler(): | ||
309 | |||
310 | class EventWriter(): | ||
311 | def __init__(self, cooker): | ||
312 | self.file_inited = None | ||
313 | self.cooker = cooker | ||
314 | self.event_queue = [] | ||
315 | |||
316 | def init_file(self): | ||
317 | try: | ||
318 | # delete the old log | ||
319 | os.remove(DEFAULT_EVENTFILE) | ||
320 | except: | ||
321 | pass | ||
322 | |||
323 | # write current configuration data | ||
324 | with open(DEFAULT_EVENTFILE, "w") as f: | ||
325 | f.write("%s\n" % json.dumps({ "allvariables" : self.cooker.getAllKeysWithFlags(["doc", "func"])})) | ||
326 | |||
327 | def write_event(self, event): | ||
328 | with open(DEFAULT_EVENTFILE, "a") as f: | ||
329 | try: | ||
330 | f.write("%s\n" % json.dumps({"class":event.__module__ + "." + event.__class__.__name__, "vars":json.dumps(pickle.dumps(event)) })) | ||
331 | except Exception as e: | ||
332 | import traceback | ||
333 | print(e, traceback.format_exc()) | ||
334 | |||
335 | |||
336 | def send(self, event): | ||
337 | event_class = event.__module__ + "." + event.__class__.__name__ | ||
338 | |||
339 | # init on bb.event.BuildStarted | ||
340 | if self.file_inited is None: | ||
341 | if event_class == "bb.event.BuildStarted": | ||
342 | self.init_file() | ||
343 | self.file_inited = True | ||
344 | |||
345 | # write pending events | ||
346 | for e in self.event_queue: | ||
347 | self.write_event(e) | ||
348 | |||
349 | # also write the current event | ||
350 | self.write_event(event) | ||
351 | |||
352 | else: | ||
353 | # queue all events until the file is inited | ||
354 | self.event_queue.append(event) | ||
355 | |||
356 | else: | ||
357 | # we have the file, just write the event | ||
358 | self.write_event(event) | ||
359 | |||
360 | # set our handler's event processor | ||
361 | event = EventWriter(self) # self is the cooker here | ||
362 | |||
363 | # register the log file writer as UI Handler | ||
364 | bb.event.register_UIHhandler(EventLogWriteHandler()) | ||
365 | |||
366 | # | 368 | # |
367 | # Copy of the data store which has been expanded. | 369 | # Copy of the data store which has been expanded. |
368 | # Used for firing events and accessing variables where expansion needs to be accounted for | 370 | # Used for firing events and accessing variables where expansion needs to be accounted for |