Skip to content

Commit b6b6036

Browse files
author
Matt George
committed
updating logging for the horde package.
1 parent 77f8454 commit b6b6036

File tree

2 files changed

+48
-26
lines changed

2 files changed

+48
-26
lines changed

pyres/horde.py

Lines changed: 46 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,31 +7,47 @@
77
import time, os, signal
88
import datetime
99
import logging
10-
10+
import logging.handlers
1111
from pyres import ResQ, Stat
1212
from pyres.exceptions import NoQueueError
1313
from pyres.utils import OrderedDict
1414
from pyres.job import Job
1515
import pyres.json_parser as json
1616

17+
def setup_logging(namespace='', log_level=logging.INFO, log_file=None):
18+
19+
logger = multiprocessing.get_logger()
20+
#logger = multiprocessing.log_to_stderr()
21+
logger.setLevel(log_level)
22+
format = '%(asctime)s %(levelname)s '+namespace+': %(message)s'
23+
if log_file:
24+
handler = logging.handlers.RotatingFileHandler(log_file, maxBytes=104857600, backupCount=5)
25+
else:
26+
handler = logging.StreamHandler()
27+
handler.setFormatter(logging.Formatter((format)))
28+
logger.addHandler(handler)
29+
return logger
30+
1731
class Minion(multiprocessing.Process):
18-
def __init__(self, queues, server, password):
19-
#super(Minion,self).__init__(name='Minion')
32+
def __init__(self, queues, server, password, log_level=logging.INFO, log_file=None):
2033
multiprocessing.Process.__init__(self, name='Minion')
2134

22-
format = '%(asctime)s %(levelname)s %(filename)s-%(lineno)d: %(message)s'
23-
logHandler = logging.StreamHandler()
24-
logHandler.setFormatter(logging.Formatter(format))
25-
self.logger = multiprocessing.get_logger()
26-
self.logger.addHandler(logHandler)
27-
self.logger.setLevel(logging.DEBUG)
35+
#format = '%(asctime)s %(levelname)s %(filename)s-%(lineno)d: %(message)s'
36+
#logHandler = logging.StreamHandler()
37+
#logHandler.setFormatter(logging.Formatter(format))
38+
#self.logger = multiprocessing.get_logger()
39+
#self.logger.addHandler(logHandler)
40+
#self.logger.setLevel(logging.DEBUG)
2841

2942
self.queues = queues
3043
self._shutdown = False
3144
self.hostname = os.uname()[1]
3245
self.server = server
3346
self.password = password
3447

48+
self.log_level = log_level
49+
self.log_file = log_file
50+
3551
def prune_dead_workers(self):
3652
pass
3753

@@ -68,15 +84,15 @@ def process(self, job):
6884
return
6985
try:
7086
self.working_on(job)
71-
return job.perform()
87+
job.perform()
7288
except Exception, e:
7389
exceptionType, exceptionValue, exceptionTraceback = sys.exc_info()
7490
self.logger.error("%s failed: %s" % (job, e))
7591
job.fail(exceptionTraceback)
7692
self.failed()
7793
else:
78-
self.logger.info('completed job')
79-
self.logger.debug('job details: %s' % job)
94+
self.logger.debug("Hells yeah")
95+
self.logger.info('completed job: %s' % job)
8096
finally:
8197
self.done_working()
8298

@@ -100,7 +116,7 @@ def processed(self):
100116
total_processed.incr()
101117

102118
def done_working(self):
103-
self.logger.info('done working')
119+
self.logger.debug('done working')
104120
self.processed()
105121
self.resq.redis.delete("resque:minion:%s" % str(self))
106122

