[TASK] Improve folder watch.
This commit is contained in:
parent
ec6413231c
commit
9a26c3f8cb
|
@ -1,2 +1,3 @@
|
||||||
|
settings.ini
|
||||||
*.pyc
|
*.pyc
|
||||||
*.cache
|
*.cache
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from twisted.internet import protocol
|
from twisted.internet import protocol
|
||||||
from twisted.python import log
|
from twisted.python import log
|
||||||
from twisted.words.protocols import irc
|
from twisted.words.protocols import irc
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
[irc]
|
|
||||||
endpoint = tcp:host=irc.euirc.net:port=6667
|
|
||||||
nickName = ftpd
|
|
||||||
realName = bot: provides tracking of an ftp
|
|
||||||
channel = #Tonari.
|
|
||||||
|
|
||||||
[fsmonitor]
|
|
||||||
path=/home/kuzuru-ftp/
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
[irc]
|
||||||
|
endpoint = tcp:host=irc.euirc.net:port=6667
|
||||||
|
nickName = FDS-kun
|
||||||
|
realName = bot: provides tracking of an ftp folder
|
||||||
|
channel = #JPT
|
||||||
|
|
||||||
|
[fsmonitor]
|
||||||
|
path=/tmp/foobar/
|
|
@ -1,3 +1,5 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from ConfigParser import ConfigParser
|
from ConfigParser import ConfigParser
|
||||||
|
|
||||||
from twisted.application.service import IServiceMaker, Service
|
from twisted.application.service import IServiceMaker, Service
|
||||||
|
@ -19,7 +21,7 @@ class MonitorBotService(Service):
|
||||||
self._channel = channel
|
self._channel = channel
|
||||||
self._nickname = nickname
|
self._nickname = nickname
|
||||||
self._realname = realname
|
self._realname = realname
|
||||||
self._path = path
|
self._watch_path = filepath.FilePath(path)
|
||||||
|
|
||||||
def startService(self):
|
def startService(self):
|
||||||
"""Construct a client & connect to server."""
|
"""Construct a client & connect to server."""
|
||||||
|
@ -40,14 +42,41 @@ class MonitorBotService(Service):
|
||||||
self._realname
|
self._realname
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def humanReadableMask(mask):
|
||||||
|
flags_to_human = [
|
||||||
|
(inotify.IN_MODIFY, 'geändert'),
|
||||||
|
(inotify.IN_CREATE, 'erstellt'),
|
||||||
|
(inotify.IN_DELETE, 'gelöscht'),
|
||||||
|
(inotify.IN_MOVED_FROM, 'umbenannt von'),
|
||||||
|
(inotify.IN_MOVED_TO, 'umbenannt nach')
|
||||||
|
]
|
||||||
|
|
||||||
|
s = []
|
||||||
|
for k, v in flags_to_human:
|
||||||
|
if k & mask:
|
||||||
|
s.append(v)
|
||||||
|
return s
|
||||||
|
|
||||||
def fsnotify(ignored, filepath, mask):
|
def fsnotify(ignored, filepath, mask):
|
||||||
msg = "event %s on %s" % (', '.join(inotify.humanReadableMask(mask)), filepath)
|
path_segments = filepath.segmentsFrom(self._watch_path)
|
||||||
|
new_path = '/'.join(path_segments)
|
||||||
|
msg = "ftp> /%s (%s)" % (new_path, ', '.join(humanReadableMask(mask)))
|
||||||
self._bot.msg(self._channel, msg)
|
self._bot.msg(self._channel, msg)
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
watchMask = ( inotify.IN_MODIFY
|
||||||
|
| inotify.IN_CREATE
|
||||||
|
| inotify.IN_DELETE
|
||||||
|
| inotify.IN_DELETE_SELF
|
||||||
|
| inotify.IN_MOVED_FROM
|
||||||
|
| inotify.IN_MOVED_TO
|
||||||
|
| inotify.IN_MOVE_SELF )
|
||||||
|
|
||||||
notifier = inotify.INotify()
|
notifier = inotify.INotify()
|
||||||
notifier.startReading()
|
notifier.startReading()
|
||||||
notifier.watch(filepath.FilePath(self._path), autoAdd=True, recursive=True, callbacks=[fsnotify])
|
notifier.watch(self._watch_path, autoAdd=True, recursive=True, callbacks=[fsnotify], mask=watchMask)
|
||||||
|
|
||||||
"""Attach defined callbacks."""
|
"""Attach defined callbacks."""
|
||||||
return client.connect(factory).addCallbacks(connected, failure)
|
return client.connect(factory).addCallbacks(connected, failure)
|
||||||
|
|
Loading…
Reference in New Issue