diff options
author | Aleksey Lim <alsroot@sugarlabs.org> | 2013-11-11 21:30:20 (GMT) |
---|---|---|
committer | Aleksey Lim <alsroot@sugarlabs.org> | 2013-11-11 21:30:20 (GMT) |
commit | 5b4263185727c05d39800d00b14930a132499125 (patch) | |
tree | bbff4e4d405aba31eca9d00a791edeb3792161f3 | |
parent | e36b897cd6cf7e52370479127aa85218f6269b51 (diff) |
Commit node stats on exit
-rwxr-xr-x | sugar-network-node | 1 | ||||
-rw-r--r-- | sugar_network/model/routes.py | 1 | ||||
-rw-r--r-- | sugar_network/node/routes.py | 4 | ||||
-rw-r--r-- | sugar_network/toolkit/coroutine.py | 5 |
4 files changed, 10 insertions, 1 deletions
diff --git a/sugar-network-node b/sugar-network-node index ff10c36..cd6961a 100755 --- a/sugar-network-node +++ b/sugar-network-node @@ -97,6 +97,7 @@ class Application(application.Daemon): try: self.jobs.join() finally: + cp.close() volume.close() def shutdown(self): diff --git a/sugar_network/model/routes.py b/sugar_network/model/routes.py index 1701c69..447ff30 100644 --- a/sugar_network/model/routes.py +++ b/sugar_network/model/routes.py @@ -136,6 +136,7 @@ class FrontRoutes(object): rfile = None if request is not None: rfile = request.content_stream + if rfile is not None: coroutine.spawn(self._waiter_for_closing, rfile) while True: diff --git a/sugar_network/node/routes.py b/sugar_network/node/routes.py index 9b0e27f..57c1dff 100644 --- a/sugar_network/node/routes.py +++ b/sugar_network/node/routes.py @@ -58,6 +58,10 @@ class NodeRoutes(model.VolumeRoutes, model.FrontRoutes): self._stats = stats_node.Sniffer(volume) coroutine.spawn(self._commit_stats) + def close(self): + if self._stats is not None: + self._stats.commit() + @property def guid(self): return self._guid diff --git a/sugar_network/toolkit/coroutine.py b/sugar_network/toolkit/coroutine.py index 1e73c0b..170f445 100644 --- a/sugar_network/toolkit/coroutine.py +++ b/sugar_network/toolkit/coroutine.py @@ -286,7 +286,9 @@ def _print_exception(context, klass, value, tb): if issubclass(klass, self.NOT_ERROR + self.SYSTEM_ERROR): return + import errno import traceback + tb_repr = '\n'.join([i.rstrip() for i in traceback.format_exception(klass, value, tb)][:-1]) del tb @@ -306,7 +308,8 @@ def _print_exception(context, klass, value, tb): (context_repr or context[:40] + '..', value) logging_level = logging.getLogger().level - if logging_level > logging.DEBUG: + if logging_level > logging.DEBUG or \ + isinstance(value, IOError) and value.errno == errno.EPIPE: _logger.error(error) elif logging_level == logging.DEBUG: _logger.error('\n'.join([error, tb_repr])) |