Skip to content

Commit

Permalink
Tried again to fix the update_feeds cron hanging, adding logging this…
Browse files Browse the repository at this point in the history
… time.
  • Loading branch information
jacobian committed Jun 27, 2011
1 parent 10a0d12 commit b3e4720
Showing 1 changed file with 29 additions and 4 deletions.
33 changes: 29 additions & 4 deletions django_website/aggregator/management/commands/update_feeds.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import logging
import datetime
import feedparser
import optparse
Expand Down Expand Up @@ -27,6 +28,9 @@ class Command(BaseCommand):
)

def handle(self, *args, **kwargs):
log = self.setup_logging()
log.debug('Starting run.')

try:
lockfile = os.open(self.LOCKFILE, os.O_CREAT | os.O_EXCL)
except OSError:
Expand All @@ -39,13 +43,15 @@ def handle(self, *args, **kwargs):
verbose = True

try:
socket.setdefaulttimeout(15)
self.update_feeds(verbose=verbose, num_threads=kwargs['threads'])
except:
sys.exit(1)
log.exception('Uncaught exception updating feeds.')
finally:
log.debug('Cleaning up.')
os.close(lockfile)
os.unlink(self.LOCKFILE)

log.debug('Ending run.')

def update_feeds(self, verbose=False, num_threads=4):
feed_queue = Queue.Queue()
Expand All @@ -58,14 +64,25 @@ def update_feeds(self, verbose=False, num_threads=4):

[t.start() for t in threadpool]
[t.join() for t in threadpool]


def setup_logging(self):
log = logging.getLogger('django_website.update_feeds')
log.setLevel(logging.DEBUG)
handler = logging.FileHandler('/var/log/update_feeds.log')
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s [%(levelname)s]: %(message)s')
handler.setFormatter(formatter)
log.addHandler(handler)
return log

class FeedUpdateWorker(threading.Thread):

def __init__(self, q, verbose, **kwargs):
super(FeedUpdateWorker, self).__init__(**kwargs)
self.daemon = True
self.verbose = verbose
self.q = q
self.log = logging.getLogger('django_website.update_feeds')

def run(self):
while 1:
Expand All @@ -77,10 +94,17 @@ def run(self):
self.q.task_done()

def update_feed(self, feed):
self.log.debug('Starting update: %s (%s)' % (feed, feed.feed_url))
if self.verbose:
print feed

parsed_feed = feedparser.parse(feed.feed_url)
try:
socket.setdefaulttimeout(15)
parsed_feed = feedparser.parse(feed.feed_url)
except Exception:
self.log.exception('Error updating %s (%s)' % (feed, feed.feed_url))
return

for entry in parsed_feed.entries:
# Parse out the entry, handling all the fun stuff that feeds can do.
title = entry.title
Expand Down Expand Up @@ -118,3 +142,4 @@ def update_feed(self, feed):
summary = content,
date_modified = date_modified
)
self.log.debug('Done with %s (%s)' % (feed, feed.feed_url))

0 comments on commit b3e4720

Please sign in to comment.