3
# (c) Wijnand 'tehmaze' Modderman - http://tehmaze.com
6
""" gozerbot lag meter """
8
from gozerbot.callbacks import callbacks
9
from gozerbot.commands import cmnds
10
from gozerbot.examples import examples
11
from gozerbot.fleet import fleet
12
from gozerbot.periodical import interval, periodical
13
from gozerbot.plughelp import plughelp
14
from gozerbot.tests import tests
18
plughelp.add('lag', 'lag measuring')
24
""" lag meter class """
32
def update_names(self):
33
""" grab all names from irc bots in the fleet """
34
self.names = [bot.name for bot in fleet.bots if bot.type == 'irc']
36
def getlag(self, name):
37
""" get lag of <botname> """
38
if self.lag.has_key(name):
43
def measure(self, name):
44
""" measure lag of <botname> """
45
bot = fleet.byname(name)
48
if bot.connectok.isSet() and bot.connectok:
49
bot.sendraw('PING :LAG %f' % time.time())
51
def recieved(self, name, sent):
52
""" function called on received PONG """
53
self.lag[name] = time.time() - sent
57
""" lag meter loop """
60
for name in self.names:
63
lagmeters = Lagmeter()
66
""" start the lag meter loop """
71
""" kill all lag meter periodical jobs """
74
def handle_lag(bot, ievent):
75
""" show lag of bot the command is given on """
76
lag = lagmeters.getlag(bot.name)
78
ievent.reply('no lag metered')
80
ievent.reply('lag is %f seconds' % lag)
82
def connectedcb(bot, ievent):
83
""" callback to be called when bot is connected """
84
lagmeters.update_names()
85
lagmeters.measure(bot.name)
87
def pongcb(bot, ievent):
89
if len(ievent.arguments) == 3:
90
if ievent.arguments[1].lstrip(':') == 'LAG':
92
sent = float(ievent.arguments[2])
93
lagmeters.recieved(bot.name, sent)
97
cmnds.add('lag', handle_lag, ['USER'])
98
examples.add('lag', 'shows the current lag', 'lag')
100
callbacks.add('001', connectedcb)
101
callbacks.add('PONG', pongcb)