Chromium Code Reviews| Index: recipe_engine/stream_logdog.py |
| diff --git a/recipe_engine/stream_logdog.py b/recipe_engine/stream_logdog.py |
| index f7835ecc0c6d2e9fad2a27b2c15d015807163134..4aec670aba8a0b858bd3bdb756d903e72436e742 100644 |
| --- a/recipe_engine/stream_logdog.py |
| +++ b/recipe_engine/stream_logdog.py |
| @@ -268,7 +268,7 @@ class StreamEngine(stream.StreamEngine): |
| def __init__(self, client=None, streamserver_uri=None, name_base=None, |
| - ignore_triggers=False, environment=None): |
| + dump_path=None, ignore_triggers=False, environment=None): |
| """Initializes a new LogDog/Annotation StreamEngine. |
| Args: |
| @@ -281,6 +281,8 @@ class StreamEngine(stream.StreamEngine): |
| None, a StreamClient will be created through probing. |
| name_base (str or None): The default stream name prefix that will be added |
| to generated LogDog stream names. If None, no prefix will be applied. |
| + dump_path (str or None): If provided, a filesystem path where the final |
| + recipe annotation protobuf binary will be dumped. |
| ignore_triggers (bool): Triggers are not supported in LogDog annotation |
| streams. If True, attempts to trigger will be silently ignored. If |
| False, they will cause a NotImplementedError to be raised. |
| @@ -292,6 +294,7 @@ class StreamEngine(stream.StreamEngine): |
| self._client = client |
| self._streamserver_uri = streamserver_uri |
| self._name_base = _StreamName(name_base) |
| + self._dump_path = dump_path |
| self._ignore_triggers = ignore_triggers |
| self._env = environment or _Environment.probe() |
| @@ -363,7 +366,7 @@ class StreamEngine(stream.StreamEngine): |
| self._check() |
| # Shut down our annotation monitor and close our annotation stream. |
| - self._annotation_monitor.flush_and_join() |
| + last_step_data = self._annotation_monitor.flush_and_join() |
| self._annotation_stream.close() |
| # Clear our client and state. We are now closed. |
| @@ -371,6 +374,11 @@ class StreamEngine(stream.StreamEngine): |
| self._client = None |
| self._astate = None |
| + # If requested, write out the last step data. |
| + if self._dump_path and last_step_data: |
| + with open(self._dump_path, 'wb') as fd: |
|
nodir
2016/09/28 23:02:22
please swap these two lines, so in the worst case
dnj
2016/09/28 23:04:11
Done.
|
| + fd.write(last_step_data) |
| + |
| def _check(self): |
| if self._astate is None: |
| return |
| @@ -511,10 +519,14 @@ class _AnnotationMonitor(object): |
| def flush_and_join(self): |
| """Flushes any remaining updates and blocks until the monitor is complete. |
| + |
| + Returns (pb.Step): The final Step protobuf, or None if no step data was |
| + sent. |
| """ |
| # Mark that we're finished and signal our event. |
| with self._lock: |
| self._flush_now_locked(datetime.datetime.now()) |
| + return self._last_flush_data |
| @property |
| def latest(self): |