@@ -130,6 +146,8 @@ def run(self):
130146
self.resq = self.server
131147
else:
132148
raise Exception("Bad server argument")
149+
namespace = 'minion:%s' % self.pid
150+
self.logger = setup_logging(namespace, self.log_level, self.log_file)
133151
self.work()
134152
#while True:
135153
# job = self.q.get()
@@ -142,7 +160,7 @@ class Khan(object):
142160
'REMOVE': '_remove_minion',
143161
'SHUTDOWN': '_schedule_shutdown'
144162
}
145-
def __init__(self, pool_size=5, queues=[], server='localhost:6379', password=None):
163+
def __init__(self, pool_size=5, queues=[], server='localhost:6379', password=None, logging_level=logging.INFO, log_file=None):
146164
#super(Khan,self).__init__(queues=queues,server=server,password=password)
147165
self._shutdown = False
148166
self.pool_size = int(pool_size)
@@ -154,6 +172,9 @@ def __init__(self, pool_size=5, queues=[], server='localhost:6379', password=Non
154172
self._workers = OrderedDict()
155173
self.server = server
156174
self.password = password
175+
self.logging_level = logging_level
176+
self.log_file = log_file
177+
self.logger = setup_logging('khan', self.logging_level, self.log_file)
157178
#self._workers = list()
158179

159180
def setup_resq(self):
@@ -171,6 +192,7 @@ def validate_queues(self):
171192

172193
def startup(self):
173194
self.register_signal_handlers()
195+
174196

175197
def register_signal_handlers(self):
176198
signal.signal(signal.SIGTERM, self.schedule_shutdown)
@@ -183,7 +205,7 @@ def _schedule_shutdown(self):
183205
self.schedule_shutdown(None, None)
184206

185207
def schedule_shutdown(self, signum, frame):
186-
logging.info('Khan Shutdown scheduled')
208+
self.logger.info('Khan Shutdown scheduled')
187209
self._shutdown = True
188210

189211
def kill_child(self, signum, frame):
@@ -200,16 +222,16 @@ def register_khan(self):
200222

201223
def _check_commands(self):
202224
if not self._shutdown:
203-
logging.debug('Checking commands')
225+
self.logger.debug('Checking commands')
204226
command = self.resq.redis.lpop('resque:khan:%s' % str(self))
205-
logging.debug('COMMAND FOUND: %s ' % command)
227+
self.logger.debug('COMMAND FOUND: %s ' % command)
206228
if command:
207229
import pdb;pdb.set_trace()
208230
self.process_command(command)
209231
self._check_commands()
210232

211233
def process_command(self, command):
212-
logging.info('Processing Command')
234+
self.logger.info('Processing Command')
213235
#available commands, shutdown, add 1, remove 1
214236
command_item = self._command_map.get(command, None)
215237
if command_item:
@@ -224,11 +246,11 @@ def add_minion(self):
224246
self.resq.redis.sadd('resque:khans',str(self))
225247

226248
def _add_minion(self):
227-
logging.info('Adding minion')
228-
m = Minion(self.queues, self.server, self.password)
249+
self.logger.info('Adding minion')
250+
m = Minion(self.queues, self.server, self.password, log_level=self.logging_level)
229251
m.start()
230252
self._workers[m.pid] = m
231-
logging.info('minion added at: %s' % m.pid)
253+
self.logger.info('minion added at: %s' % m.pid)
232254
return m
233255

234256
def _shutdown_minions(self):
@@ -250,7 +272,7 @@ def _remove_minion(self, pid=None):
250272
return m
251273

252274
def unregister_khan(self):
253-
logging.debug('unregistering khan')
275+
self.logger.debug('unregistering khan')
254276
self.resq.redis.srem('resque:khans',str(self))
255277
self.started = None
256278

@@ -279,8 +301,8 @@ def __str__(self):
279301
return '%s:%s:%s' % (hostname, self.pid, self.pool_size)
280302

281303
@classmethod
282-
def run(cls, pool_size=5, queues=[], server='localhost:6379'):
283-
worker = cls(pool_size=pool_size, queues=queues, server=server)
304+
def run(cls, pool_size=5, queues=[], server='localhost:6379', logging_level=logging.INFO):
305+
worker = cls(pool_size=pool_size, queues=queues, server=server, logging_level=logging_level)
284306
worker.work()
285307

286308
#if __name__ == "__main__":

scripts/pyres_manager

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,15 @@ def main():
2424
parser.error("Argument must be a comma seperated list of queues")
2525

2626
log_level = getattr(logging, options.log_level.upper(), 'INFO')
27-
logging.basicConfig(level=log_level, format="%(asctime)s: %(levelname)s: %(message)s")
27+
#logging.basicConfig(level=log_level, format="%(asctime)s: %(levelname)s: %(message)s")
2828

2929
interval = options.interval
3030
if interval is not None:
3131
interval = float(interval)
3232

3333
queues = args[0].split(',')
3434
server = '%s:%s' % (options.host,options.port)
35-
Khan.run(pool_size=options.pool_size, queues=queues, server=server)
35+
Khan.run(pool_size=options.pool_size, queues=queues, server=server, logging_level=log_level)
3636

3737
if __name__ == "__main__":
3838
main()

0 commit comments

Comments
 (0)