Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <mpg@redhat.com>2007-10-09 19:18:54 (GMT)
committer Marco Pesenti Gritti <mpg@redhat.com>2007-10-09 19:18:54 (GMT)
commit46d128c85a21bf48131de921d1a30177ea1441da (patch)
tree1df473c3e273952de7767aab19f3cda91c8b2c69
parentb44a2916ba410366078fd2f8dc5ddb10b3c4e65a (diff)
Cleanup the logs stuff a bit.
-rw-r--r--shell/Makefile.am3
-rw-r--r--shell/logsmanager.py54
-rwxr-xr-xshell/sugar-shell7
-rw-r--r--sugar/activity/activityfactory.py12
-rw-r--r--sugar/env.py7
-rw-r--r--sugar/logger.py2
6 files changed, 75 insertions, 10 deletions
diff --git a/shell/Makefile.am b/shell/Makefile.am
index a9be795..56649be 100644
--- a/shell/Makefile.am
+++ b/shell/Makefile.am
@@ -3,7 +3,8 @@ SUBDIRS = hardware model view intro
bin_SCRIPTS = sugar-shell
sugardir = $(pkgdatadir)/shell
-sugar_PYTHON = \
+sugar_PYTHON = \
+ logsmanager.py \
shellservice.py
confdir = $(pkgdatadir)/shell
diff --git a/shell/logsmanager.py b/shell/logsmanager.py
new file mode 100644
index 0000000..caa50d2
--- /dev/null
+++ b/shell/logsmanager.py
@@ -0,0 +1,54 @@
+# Copyright (C) 2007 Red Hat, Inc.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+import os
+import time
+
+from sugar import env
+
+_MAX_BACKUP_DIRS = 3
+
+def setup():
+ logs_dir = env.get_logs_path()
+ if not os.path.isdir(logs_dir):
+ os.makedirs(logs_dir)
+
+ backup_logs = []
+ backup_dirs = []
+ for f in os.listdir(logs_dir):
+ path = os.path.join(logs_dir, f)
+ if os.path.isfile(path):
+ backup_logs.append(f)
+ elif os.path.isdir(path):
+ backup_dirs.append(path)
+
+ if len(backup_dirs) > _MAX_BACKUP_DIRS:
+ backup_dirs.sort()
+ root = backup_dirs[0]
+ for f in os.listdir(root):
+ os.remove(os.path.join(root, f))
+ os.rmdir(root)
+
+ if len(backup_logs) > 0:
+ name = str(int(time.time()))
+ backup_dir = os.path.join(logs_dir, name)
+ os.mkdir(backup_dir)
+ for log in backup_logs:
+ source_path = os.path.join(logs_dir, log)
+ dest_path = os.path.join(backup_dir, log)
+ os.rename(source_path, dest_path)
+
diff --git a/shell/sugar-shell b/shell/sugar-shell
index 9f1d3a2..8f78289 100755
--- a/shell/sugar-shell
+++ b/shell/sugar-shell
@@ -19,6 +19,7 @@ import sys
import os
from ConfigParser import ConfigParser
import gettext
+import signal
import pygtk
pygtk.require('2.0')
@@ -37,6 +38,7 @@ from model.shellmodel import ShellModel
from shellservice import ShellService
from hardware import hardwaremanager
from intro import intro
+import logsmanager
def _start_matchbox():
cmd = ['matchbox-window-manager']
@@ -94,7 +96,7 @@ def _shell_started_cb():
def main():
gobject.idle_add(_shell_started_cb)
- logger.setup_logs_dir()
+ logsmanager.setup()
logger.start('shell')
_save_session_info()
@@ -110,6 +112,9 @@ def main():
win.show_all()
gtk.main()
+ # FIXME avoid zombie activity processes
+ signal.signal(signal.SIGCHLD, signal.SIG_IGN)
+
if os.environ.has_key("SUGAR_TP_DEBUG"):
# Allow the user time to start up telepathy connection managers
# using the Sugar DBus bus address
diff --git a/sugar/activity/activityfactory.py b/sugar/activity/activityfactory.py
index d3f279d..d5bdaf7 100644
--- a/sugar/activity/activityfactory.py
+++ b/sugar/activity/activityfactory.py
@@ -18,7 +18,7 @@
import logging
import subprocess
-import signal
+import time
import dbus
import gobject
@@ -28,13 +28,11 @@ from sugar.presence import presenceservice
from sugar.activity.activityhandle import ActivityHandle
from sugar.activity import registry
from sugar.datastore import datastore
-from sugar import logger
from sugar import util
+from sugar import env
import os
-signal.signal(signal.SIGCHLD, signal.SIG_IGN)
-
# #3903 - this constant can be removed and assumed to be 1 when dbus-python
# 0.82.3 is the only version used
if dbus.version >= (0, 82, 3):
@@ -103,9 +101,9 @@ def get_command(activity, activity_id=None, object_id=None, uri=None):
return command
def open_log_file(activity, activity_id):
- name = '%s-%s.log' % (activity.bundle_id, activity_id[:5])
- path = os.path.join(logger.get_logs_dir(), name)
- return open(path, 'w')
+ timestamp = str(int(time.time()))
+ name = '%s-%s.log' % (activity.bundle_id, timestamp)
+ return open(env.get_logs_path(name), 'w')
class ActivityCreationHandler(gobject.GObject):
"""Sugar-side activity creation interface
diff --git a/sugar/env.py b/sugar/env.py
index e3e0a51..65b8b0c 100644
--- a/sugar/env.py
+++ b/sugar/env.py
@@ -64,6 +64,13 @@ def get_profile_path(path=None):
else:
return base
+def get_logs_path(path=None):
+ base = get_profile_path('logs')
+ if path != None:
+ return os.path.join(base, path)
+ else:
+ return base
+
def get_user_activities_path():
return os.path.expanduser('~/Activities')
diff --git a/sugar/logger.py b/sugar/logger.py
index bc6af85..f9c28c2 100644
--- a/sugar/logger.py
+++ b/sugar/logger.py
@@ -67,7 +67,7 @@ def set_level(level):
if levels.has_key(level):
logging.getLogger('').setLevel(levels[level])
-def start(log_filename=None, redirect_io=True):
+def start(log_filename=None, redirect_io=False):
if os.environ.has_key('SUGAR_LOGGER_LEVEL'):
set_level(os.environ['SUGAR_LOGGER_LEVEL'])