Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2013-11-11 21:30:20 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2013-11-11 21:30:20 (GMT)
commit5b4263185727c05d39800d00b14930a132499125 (patch)
treebbff4e4d405aba31eca9d00a791edeb3792161f3
parente36b897cd6cf7e52370479127aa85218f6269b51 (diff)
Commit node stats on exit
-rwxr-xr-xsugar-network-node1
-rw-r--r--sugar_network/model/routes.py1
-rw-r--r--sugar_network/node/routes.py4
-rw-r--r--sugar_network/toolkit/coroutine.py5
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]))