Tweaked and tidied

This commit is contained in:
Luke Rogers 2013-10-02 19:35:44 +13:00
parent e6318fe725
commit eb4620e1d6
3 changed files with 67 additions and 70 deletions

View file

@ -8,7 +8,7 @@ import signal
# set up enviroment # set up enviroment
os.chdir(sys.path[0] or '.') # do stuff relative to the install directory os.chdir(sys.path[0] or '.') # do stuff relative to the install directory
print 'CloudBot REFRESH <http://git.io/cloudbotirc>' print 'CloudBot2 <http://git.io/cloudbotirc>'
def exit_gracefully(signum, frame): def exit_gracefully(signum, frame):
cloudbot.stop() cloudbot.stop()
@ -23,5 +23,3 @@ cloudbot.logger.debug("Bot initalized, starting main loop.")
while cloudbot.running: while cloudbot.running:
cloudbot.loop() cloudbot.loop()
cloudbot.logger.debug("Stopped main loop.")

View file

@ -13,6 +13,32 @@ def clean_name(n):
"""strip all spaces and capitalization""" """strip all spaces and capitalization"""
return re.sub('[^A-Za-z0-9_]+', '', n.replace(" ", "_")) return re.sub('[^A-Za-z0-9_]+', '', n.replace(" ", "_"))
def get_logger(self):
"""create and return a new logger object"""
# create logger
logger = logging.getLogger("cloudbot")
logger.setLevel(logging.DEBUG)
# add a file handler
log_name = "bot.log"
fh = logging.FileHandler(log_name)
fh.setLevel(logging.DEBUG)
# stdout handler
sh = logging.StreamHandler()
sh.setLevel(logging.INFO)
# create a formatter and set the formatter for the handler.
frmt = logging.Formatter('%(asctime)s [%(levelname)s] %(message)s')
fh.setFormatter(frmt)
simple_frmt = logging.Formatter('[%(levelname)s] %(message)s')
sh.setFormatter(simple_frmt)
# add the Handlers to the logger
logger.addHandler(fh)
logger.addHandler(sh)
return logger
class Bot(object): class Bot(object):
def __init__(self): def __init__(self):
@ -34,35 +60,6 @@ class Bot(object):
self.loader = loader.PluginLoader(self) self.loader = loader.PluginLoader(self)
def stop(self, reason=None):
"""quits all networks and shuts the bot down"""
self.logger.info("Stopping bot.")
self.running = False
# wait for the bot loop to stop
time.sleep(1)
self.config.observer.stop()
self.logger.debug("Stopping config reloader.")
self.loader.stop()
self.logger.debug("Stopping plugin loader.")
for name, connection in self.connections.iteritems():
# TODO: end connections properly
self.logger.debug("({}) Closing connection.".format(name))
if reason:
connection.cmd("QUIT", [reason])
else:
connection.cmd("QUIT")
connection.stop()
self.logger.debug("Logging engine stopped")
logging.shutdown()
sys.exit()
def loop(self): def loop(self):
"""recieves input from the IRC engine and processes it""" """recieves input from the IRC engine and processes it"""
@ -78,6 +75,24 @@ class Bot(object):
time.sleep(.1) time.sleep(.1)
def setup(self):
"""create the logger and config objects"""
# logging
self.logger = get_logger()
self.logger.debug("Logging engine started.")
# data folder
self.data_dir = os.path.abspath('data')
if not os.path.exists(self.data_dir):
self.logger.debug("Data folder not found, creating.")
os.mkdir(self.data_dir)
self.logger.debug("Created data folder.")
# config
self.config = config.Config(self.logger)
self.logger.debug("Config object created.")
def connect(self): def connect(self):
"""connect to all the networks defined in the bot config""" """connect to all the networks defined in the bot config"""
for conf in self.config['connections']: for conf in self.config['connections']:
@ -97,49 +112,33 @@ class Bot(object):
else: else:
self.connections[name] = irc.IRC(name, server, nick, conf = conf, self.connections[name] = irc.IRC(name, server, nick, conf = conf,
port = port, channels = conf['channels']) port = port, channels = conf['channels'])
self.logger.debug("({}) Created connection.".format(name)) self.logger.debug("({}) Created connection.".format(name))
def setup(self): def stop(self, reason=None):
"""create the logger and config objects""" """quits all networks and shuts the bot down"""
# logging self.logger.info("Stopping bot.")
self.logger = self.new_logger() self.running = False
self.logger.debug("Logging engine started.")
# data folder # wait for the bot loop to stop
self.data_dir = os.path.abspath('data') time.sleep(1)
if not os.path.exists(self.data_dir): self.config.observer.stop()
self.logger.debug("Data folder not found, creating.") self.logger.debug("Stopping config reloader.")
os.mkdir(self.data_dir)
self.logger.debug("Created data folder.")
# config self.loader.stop()
self.config = config.Config(self.logger) self.logger.debug("Stopping plugin loader.")
self.logger.debug("Config object created.")
for name, connection in self.connections.iteritems():
self.logger.debug("({}) Closing connection.".format(name))
def new_logger(self): if reason:
"""create and return a new logger object""" connection.cmd("QUIT", [reason])
# create logger else:
logger = logging.getLogger("cloudbot") connection.cmd("QUIT")
logger.setLevel(logging.DEBUG)
# add a file handler connection.stop()
log_name = "bot.log"
fh = logging.FileHandler(log_name)
fh.setLevel(logging.DEBUG)
# stdout handler self.logger.debug("Logging engine stopped")
sh = logging.StreamHandler() logging.shutdown()
sh.setLevel(logging.INFO) sys.exit()
# create a formatter and set the formatter for the handler.
frmt = logging.Formatter('%(asctime)s [%(levelname)s] %(message)s')
fh.setFormatter(frmt)
simple_frmt = logging.Formatter('[%(levelname)s] %(message)s')
sh.setFormatter(simple_frmt)
# add the Handlers to the logger
logger.addHandler(fh)
logger.addHandler(sh)
return logger

View file

@ -105,7 +105,7 @@ class SendThread(threading.Thread):
def run(self): def run(self):
while not self.shutdown: while not self.shutdown:
line = self.output_queue.get().splitlines()[0][:500] line = self.output_queue.get().splitlines()[0][:500]
print u"[{}]> {}".format(self.conn_name.upper(), line) print u"[{}]: {}".format(self.conn_name, line)
self.output_buffer += line.encode('utf-8', 'replace') + '\r\n' self.output_buffer += line.encode('utf-8', 'replace') + '\r\n'
while self.output_buffer: while self.output_buffer:
sent = self.socket.send(self.output_buffer) sent = self.socket.send(self.output_buffer)