logwatcher.py
author Tero Marttila <terom@paivola.fi>
Wed, 26 Mar 2008 01:16:54 +0200
changeset 16 521fec9bb663
parent 15 e31e38d654b6
child 18 6348bf9750bc
permissions -rw-r--r--
git is starting to confuse me...

Merge commit 'refs/remotes/publish/master'

Conflicts:

irc.py

committer: Tero Marttila <terom@paivola.fi>
3
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     1
from twisted.internet import protocol, reactor
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
from twisted.python import log
15
e31e38d654b6 some forgotten commits
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
     3
import sys
3
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     4
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
import api
15
e31e38d654b6 some forgotten commits
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
     6
import logwatch_config as config
3
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     7
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     8
class TailProcessProtocol (protocol.ProcessProtocol) :
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     9
    def __init__ (self, module, name, filters) :
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    10
        self.module = module
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    11
        self.name = name
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    12
        self.filters = filters
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    13
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    14
        self.buf = ""
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    15
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    16
    def errReceived (self, data) :
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    17
        self.module.error("tail for %s: %s" % (self.name, data))
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    18
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    19
    def outReceived (self, data) :
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 3
diff changeset
    20
        data = self.buf + data
3
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    21
        
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    22
        while "\n" in data :
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    23
            line, data = data.split("\n", 1)
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 3
diff changeset
    24
            
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 3
diff changeset
    25
            log.msg("Matching line `%s'..." % line)
3
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    26
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    27
            for filter in self.filters :
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    28
                out = filter.test(line)
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    29
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 3
diff changeset
    30
                if out :
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 3
diff changeset
    31
                    log.msg("\t%s: %s" % (filter.event_type, out))
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 3
diff changeset
    32
                    self.module.sendEvent(filter.event_type, out)
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 3
diff changeset
    33
3
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    34
        self.buf = data
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    35
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 3
diff changeset
    36
    def processEnded (self, reason) :
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 3
diff changeset
    37
        msg = "tail process for %s quit: %s" % (self.name, reason.getErrorMessage())
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 3
diff changeset
    38
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 3
diff changeset
    39
        log.err(msg)
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 3
diff changeset
    40
        self.module.error(msg)
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 3
diff changeset
    41
10
687b797f709c fix ExampleModule -> LogWatchModule
Tero Marttila <terom@paivola.fi>
parents: 6
diff changeset
    42
class LogWatchModule (api.Module) :
3
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    43
    name = "logs"
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    44
    version = 0x0001
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    45
    
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    46
    event_types = [
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    47
        "error",
6
614161f85d9b some cleanup, bugfixes, commands for the irc bot, shared-secret for the API
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    48
        "sudo",
614161f85d9b some cleanup, bugfixes, commands for the irc bot, shared-secret for the API
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    49
        "ssh",
3
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    50
    ]
15
e31e38d654b6 some forgotten commits
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
    51
    
e31e38d654b6 some forgotten commits
Tero Marttila <terom@fixme.fi>
parents: 10
diff changeset
    52
    log_files = config.log_files
3
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    53
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    54
    log_objs = None
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    55
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    56
    def handleConnect (self) :
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    57
        log.msg("Spawning tail processes...")
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    58
        
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    59
        self.log_objs = dict()
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    60
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    61
        for name, file, filters in self.log_files :
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 3
diff changeset
    62
            log.msg("\t%s - %s..." % (name, file))
3
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    63
4
34d7897bd0f5 logwatcher works
Tero Marttila <terom@paivola.fi>
parents: 3
diff changeset
    64
            p = self.log_objs[name] = TailProcessProtocol(self, name, filters)
3
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    65
6
614161f85d9b some cleanup, bugfixes, commands for the irc bot, shared-secret for the API
Tero Marttila <terom@paivola.fi>
parents: 4
diff changeset
    66
            reactor.spawnProcess(p, "/usr/bin/tail", ["tail", "-n0", "--follow=name", file])
3
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    67
    
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    68
    def error (self, msg) :
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    69
        self.sendEvent("error", msg)
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    70
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    71
if __name__ == '__main__' :
10
687b797f709c fix ExampleModule -> LogWatchModule
Tero Marttila <terom@paivola.fi>
parents: 6
diff changeset
    72
    LogWatchModule().run()
3
5ab150c4a328 it works \o/ + the start of logwatcher.py
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    73