adds log to file - micah

This commit is contained in:
Marcos Pinto 2007-08-01 21:47:05 +00:00
parent 874128f595
commit 5bfc868aad
3 changed files with 169 additions and 16 deletions

View File

@ -25,6 +25,16 @@ Adds a tab with log of selected events.
Event messages come from libtorrent alerts.
If you want those strings translated to your locale,
you'll have to report the issue with libtorrent, not deluge.
Regarding the log files, the logs are saved in a log
directory within the deluge config directory. Event
messages for specific torrents are saved to individual
log files named the same as the associated .torrent
file. Event messages not specific to any torrent are
saved to logs named after the events
(eg peer_messages.log).
Event messages in the log files also include a timestamp.
The user is responsible to cleanout the logs.
""")
def deluge_init(deluge_path):
@ -105,7 +115,9 @@ class EventLogging:
self.manager.connect_event(self.manager.constants['EVENT_BLOCK_FINISHED'], self.tab_log.handle_event)
if self.config.get("enable_other"):
self.manager.connect_event(self.manager.constants['EVENT_OTHER'], self.tab_log.handle_event)
self.tab_log.prepare_log_store()
if self.config.get("enable_log_files"):
self.tab_log.enable_log_files()
self.tab_log.prepare_log_store()
def unload(self):
self.config.save(self.config_file)
@ -140,7 +152,7 @@ class EventLogging:
if self.config.get("enable_block_finished"):
self.manager.disconnect_event(self.manager.constants['EVENT_BLOCK_FINISHED'], self.tab_log.handle_event)
if self.config.get("enable_other"):
self.manager.connect_event(self.manager.constants['EVENT_OTHER'], self.tab_log.handle_event)
self.manager.disconnect_event(self.manager.constants['EVENT_OTHER'], self.tab_log.handle_event)
self.tab_log.clear_log_store()
numPages = self.parentNotebook.get_n_pages()
for page in xrange(numPages):
@ -233,6 +245,11 @@ class EventLogging:
self.manager.disconnect_event(self.manager.constants['EVENT_OTHER'], self.tab_log.handle_event)
else:
self.manager.connect_event(self.manager.constants['EVENT_OTHER'], self.tab_log.handle_event)
if widget == self.glade.get_widget("chk_log_files"):
if value:
self.tab_log.enable_log_files()
else:
self.tab_log.disable_log_files()
def configure(self):
try:
@ -252,6 +269,7 @@ class EventLogging:
self.glade.get_widget("chk_block_downloading").set_active(self.config.get("enable_block_downloading"))
self.glade.get_widget("chk_block_finished").set_active(self.config.get("enable_block_finished"))
self.glade.get_widget("chk_other").set_active(self.config.get("enable_other"))
self.glade.get_widget("chk_log_files").set_active(self.config.get("enable_log_files"))
except:
self.glade.get_widget("chk_finished").set_active(False)
self.glade.get_widget("chk_peer_error").set_active(False)
@ -269,6 +287,7 @@ class EventLogging:
self.glade.get_widget("chk_block_downloading").set_active(False)
self.glade.get_widget("chk_block_finished").set_active(False)
self.glade.get_widget("chk_other").set_active(False)
self.glade.get_widget("chk_log_files").set_active(False)
self.dialog.show()
response = self.dialog.run()
self.dialog.hide()
@ -289,3 +308,4 @@ class EventLogging:
self.config.set("enable_block_downloading", self.glade.get_widget("chk_block_downloading").get_active())
self.config.set("enable_block_finished", self.glade.get_widget("chk_block_finished").get_active())
self.config.set("enable_other", self.glade.get_widget("chk_other").get_active())
self.config.set("enable_log_files", self.glade.get_widget("chk_log_files").get_active())

View File

@ -16,7 +16,7 @@
<child>
<widget class="GtkTable" id="table1">
<property name="visible">True</property>
<property name="n_rows">17</property>
<property name="n_rows">19</property>
<child>
<widget class="GtkLabel" id="label1">
<property name="visible">True</property>
@ -263,6 +263,31 @@
<property name="bottom_attach">17</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="label" translatable="yes">Log files</property>
</widget>
<packing>
<property name="top_attach">17</property>
<property name="bottom_attach">18</property>
</packing>
</child>
<child>
<widget class="GtkCheckButton" id="chk_log_files">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Enable log files</property>
<property name="use_underline">True</property>
<property name="response_id">0</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="toggle_ui"/>
</widget>
<packing>
<property name="top_attach">18</property>
<property name="bottom_attach">19</property>
</packing>
</child>
</widget>
<packing>
<property name="fill">False</property>

View File

@ -1,10 +1,19 @@
import gtk
import xdg.BaseDirectory
import os
import time
CONFIG_DIR = xdg.BaseDirectory.save_config_path('deluge')
class LogManager(object):
def __init__(self, viewport, manager):
self.log_files = False
self.viewport = viewport
self.vbox = None
self.manager = manager
self.logdir = os.path.join(CONFIG_DIR, 'logs')
if not os.path.isdir(self.logdir):
os.mkdir(self.logdir)
def clear_log_store(self):
if not self.vbox is None:
@ -15,64 +24,163 @@ class LogManager(object):
self.vbox = gtk.VBox()
self.viewport.add(self.vbox)
self.vbox.show_all()
def enable_log_files(self):
self.log_files = True
def disable_log_files(self):
self.log_files = False
def handle_event(self, event):
event_message = None
if event['event_type'] is self.manager.constants['EVENT_FINISHED']:
torrent = self.manager.unique_IDs[event['unique_ID']].filename.replace(os.path.join(CONFIG_DIR, 'torrentfiles/'), '')
event_message = _("Torrent finished") + " {"+ _("event message: ") + event['message'] + ", "\
+ _("torrent: ") + self.manager.unique_IDs[event['unique_ID']].filename + "}"
+ _("torrent: ") + torrent + "}"
if self.log_files:
log = os.path.join(self.logdir, torrent.replace('.torrent', '.log'))
logfile = open(log, "a")
logfile.write(time.asctime(time.localtime()) + ", " +event_message + '\n')
logfile.close()
if event['event_type'] is self.manager.constants['EVENT_PEER_ERROR']:
event_message = _("Peer message") + " {" + _("event message: ") + event['message'] + ", " + _("ip address: ")\
+ event['ip'] + ", " + _("client: ") + event['client_ID'] + "}"
if self.log_files:
log = os.path.join(self.logdir, 'peer_messages.log')
logfile = open(log, "a")
logfile.write(time.asctime(time.localtime()) + ", " +event_message + '\n')
logfile.close()
if event['event_type'] is self.manager.constants['EVENT_INVALID_REQUEST']:
event_message = _("Invalid request") + " {" + _("event message: ") + event['message'] + ", " + _("client: ")\
+ event['client_ID'] + "}"
if self.log_files:
log = os.path.join(self.logdir, 'invalid_requests.log')
logfile = open(log, "a")
logfile.write(time.asctime(time.localtime()) + ", " +event_message + '\n')
logfile.close()
if event['event_type'] is self.manager.constants['EVENT_FILE_ERROR']:
torrent = self.manager.unique_IDs[event['unique_ID']].filename.replace(os.path.join(CONFIG_DIR, 'torrentfiles/'), '')
event_message = _("File error") + " {" + _("event message: ") + event['message'] + ", " + _("torrent: ")\
+ self.manager.unique_IDs[event['unique_ID']].filename + "}"
+ torrent + "}"
if self.log_files:
log = os.path.join(self.logdir, torrent.replace('.torrent', '.log'))
logfile = open(log, "a")
logfile.write(time.asctime(time.localtime()) + ", " +event_message + '\n')
logfile.close()
if event['event_type'] is self.manager.constants['EVENT_HASH_FAILED_ERROR']:
torrent = self.manager.unique_IDs[event['unique_ID']].filename.replace(os.path.join(CONFIG_DIR, 'torrentfiles/'), '')
event_message = _("Hash failed error") + " {" + _("event message: ") + event['message'] + ", "\
+ _("torrent: ") + self.manager.unique_IDs[event['unique_ID']].filename + ", "\
+ _("torrent: ") + torrent + ", "\
+ _("piece index: ") + str(event['piece_index']) + "}"
if self.log_files:
log = os.path.join(self.logdir, torrent.replace('.torrent', '.log'))
logfile = open(log, "a")
logfile.write(time.asctime(time.localtime()) + ", " +event_message + '\n')
logfile.close()
if event['event_type'] is self.manager.constants['EVENT_PEER_BAN_ERROR']:
torrent = self.manager.unique_IDs[event['unique_ID']].filename.replace(os.path.join(CONFIG_DIR, 'torrentfiles/'), '')
event_message = _("Peer ban error") + " {" + _("event message: ") + event['message'] + ", " + _("ip address: ")\
+ event['ip'] + ", " + _("torrent: ") + self.manager.unique_IDs[event['unique_ID']].filename + "}"
+ event['ip'] + ", " + _("torrent: ") + torrent + "}"
if self.log_files:
log = os.path.join(self.logdir, torrent.replace('.torrent', '.log'))
logfile = open(log, "a")
logfile.write(time.asctime(time.localtime()) + ", " +event_message + '\n')
logfile.close()
if event['event_type'] is self.manager.constants['EVENT_FASTRESUME_REJECTED_ERROR']:
torrent = self.manager.unique_IDs[event['unique_ID']].filename.replace(os.path.join(CONFIG_DIR, 'torrentfiles/'), '')
event_message = _("Fastresume rejected error") + event['message'] + ", "\
+ _("torrent: ") + self.manager.unique_IDs[event['unique_ID']].filename + "}"
+ _("torrent: ") + torrent + "}"
if self.log_files:
log = os.path.join(self.logdir, torrent.replace('.torrent', '.log'))
logfile = open(log, "a")
logfile.write(time.asctime(time.localtime()) + ", " +event_message + '\n')
logfile.close()
if event['event_type'] is self.manager.constants['EVENT_TRACKER_ANNOUNCE']:
torrent = self.manager.unique_IDs[event['unique_ID']].filename.replace(os.path.join(CONFIG_DIR, 'torrentfiles/'), '')
event_message = _("Tracker announce") + " {" + _("event message: ") + event['message'] + ", "\
+ _("torrent: ") + self.manager.unique_IDs[event['unique_ID']].filename + "}"
+ _("torrent: ") + torrent + "}"
if self.log_files:
log = os.path.join(self.logdir, torrent.replace('.torrent', '.log'))
logfile = open(log, "a")
logfile.write(time.asctime(time.localtime()) + ", " +event_message + '\n')
logfile.close()
if event['event_type'] is self.manager.constants['EVENT_TRACKER_REPLY']:
torrent = self.manager.unique_IDs[event['unique_ID']].filename.replace(os.path.join(CONFIG_DIR, 'torrentfiles/'), '')
event_message = _("Tracker reply") + " {" + _("event message: ") + event['message'] + ", "\
+ _("torrent: ") + self.manager.unique_IDs[event['unique_ID']].filename + "}"
+ _("torrent: ") + torrent + "}"
if self.log_files:
log = os.path.join(self.logdir, torrent.replace('.torrent', '.log'))
logfile = open(log, "a")
logfile.write(time.asctime(time.localtime()) + ", " +event_message + '\n')
logfile.close()
if event['event_type'] is self.manager.constants['EVENT_TRACKER_ALERT']:
torrent = self.manager.unique_IDs[event['unique_ID']].filename.replace(os.path.join(CONFIG_DIR, 'torrentfiles/'), '')
event_message = _("Tracker alert") + " {" + _("event message: ") + event['message'] + ", "\
+ _("torrent: ") + self.manager.unique_IDs[event['unique_ID']].filename + ", "\
+ _("torrent: ") + torrent + ", "\
+ _("status code: ") + str(event['status_code']) + ", " + _("Times in a row: ")\
+ str(event['times_in_row']) + "}"
if self.log_files:
log = os.path.join(self.logdir, torrent.replace('.torrent', '.log'))
logfile = open(log, "a")
logfile.write(time.asctime(time.localtime()) + ", " +event_message + '\n')
logfile.close()
if event['event_type'] is self.manager.constants['EVENT_TRACKER_WARNING']:
torrent = self.manager.unique_IDs[event['unique_ID']].filename.replace(os.path.join(CONFIG_DIR, 'torrentfiles/'), '')
event_message = _("Tracker warning") + " {" + _("event message: ") + event['message'] + ", "\
+ _("torrent: ") + self.manager.unique_IDs[event['unique_ID']].filename + "}"
+ _("torrent: ") + torrent + "}"
if self.log_files:
log = os.path.join(self.logdir, torrent.replace('.torrent', '.log'))
logfile = open(log, "a")
logfile.write(time.asctime(time.localtime()) + ", " +event_message + '\n')
logfile.close()
if event['event_type'] is self.manager.constants['EVENT_STORAGE_MOVED']:
torrent = self.manager.unique_IDs[event['unique_ID']].filename.replace(os.path.join(CONFIG_DIR, 'torrentfiles/'), '')
event_message = _("Storage moved") + " {" + _("event message: ") + event['message'] + ", "\
+ _("torrent: ") + self.manager.unique_IDs[event['unique_ID']].filename + "}"
+ _("torrent: ") + torrent + "}"
if self.log_files:
log = os.path.join(self.logdir, torrent.replace('.torrent', '.log'))
logfile = open(log, "a")
logfile.write(time.asctime(time.localtime()) + ", " +event_message + '\n')
logfile.close()
if event['event_type'] is self.manager.constants['EVENT_PIECE_FINISHED']:
torrent = self.manager.unique_IDs[event['unique_ID']].filename.replace(os.path.join(CONFIG_DIR, 'torrentfiles/'), '')
event_message = _("Piece finished") + " {" + _("event message: ") + event['message'] + ", "\
+ _("torrent: ") + self.manager.unique_IDs[event['unique_ID']].filename + ", "\
+ _("torrent: ") + torrent + ", "\
+ _("piece index: ") + str(event['piece_index']) + "}"
if self.log_files:
log = os.path.join(self.logdir, torrent.replace('.torrent', '.log'))
logfile = open(log, "a")
logfile.write(time.asctime(time.localtime()) + ", " +event_message + '\n')
logfile.close()
if event['event_type'] is self.manager.constants['EVENT_BLOCK_DOWNLOADING']:
torrent = self.manager.unique_IDs[event['unique_ID']].filename.replace(os.path.join(CONFIG_DIR, 'torrentfiles/'), '')
event_message = _("Block downloading") + " {" + _("event message: ") + event['message'] + ", "\
+ _("torrent: ") + self.manager.unique_IDs[event['unique_ID']].filename + ", "\
+ _("torrent: ") + torrent + ", "\
+ _("piece index: ") + str(event['piece_index']) + ", " + _("block index: ")\
+ str(event['block_index']) + ", " + _("peer speed: ") + event['peer_speed'] + "}"
if self.log_files:
log = os.path.join(self.logdir, torrent.replace('.torrent', '.log'))
logfile = open(log, "a")
logfile.write(time.asctime(time.localtime()) + ", " +event_message + '\n')
logfile.close()
if event['event_type'] is self.manager.constants['EVENT_BLOCK_FINISHED']:
torrent = self.manager.unique_IDs[event['unique_ID']].filename.replace(os.path.join(CONFIG_DIR, 'torrentfiles/'), '')
event_message = _("Block finished") + " {" + _("event message: ") + event['message'] + ", "\
+ _("torrent: ") + self.manager.unique_IDs[event['unique_ID']].filename + ", "\
+ _("torrent: ") + torrent + ", "\
+ _("piece index: ") + str(event['piece_index']) + ", " + _("block index: ")\
+ str(event['block_index']) + "}"
if self.log_files:
log = os.path.join(self.logdir, torrent.replace('.torrent', '.log'))
logfile = open(log, "a")
logfile.write(time.asctime(time.localtime()) + ", " +event_message + '\n')
logfile.close()
if event['event_type'] is self.manager.constants['EVENT_OTHER']:
event_message = _("Other") + " {" + _("event message: ") + event['message'] + "}"
if self.log_files:
log = os.path.join(self.logdir, 'other.log')
logfile = open(log, "a")
logfile.write(time.asctime(time.localtime()) + ", " +event_message + '\n')
logfile.close()
if not event_message is None:
label = gtk.Label()
label.set_text(event_message)