mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-04-13 09:42:01 +00:00
Adding a new queue that handles new feeds, so they can be prioritized over updating old feeds.
This commit is contained in:
parent
0143fee6c8
commit
9d265e9db0
5 changed files with 47 additions and 20 deletions
|
@ -3,6 +3,7 @@ from django.db import models
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from apps.rss_feeds.models import Feed, DuplicateFeed
|
from apps.rss_feeds.models import Feed, DuplicateFeed
|
||||||
from apps.reader.models import UserSubscription, UserSubscriptionFolders
|
from apps.reader.models import UserSubscription, UserSubscriptionFolders
|
||||||
|
from apps.rss_feeds.tasks import NewFeeds
|
||||||
import datetime
|
import datetime
|
||||||
import lxml.etree
|
import lxml.etree
|
||||||
from utils import json, urlnorm
|
from utils import json, urlnorm
|
||||||
|
@ -26,6 +27,13 @@ class Importer:
|
||||||
UserSubscriptionFolders.objects.filter(user=self.user).delete()
|
UserSubscriptionFolders.objects.filter(user=self.user).delete()
|
||||||
UserSubscription.objects.filter(user=self.user).delete()
|
UserSubscription.objects.filter(user=self.user).delete()
|
||||||
|
|
||||||
|
def queue_new_feeds(self):
|
||||||
|
new_feeds = UserSubscription.objects.filter(user=self.user, feed__fetched_once=False).values('feed_id')
|
||||||
|
new_feeds = list(set([f['feed_id'] for f in new_feeds]))
|
||||||
|
logging.info(" ---> [%s] Queueing NewFeeds: (%s) %s" % (self.user, len(new_feeds), new_feeds))
|
||||||
|
size = 4
|
||||||
|
for t in (new_feeds[pos:pos + size] for pos in xrange(0, len(new_feeds), size)):
|
||||||
|
NewFeeds.apply_async(args=[t], queue="new_feeds")
|
||||||
|
|
||||||
class OPMLImporter(Importer):
|
class OPMLImporter(Importer):
|
||||||
|
|
||||||
|
@ -38,7 +46,7 @@ class OPMLImporter(Importer):
|
||||||
self.clear_feeds()
|
self.clear_feeds()
|
||||||
folders = self.process_outline(outline)
|
folders = self.process_outline(outline)
|
||||||
UserSubscriptionFolders.objects.create(user=self.user, folders=json.encode(folders))
|
UserSubscriptionFolders.objects.create(user=self.user, folders=json.encode(folders))
|
||||||
|
self.queue_new_feeds()
|
||||||
return folders
|
return folders
|
||||||
|
|
||||||
def process_outline(self, outline):
|
def process_outline(self, outline):
|
||||||
|
@ -106,6 +114,7 @@ class GoogleReaderImporter(Importer):
|
||||||
logging.info(" ---> [%s] Google Reader import: %s" % (self.user, self.subscription_folders))
|
logging.info(" ---> [%s] Google Reader import: %s" % (self.user, self.subscription_folders))
|
||||||
UserSubscriptionFolders.objects.create(user=self.user,
|
UserSubscriptionFolders.objects.create(user=self.user,
|
||||||
folders=json.encode(self.subscription_folders))
|
folders=json.encode(self.subscription_folders))
|
||||||
|
self.queue_new_feeds()
|
||||||
|
|
||||||
def parse(self):
|
def parse(self):
|
||||||
self.feeds = lxml.etree.fromstring(self.feeds_xml).xpath('/object/list/object')
|
self.feeds = lxml.etree.fromstring(self.feeds_xml).xpath('/object/list/object')
|
||||||
|
|
|
@ -2,7 +2,7 @@ from django.core.management.base import BaseCommand
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from apps.rss_feeds.models import Feed
|
from apps.rss_feeds.models import Feed
|
||||||
from optparse import make_option
|
from optparse import make_option
|
||||||
from apps.rss_feeds.tasks import RefreshFeed
|
from apps.rss_feeds.tasks import UpdateFeeds
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
|
|
||||||
|
@ -40,9 +40,9 @@ class Command(BaseCommand):
|
||||||
|
|
||||||
if i == 12:
|
if i == 12:
|
||||||
print feed_queue
|
print feed_queue
|
||||||
RefreshFeed.apply_async(args=(feed_queue,))
|
UpdateFeeds.apply_async(args=(feed_queue,))
|
||||||
feed_queue = []
|
feed_queue = []
|
||||||
i = 0
|
i = 0
|
||||||
if feed_queue:
|
if feed_queue:
|
||||||
print feed_queue
|
print feed_queue
|
||||||
RefreshFeed.apply_async(args=(feed_queue,))
|
UpdateFeeds.apply_async(args=(feed_queue,))
|
|
@ -1,8 +1,8 @@
|
||||||
from celery.task import Task
|
from celery.task import Task
|
||||||
from apps.rss_feeds.models import Feed
|
from apps.rss_feeds.models import Feed
|
||||||
|
|
||||||
class RefreshFeed(Task):
|
class UpdateFeeds(Task):
|
||||||
name = 'refresh-feed'
|
name = 'update-feeds'
|
||||||
max_retries = 0
|
max_retries = 0
|
||||||
ignore_result = True
|
ignore_result = True
|
||||||
|
|
||||||
|
@ -14,3 +14,5 @@ class RefreshFeed(Task):
|
||||||
feed = Feed.objects.get(pk=feed_pk)
|
feed = Feed.objects.get(pk=feed_pk)
|
||||||
feed.update()
|
feed.update()
|
||||||
|
|
||||||
|
class NewFeeds(UpdateFeeds):
|
||||||
|
name = 'new-feeds'
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
BROKER_HOST = "db01.newsblur.com"
|
|
||||||
BROKER_PORT = 5672
|
|
||||||
BROKER_USER = "newsblur"
|
|
||||||
BROKER_PASSWORD = "newsblur"
|
|
||||||
BROKER_VHOST = "newsblurvhost"
|
|
||||||
|
|
||||||
CELERY_RESULT_BACKEND = "amqp"
|
|
||||||
|
|
||||||
CELERY_IMPORTS = ("apps.rss_feeds.tasks", )
|
|
||||||
CELERYD_CONCURRENCY = 1
|
|
||||||
CELERY_IGNORE_RESULT = True
|
|
||||||
CELERYD_MAX_TASKS_PER_CHILD = 100
|
|
||||||
CELERY_DISABLE_RATE_LIMITS = True
|
|
31
settings.py
31
settings.py
|
@ -223,9 +223,38 @@ DEVSERVER_MODULES = (
|
||||||
# = Celery =
|
# = Celery =
|
||||||
# ==========
|
# ==========
|
||||||
|
|
||||||
from celeryconfig import *
|
|
||||||
import djcelery
|
import djcelery
|
||||||
djcelery.setup_loader()
|
djcelery.setup_loader()
|
||||||
|
CELERY_ROUTES = {
|
||||||
|
"apps.rss_feeds.tasks.NewFeeds": {
|
||||||
|
"queue": "new_feeds"
|
||||||
|
},
|
||||||
|
"apps.rss_feeds.tasks.UpdateFeeds": {
|
||||||
|
"queue": "update_feeds"
|
||||||
|
},
|
||||||
|
}
|
||||||
|
CELERY_QUEUES = {
|
||||||
|
"new_feeds": {
|
||||||
|
"binding_key": "new_feeds"
|
||||||
|
},
|
||||||
|
"update_feeds": {
|
||||||
|
"binding_key": "update_feeds"
|
||||||
|
},
|
||||||
|
}
|
||||||
|
CELERY_DEFAULT_QUEUE = "update_feeds"
|
||||||
|
BROKER_HOST = "db01.newsblur.com"
|
||||||
|
BROKER_PORT = 5672
|
||||||
|
BROKER_USER = "newsblur"
|
||||||
|
BROKER_PASSWORD = "newsblur"
|
||||||
|
BROKER_VHOST = "newsblurvhost"
|
||||||
|
|
||||||
|
CELERY_RESULT_BACKEND = "amqp"
|
||||||
|
|
||||||
|
CELERY_IMPORTS = ("apps.rss_feeds.tasks", )
|
||||||
|
CELERYD_CONCURRENCY = 4
|
||||||
|
CELERY_IGNORE_RESULT = True
|
||||||
|
CELERYD_MAX_TASKS_PER_CHILD = 100
|
||||||
|
CELERY_DISABLE_RATE_LIMITS = True
|
||||||
|
|
||||||
# ==================
|
# ==================
|
||||||
# = Configurations =
|
# = Configurations =
|
||||||
|
|
Loading…
Add table
Reference in a new issue