Package gozerbot :: Module monitor
[hide private]
[frames] | no frames]

Source Code for Module gozerbot.monitor

  1  # gozerbot/monitor.py 
  2  # 
  3  # 
  4   
  5  """ monitors .. call callback on bot output """ 
  6   
  7  __copyright__ = 'this file is in the public domain' 
  8   
  9  from gozerbot.generic import rlog, handle_exception 
 10  from gozerbot.ircevent import Ircevent 
 11  from gozerbot.config import config 
 12  if config['jabberenable']: 
 13      from gozerbot.jabbermsg import Jabbermsg 
 14      from gozerbot.jabberpresence import Jabberpresence 
 15  from gozerbot.threadloop import ThreadLoop 
 16  from gozerbot.runner import cbrunners 
 17  import gozerbot.thr as thr 
 18  import Queue 
 19   
20 -class Monitor(ThreadLoop):
21 22 """ monitor base class """ 23
24 - def __init__(self, name="monitor"):
25 ThreadLoop.__init__(self, name) 26 self.outs = []
27
28 - def add(self, name, callback, pre, threaded=False):
29 """ add a say monitoring callback """ 30 name = name.lower() 31 self.outs.append((name, callback, pre, threaded)) 32 rlog(0, self.name, 'added %s (%s)' % (name, str(callback)))
33
34 - def unload(self, name):
35 """ delete monitor item """ 36 name = name.lower() 37 for i in range(len(self.outs)-1, -1, -1): 38 if self.outs[i][0] == name: 39 del self.outs[i]
40
41 -class Saymonitor(Monitor):
42 43 """ monitor bot output (bot.say) """ 44
45 - def handle(self, botname, printto, txt, who, how, fromm):
46 """ fire saymonitor callbacks """ 47 for i in self.outs: 48 # check if precondition is met 49 try: 50 if i[2]: 51 doit = i[2](botname, printto, txt, who, how, fromm) 52 else: 53 doit = 1 54 except Exception, ex: 55 handle_exception() 56 doit = 0 57 if doit: 58 # run monitor callback in its own thread 59 rlog(0, 'saymonitor', 'excecuting saymonitor callback %s' \ 60 % i[0]) 61 if not i[3]: 62 cbrunners[5].put("monitor-%s" % i[0], i[1], botname, \ 63 printto, txt, who, how, fromm) 64 else: 65 thr.start_new_thread(i[1], (botname, printto, txt, who, \ 66 how, fromm)) 67 else: 68 rlog(9, self.name, '%s failed for %s' % (str(i[2]), str(i[1])))
69
70 -class Outmonitor(Monitor):
71 72 """ monitor for bot output (bot.send) """ 73
74 - def handle(self, bot, txt):
75 """ fire outmonitor callbacks """ 76 ievent = Ircevent().parse(bot, txt) 77 if not ievent: 78 rlog(10, 'monitor', "can't make ircevent: %s" % txt) 79 return 80 ievent.nick = bot.nick 81 try: 82 ievent.userhost = bot.userhosts[bot.nick] 83 except KeyError: 84 ievent.userhost = "bot@bot" 85 for i in self.outs: 86 # check if precondition is met 87 try: 88 if i[2]: 89 doit = i[2](bot, ievent) 90 else: 91 doit = 1 92 except Exception, ex: 93 handle_exception() 94 doit = 0 95 if doit: 96 # run monitor callback in thread 97 rlog(0, 'outmonitor', 'excecuting outmonitor callback \ 98 %s' % i[0]) 99 if not i[3]: 100 cbrunners[5].put("monitor-%s" % i[0], i[1], bot, ievent) 101 else: 102 thr.start_new_thread(i[1], (bot, ievent))
103
104 -class Jabbermonitor(Monitor):
105 106 """ monitor jabber output """ 107
108 - def handle(self, bot, msg):
109 """ fire jabber monitor callbacks """ 110 if not config['jabberenable']: 111 return 112 try: 113 if msg.startswith('<presence'): 114 jmsg = Jabberpresence(msg) 115 else: 116 jmsg = Jabbermsg(msg) 117 jmsg.toirc(bot) 118 jmsg.botoutput = True 119 except AttributeError: 120 return 121 for i in self.outs: 122 # check if precondition is met 123 try: 124 if i[2]: 125 rlog(0, 'jabbermonitor', 'checking inloop %s' % str(i[2])) 126 doit = i[2](bot, jmsg) 127 else: 128 doit = 1 129 except Exception, ex: 130 handle_exception() 131 doit = 0 132 if doit: 133 # run monitor callback in its own thread 134 rlog(0, 'jabbermonitor', 'excecuting jabbermonitor callback \ 135 %s' % i[0]) 136 if not i[3]: 137 cbrunners[5].put("monitor-%s" % i[0], i[1], bot, jmsg) 138 else: 139 thr.start_new_thread(i[1], (bot, jmsg))
140 141 # bot.send() monitor 142 outmonitor = Outmonitor('outmonitor') 143 144 # bot.say() monitor 145 saymonitor = Saymonitor('saymonitor') 146 147 # jabber monitor 148 jabbermonitor = Jabbermonitor('jabbermonitor') 149