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

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

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

View File

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

View File

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

View File

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