allura
修訂 | 76e8541ce0e07c18474db2bcd9a686da0a30ae5b (tree) |
---|---|
時間 | 2010-08-20 06:46:58 |
作者 | Rick Copeland <rcopeland@geek...> |
Commiter | Rick Copeland |
[#765] - speed up ticket stats page so it doesn't time out, leading to an nginx 504 which is translated to a 500
@@ -270,6 +270,7 @@ class Artifact(MappedClass): | ||
270 | 270 | class __mongometa__: |
271 | 271 | session = artifact_orm_session |
272 | 272 | name='artifact' |
273 | + indexes = [ 'app_config_id' ] | |
273 | 274 | def before_save(data): |
274 | 275 | data['mod_date'] = datetime.utcnow() |
275 | 276 | if c.project: |
@@ -547,7 +548,7 @@ class Message(Artifact): | ||
547 | 548 | class __mongometa__: |
548 | 549 | session = artifact_orm_session |
549 | 550 | name='message' |
550 | - indexes = [ 'slug', 'parent_id' ] | |
551 | + indexes = Artifact.__mongometa__.indexes + [ 'slug', 'parent_id', 'timestamp' ] | |
551 | 552 | type_s='Generic Message' |
552 | 553 | |
553 | 554 | _id=FieldProperty(str, if_missing=h.gen_message_id) |
@@ -26,7 +26,7 @@ from allura.lib.search import search_artifact | ||
26 | 26 | from allura.lib.decorators import audit, react |
27 | 27 | from allura.lib.security import require, has_artifact_access |
28 | 28 | from allura.model import ProjectRole, TagEvent, UserTags, ArtifactReference, Feed, User |
29 | -from allura.model import Mailbox | |
29 | +from allura.model import Mailbox, Post | |
30 | 30 | from allura.lib import widgets as w |
31 | 31 | from allura.lib.widgets import form_fields as ffw |
32 | 32 | from allura.lib.widgets.subscriptions import SubscribeForm |
@@ -440,19 +440,11 @@ class RootController(BaseController): | ||
440 | 440 | return count |
441 | 441 | |
442 | 442 | def ticket_comments_since(self, when=None): |
443 | - count = 0 | |
444 | - q = [] | |
445 | - tickets = model.Ticket.query.find(dict(app_config_id=c.app.config._id)) | |
446 | - if when: | |
447 | - for ticket in tickets: | |
448 | - posts = ticket.discussion_thread().find_posts(limit=None, | |
449 | - style='linear', timestamp={'$gte':when}) | |
450 | - count = count + len(posts) | |
451 | - else: | |
452 | - for ticket in tickets: | |
453 | - posts = ticket.discussion_thread().find_posts(limit=None, style='linear') | |
454 | - count = count + len(posts) | |
455 | - return count | |
443 | + q = dict( | |
444 | + discussion_id=c.app.config.discussion_id) | |
445 | + if when is not None: | |
446 | + q['timestamp'] = {'$gte':when} | |
447 | + return Post.query.find(q).count() | |
456 | 448 | |
457 | 449 | @with_trailing_slash |
458 | 450 | @expose('forgetracker.templates.stats') |