Cleanup the logs stuff a bit.

This commit is contained in:
Marco Pesenti Gritti 2007-10-09 21:18:54 +02:00
parent b44a2916ba
commit 46d128c85a
6 changed files with 75 additions and 10 deletions

View File

@ -4,6 +4,7 @@ bin_SCRIPTS = sugar-shell
sugardir = $(pkgdatadir)/shell sugardir = $(pkgdatadir)/shell
sugar_PYTHON = \ sugar_PYTHON = \
logsmanager.py \
shellservice.py shellservice.py
confdir = $(pkgdatadir)/shell confdir = $(pkgdatadir)/shell

54
shell/logsmanager.py Normal file
View File

@ -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)

View File

@ -19,6 +19,7 @@ import sys
import os import os
from ConfigParser import ConfigParser from ConfigParser import ConfigParser
import gettext import gettext
import signal
import pygtk import pygtk
pygtk.require('2.0') pygtk.require('2.0')
@ -37,6 +38,7 @@ from model.shellmodel import ShellModel
from shellservice import ShellService from shellservice import ShellService
from hardware import hardwaremanager from hardware import hardwaremanager
from intro import intro from intro import intro
import logsmanager
def _start_matchbox(): def _start_matchbox():
cmd = ['matchbox-window-manager'] cmd = ['matchbox-window-manager']
@ -94,7 +96,7 @@ def _shell_started_cb():
def main(): def main():
gobject.idle_add(_shell_started_cb) gobject.idle_add(_shell_started_cb)
logger.setup_logs_dir() logsmanager.setup()
logger.start('shell') logger.start('shell')
_save_session_info() _save_session_info()
@ -110,6 +112,9 @@ def main():
win.show_all() win.show_all()
gtk.main() gtk.main()
# FIXME avoid zombie activity processes
signal.signal(signal.SIGCHLD, signal.SIG_IGN)
if os.environ.has_key("SUGAR_TP_DEBUG"): if os.environ.has_key("SUGAR_TP_DEBUG"):
# Allow the user time to start up telepathy connection managers # Allow the user time to start up telepathy connection managers
# using the Sugar DBus bus address # using the Sugar DBus bus address

View File

@ -18,7 +18,7 @@
import logging import logging
import subprocess import subprocess
import signal import time
import dbus import dbus
import gobject import gobject
@ -28,13 +28,11 @@ from sugar.presence import presenceservice
from sugar.activity.activityhandle import ActivityHandle from sugar.activity.activityhandle import ActivityHandle
from sugar.activity import registry from sugar.activity import registry
from sugar.datastore import datastore from sugar.datastore import datastore
from sugar import logger
from sugar import util from sugar import util
from sugar import env
import os import os
signal.signal(signal.SIGCHLD, signal.SIG_IGN)
# #3903 - this constant can be removed and assumed to be 1 when dbus-python # #3903 - this constant can be removed and assumed to be 1 when dbus-python
# 0.82.3 is the only version used # 0.82.3 is the only version used
if dbus.version >= (0, 82, 3): if dbus.version >= (0, 82, 3):
@ -103,9 +101,9 @@ def get_command(activity, activity_id=None, object_id=None, uri=None):
return command return command
def open_log_file(activity, activity_id): def open_log_file(activity, activity_id):
name = '%s-%s.log' % (activity.bundle_id, activity_id[:5]) timestamp = str(int(time.time()))
path = os.path.join(logger.get_logs_dir(), name) name = '%s-%s.log' % (activity.bundle_id, timestamp)
return open(path, 'w') return open(env.get_logs_path(name), 'w')
class ActivityCreationHandler(gobject.GObject): class ActivityCreationHandler(gobject.GObject):
"""Sugar-side activity creation interface """Sugar-side activity creation interface

View File

@ -64,6 +64,13 @@ def get_profile_path(path=None):
else: else:
return base 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(): def get_user_activities_path():
return os.path.expanduser('~/Activities') return os.path.expanduser('~/Activities')

View File

@ -67,7 +67,7 @@ def set_level(level):
if levels.has_key(level): if levels.has_key(level):
logging.getLogger('').setLevel(levels[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'): if os.environ.has_key('SUGAR_LOGGER_LEVEL'):
set_level(os.environ['SUGAR_LOGGER_LEVEL']) set_level(os.environ['SUGAR_LOGGER_LEVEL'])