Commit Graph

249 Commits

Author SHA1 Message Date
Guo Xiang Tan 258e9e35ca PERF: Make mega topics work without a stream.
There are tradeoffs that we took here. For the complete
story see
https://meta.discourse.org/t/performance-improvements-on-long-topics/30187/27?u=tgxworld.
2018-07-12 12:46:12 +08:00
Guo Xiang Tan b4e1388f9b PERF: Drop support for gaps in mega topics.
Based on our current implementation, there isn't a
practical way to determine the gaps of large topics
cheaply. We tried to load the gaps in chunks but felt
that the code becomes too complicated. Note that
megatopics are quite rare in the wild.
2018-07-10 16:27:02 +08:00
Guo Xiang Tan 21f333654c REFACTOR: Reduce dependency on the post stream in `TopicView`.
This will allow us to drop the post stream from the payload for
mega-topics. On smaller topics, the extra query is fast because
of an existing index.
2018-07-10 15:53:00 +08:00
Guo Xiang Tan 252e5574cc FIX: Prevent ambigous column errors when joining `TopicView` queries. 2018-06-29 10:33:08 +08:00
Guo Xiang Tan eb427f7cf4 PERF: Update `TopicView#participant_count` to use `Topic#posts_count`.
Use the counter cache instead of hitting the DB and plucking
every single id.
2018-06-27 17:18:47 +08:00
Guo Xiang Tan cfa7898c2d Rename `TopicView#last_read_post_id` to `TopicView#filtered_post_id`. 2018-06-27 12:33:57 +08:00
Guo Xiang Tan cb69888758 PERF: Don't pluck all the columns just to retrieve a single value. 2018-06-27 11:41:35 +08:00
Guo Xiang Tan 49ffc1eb61 Revert "PERF: Send down gaps as the relevant posts load instead of front loading."
This reverts commit 4c3352528e.
2018-06-26 12:54:14 +08:00
Guo Xiang Tan 4c3352528e PERF: Send down gaps as the relevant posts load instead of front loading. 2018-06-26 12:49:06 +08:00
Guo Xiang Tan 0b6a2e9d1f Remove force summary mode for megatopics for now.
The logic is too hairy and we can't reliably determine
when to force summary mode. Work is underway to improve
perf for megatopics so this will not be required
eventually.
2018-06-26 12:49:06 +08:00
Guo Xiang Tan 5100a62fc0 FIX: Megatopics forced into summary mode when loading posts. 2018-06-25 22:11:56 +08:00
Guo Xiang Tan f69356e628 FIX: Users can't "show all posts" in forced summary topics. 2018-06-22 11:32:45 +08:00
Guo Xiang Tan 9a7a079f4d Force summary mode when user enters at the top of megalodoon topics. 2018-06-21 15:18:52 +08:00
Guo Xiang Tan f7d22bad90 FEATURE: Forced summary mode for megalodon topics.
This is mainly done for performance reasons and megalodon
topics are usually a byproduct of imports where site setting
limits are not respected.
2018-06-21 14:00:20 +08:00
Guo Xiang Tan 5cef4e281b PERF: Memoize `TopicView#gaps` results. 2018-06-21 12:37:24 +08:00
Sam 2d59d06916 PERF: mega_topics get no post counts per user 2018-06-21 11:09:45 +10:00
Guo Xiang Tan ff5fc3cb08 Use a fixed limit for mega topic posts count. 2018-06-20 16:58:52 +08:00
Guo Xiang Tan 9c925a66ff PERF: Don't display days ago on timeline for megatopics.
Analysis using `pg_stat_statements` showed this query
to be eating up a significant portion of CPU.
2018-06-20 16:25:54 +08:00
Sam cbdab71179 PERF: stop counting participants on very large topics
This query gets very expensive and can be bypassed on large topics
2018-06-20 18:11:39 +10:00
Sam 5f64fd0a21 DEV: remove exec_sql and replace with mini_sql
Introduce new patterns for direct sql that are safe and fast.

MiniSql is not prone to memory bloat that can happen with direct PG usage.
It also has an extremely fast materializer and very a convenient API

- DB.exec(sql, *params) => runs sql returns row count
- DB.query(sql, *params) => runs sql returns usable objects (not a hash)
- DB.query_hash(sql, *params) => runs sql returns an array of hashes
- DB.query_single(sql, *params) => runs sql and returns a flat one dimensional array
- DB.build(sql) => returns a sql builder

See more at: https://github.com/discourse/mini_sql
2018-06-19 16:13:36 +10:00
Guo Xiang Tan 81b5d61fa7 FIX: `topic_destroyed` web hook couldn't find topic. 2018-05-28 17:38:02 +08:00
Régis Hanol c5c1d8e180 Add support for the '/p/:post_id' route on the client-side 2018-03-24 02:44:39 +01:00
Arpit Jalan 345b453ee1 optimize query for fetching PM created in previous hour 2018-03-12 16:40:17 +05:30
Arpit Jalan 3a35f459c7 optimize last pm log fetching 2018-03-11 09:34:08 +05:30
Arpit Jalan f862122978 FIX: do not log personal message view if there exists a similar log in previous hour 2018-03-11 09:23:32 +05:30
Arpit Jalan b9a669ba32 FIX: do not log personal message view if user can't see the message 2018-02-25 22:39:25 +05:30
Arpit Jalan 1f6adbea5c FEATURE: log private message views 2018-01-29 08:08:08 +05:30
Sam dee498a281 correct regression 2017-12-13 17:36:36 +11:00
Sam 9d925f6b26 FIX: correctly count participants when more than 24
Also cuts out one query for the normal case
2017-12-13 17:19:42 +11:00
Gerhard Schlager 44ee388070 FEATURE: omit images from og and twitter description tags 2017-11-28 21:34:02 +01:00
Régis Hanol 47e79570cc FIX: frequent posters wasn't displaying the correct information 2017-10-02 17:47:04 +02:00
Robin Ward 00b190af75 Revert "A safe way to create class variables in a multisite environment."
The approach taken by this interface was flawed. We need a better
solution.
2017-09-29 11:06:12 -04:00
Robin Ward 3e13becf33 A safe way to create class variables in a multisite environment.
This should allow plugins to set class variables that will not
stomp on other plugins.
2017-09-27 13:00:47 -04:00
Guo Xiang Tan 5be5def217 PERF: Bypass AR and just use raw SQL. 2017-09-25 13:48:59 +08:00
Régis Hanol 797936d2c5 FIX: don't leak whisper count in user card 2017-09-14 20:08:16 +02:00
Régis Hanol 0096ee40da FIX: only show participants the user can see 2017-09-13 17:14:03 +02:00
Guo Xiang Tan 58321d0783 PERF: Remove `Object#present?` check introduced in e0d5d9670a. 2017-09-07 21:36:27 +08:00
Guo Xiang Tan e0d5d9670a Fix the build. 2017-09-07 18:41:44 +08:00
Guo Xiang Tan 3e123b1a39 PERF: Use `pluck` instead of enmurating through all the records. 2017-09-07 17:24:23 +08:00
Régis Hanol 75e4f7f896 Shorten some very long lines
Prevent warnings from already defined constants when reloading
2017-08-12 04:18:04 +02:00
Régis Hanol ecbeaed0bc fix weird indentation 2017-08-04 17:28:25 +02:00
Régis Hanol c76161787c eager load more tables for the topic_view 2017-08-04 17:23:53 +02:00
Guo Xiang Tan 5012d46cbd Add rubocop to our build. (#5004) 2017-07-28 10:20:09 +09:00
Sam 6ddd8d9166 FIX: when entering topics "tracking" would not be set
There was a timing issue when subscribing to messages for topics.

Old flow:

- We generate JSON for topic
- We subscribe to messages for topic

New flow:

- We keep track of last id in the topic message bus channel
- We generate JSON
- We subscribe to messages for topic starting at saved message id

This ensures that there is complete overlap for message consumption
and that there are no cases where an update may go missing due to timing
2017-05-16 15:04:21 -04:00
Neil Lalonde 5a8bbe663a FEATURE: include most popular tag in page title for webcrawlers of tagged uncategorized topics 2017-02-07 16:55:42 -05:00
Neil Lalonde 61d4c1203e FEATURE: group avatar flair shows on topic participants list, and participant avatars can have custom styles 2017-01-18 11:38:00 -05:00
Arpit Jalan 988aca6d92 FIX: bump opengraph user avatar image to 200px 2016-11-26 23:00:18 +05:30
Arpit Jalan 382803cb05 FEATURE: include post image in OpenGraph image tag 2016-10-31 15:11:33 +05:30
Rafael dos Santos Silva 0229df4c73 Second review fixes 2016-09-26 20:46:55 -03:00
Rafael dos Santos Silva 2a5a0bebb3 Adjusts from review 2016-09-26 20:46:55 -03:00
Rafael dos Santos Silva 804019647e Makes it possible to paginate on print page 2016-09-26 20:46:55 -03:00
Rafael dos Santos Silva 9a46af59ad FIX: TopicView were using Topic.relative_url instead of TopicView.relative_url on all methods. 2016-09-26 20:46:55 -03:00
Rafael dos Santos Silva 70c68f0a7c Open print dialog automatically 2016-09-26 20:44:50 -03:00
Rafael dos Santos Silva c12e533273 Feature: Adds a button to print a topic 2016-09-26 20:44:50 -03:00
Arpit Jalan a39929d12e FEATURE: add opengraph and twitter meta tags on every page 2016-08-21 22:08:49 +05:30
Robin Ward 559fa36c18
FEATURE: Topic timeline widget 2016-05-31 10:51:39 -04:00
Robin Ward 65392f37bb
FIX: Apply both embedded post filters 2016-05-03 15:19:59 -04:00
Robin Ward 664f1913c8
FIX: Don't include hidden posts in embedded comments 2016-05-03 15:01:20 -04:00
Régis Hanol 4960b62110 FEATURE: new 'block_auto_generated_emails' site setting 2016-04-20 21:29:27 +02:00
Arpit Jalan e30c8239a2 FEATURE: show poster avatar for remote Discourse post onebox 2016-04-15 00:03:37 +05:30
Neil Lalonde a299231f9a FEATURE: add setting to omit category name from topic page title tag 2016-04-11 16:44:16 -04:00
Robin Ward 1006b1ba94 Various Plugin Enhancements and Extension Points 2016-03-11 15:53:37 -05:00
Guo Xiang Tan e8de80de98 FIX: Default to first page when page params is an array. 2016-02-25 11:32:58 +08:00
Sam Saffron bc75010b20 FEATURE: suggested messages for messages
FEATURE: clicking envelope takes you to inbox

Suggested messages works somewhat like suggested topics.

- New show up first (in either group inbox or inbox)
- Then unread (in either group inbox or inbox)
- Finally "related" which are messages with same participants as the current pm.
2016-02-03 18:50:05 +11:00
Régis Hanol 98c0fac461 FEATURE: add small action post when adding/removing users in messages 2016-01-11 12:42:06 +01:00
Arpit Jalan 51ced7aeae make site setting for read time word count per minute 2015-12-30 12:15:30 +05:30
Arpit Jalan 6ef1537ee0 FEATURE: better unfurling of Discourse topics on Slack 2015-12-28 19:10:19 +05:30
Régis Hanol 37c5909a31 FIX: use the first image in the first post in the topic as opengraph image
FEATURE: new 'default_opengraph_image_url' setting
2015-10-15 11:00:47 +02:00
Sam 47597ae6b3 PERF: better caching in topic view 2015-09-28 16:50:24 +10:00
Régis Hanol 4f7140fb32 FIX: properly filter whispers in user stream 2015-09-22 00:50:52 +02:00
Kane York c9e4745fe8 FIX: Return 410 Gone for deleted topics you could otherwise see 2015-09-18 00:14:43 -07:00
Robin Ward 5af0f5f80e FEATURE: Whisper posts 2015-09-11 14:05:21 -04:00
Kane York 460243d7a3 FIX: Give 403 for deleted topics, +lots of tests 2015-09-11 08:29:44 -07:00
Robin Ward bb93a345eb UX: Use smaller messages for moderator actions. 2015-07-27 10:09:21 -04:00
Sam 940be8261a FIX: going to PM directly results in 500 error
regressed 1 day ago.
2015-07-23 09:57:42 +10:00
Sam 90b85e5b23 FIX: missing category from title in non-js view 2015-07-22 10:26:58 +10:00
Sam 4167757dee correct exception when page is sent in as array 2015-05-07 10:49:29 +10:00
Sam c3e3afcb2c PERF: eliminate N+1 query due to polls 2015-05-04 16:12:03 +10:00
Régis Hanol a737090442 - FEATURE: revamped poll plugin
- add User.staff scope
- inject MessageBus into Ember views (so it can be used by the poll plugin)
- REFACTOR: use more accurate is_first_post? method instead of post_number == 1
- FEATURE: add support for JSON-typed custom fields
- FEATURE: allow plugins to add validation
- FEATURE: add post_custom_fields to PostSerializer
- FEATURE: allow plugins to whitelist post_custom_fields
- FIX: don't bump when post did not save successfully
- FEATURE: polls are supported in any post
- FEATURE: allow for multiple polls in the same post
- FEATURE: multiple choice polls
- FEATURE: rating polls
- FEATURE: new dialect allowing users to preview polls in the composer
2015-04-23 19:33:29 +02:00
Sam Saffron 27aa0bc056 PERF: eliminate query that grabs every post number on topic page. 2015-04-23 00:10:09 +10:00
Sam 9698447e89 FEATURE: support staff only custom user fields 2015-03-03 17:51:01 +11:00
Sam 52bc03b5e6 FIX: summary mode was broken and missing a bunch of posts 2015-01-30 17:19:42 +11:00
Neil Lalonde 4a11bb5227 FIX: on topic page, don't try to render post counts for a deleted user 2015-01-15 15:39:34 -05:00
Sam ae16186100 FEATURE: post chunk size should not be configurable
If people need to configure post chunk size use a plugin
Core only supports out of the box settings, if changed can lead to
severe performance issues.
2014-12-15 10:57:34 +11:00
Robin Ward 2d6b15a34d Load fewer posts when the android platform is detected 2014-12-12 11:47:39 -05:00
Régis Hanol fe007d08b3 FIX: remove links and html 'hellips' from topic/post summaries 2014-12-08 00:23:53 +01:00
Régis Hanol 929ff00741 FIX: use excerpt instead of the summary 2014-12-06 18:48:39 +01:00
Robin Ward 3eb020c466 Max out summary filter at 100 posts. 2014-10-28 15:58:04 -04:00
Jeff Atwood 92b615b503 reorganize site settings a bit 2014-10-19 23:14:50 -07:00
Régis Hanol 3ae1ebdfc3 FIX: use PostDestroyer when deleting/recovering a topic 2014-08-07 19:12:35 +02:00
Régis Hanol 2e134742d4 FIX: only show 'defer flags' when there are active flags on the post 2014-08-04 17:29:01 +02:00
riking 19b757b058 FEATURE: Hide deleted posts by default for staff 2014-07-17 10:40:15 -07:00
Robin Ward 60cb5ea6a9 FIX: If a user is deleted, don't break embedded comments for admins. 2014-06-18 17:39:36 -04:00
Régis Hanol 0df666277d BUGFIXES: properly deal with bookmarks and deleted posts
BUGFIX: removing a bookmark from the activity feed was busted for deleted posts
BUGFIX: delete associated user actions when deleting a post
2014-06-04 17:41:11 +02:00
Sam 3405253405 FEATURE: rush posting read times for newly read posts
FEATURE: "read" indicator on posts
CHANGE: anon is now assumed to have read everything
2014-06-03 11:48:52 +10:00
Sam 2ad756464e SECURITY: TopicView not correctly restricting to topic 2014-05-29 21:56:26 +10:00
Robin Ward 3211c60bbe FEATURE: A new site setting `public_user_custom_fields` which allows you
to whitelist custom fields that will be exposed to the Ember client
application.
2014-05-14 14:39:01 -04:00
Neil Lalonde 9f4171e487 Fix my prev_page code, thanks to riking 2014-05-13 10:15:28 -04:00
Louis Rose 1574485443 Perform the where(...).first to find_by(...) refactoring.
This refactoring was automated using the command: bundle exec "ruby refactorings/where_dot_first_to_find_by/app.rb"
2014-05-06 14:41:59 +01:00
Robin Ward 158487dfc2 FIX: Clean up next/prev rel links 2014-03-03 12:56:37 -05:00
Robin Ward b61df08d1b FEATURE: Admin selector to choose a primary group for a user, display it
and apply a CSS class to their posts.
2014-02-10 17:00:15 -05:00
Robin Ward 194081ca47 FIX: Hidden posts were not being displayed with the correct messaging. 2014-01-21 17:23:03 -05:00
Robin Ward 1ffcf39448 Make embedded comments look nicer 2014-01-03 12:52:42 -05:00
Robin Ward 744add9ece FIX: Post count progress was a little off. Minor fix to hidden posts 2013-12-09 14:28:32 -05:00
Robin Ward 79427732b2 Show Gaps in the post stream when filters are active
Conflicts:
	app/assets/javascripts/discourse/templates/topic.js.handlebars
2013-12-05 16:46:59 -05:00
Robin Ward a2b70f64ca FIX: Hidden posts would screw up the docking of the post progress 2013-11-27 14:59:14 -05:00
Robin Ward 4ce81e1b01 Rename "Best Of" to "Summary" 2013-11-18 12:48:26 -05:00
Robin Ward ad3e276b4b Rename TopicSummary -> TopicMap 2013-11-18 12:08:21 -05:00
Manoj 9650dbb97c Refactor topics controller
Refactor: 1) TopicsController to reduce code climate complexity.
2) Topic model, addressed comments

fix typo
2013-10-28 11:42:07 +05:30
Sam 094b5eccca bug fixes for user_stat extraction, decrease querying 2013-10-07 15:05:00 +11:00
Sam 4933e9d6ab todo added to code 2013-09-05 09:33:51 +10:00
Neil Lalonde 117fc8db58 Change the way nuked users' posts are handled. Allow null in the user_id column of posts. Show these posts in the posts stream. 2013-09-04 15:42:21 -04:00
Navin 2ea15adad9 Extract methods to improve flog score of TopicView 2013-08-13 18:23:04 +02:00
Navin 9c5b5e3c7d Refactor TopicView - extract filter method to FilterBestPosts
Still much to do but this should reduce the complexity scores
for TopicView
2013-07-12 15:54:54 +02:00
Robin Ward 19c169540c Staff can enter and view deleted topics 2013-07-11 16:39:35 -04:00
Neil Lalonde 8814f9ed05 Fix a case when a staff user views a topic with a deleted post by a nuked user; might be a temporary solution until we decide what to do with nuked records 2013-07-10 16:52:47 -04:00
Robin Ward cfc4dda9ff FIX: OpenGraph should feature the desired post, if found in the set. 2013-07-08 12:21:39 -04:00
Robin Ward 88ca51bb00 FIX: Wordpress route wasn't updating filter count correctly 2013-07-05 16:59:16 -04:00
Robin Ward 6cd6484b5e New mode for Wordpress: Filter ONLY posts liked by moderators 2013-07-05 16:07:24 -04:00
Robin Ward 4c90b16681 FIX: Next pages were missing on `<noscript>` content. Also fixed some long standing bugs. 2013-07-05 14:45:54 -04:00
Sam 4d4a5735d2 logic to bypass trust level filter for high scoring posts 2013-07-03 12:37:17 +10:00
Robin Ward 5770879472 Refactor: Move Topic Details into better objects, identity map, tests, query string filters 2013-07-02 10:36:46 -04:00
Sam b92e912ac9 add min replies, min score and min trust level params for wordpress 2013-07-01 21:29:45 +10:00
Sam 5e7ffd830e hard code best requires trust level > 0, make it configurable later 2013-06-29 21:09:13 +10:00
Robin Ward 6106057328 FIX: Can view best filter while logged in 2013-06-28 12:20:06 -04:00
Sam 870e59883b secure the links on the topic pages, eliminated deleted topics as well. 2013-06-05 16:10:26 +10:00
Sam da6a88634b improve best filter so it properly excludes all admin messages from count as well 2013-05-22 15:14:47 +10:00
Sam c4d8085fc5 remove moderator status posts from best feed 2013-05-22 15:04:53 +10:00
Sam 80fb20816c get rid of nonsense 404.html
correct 404 handling for invalid pages
2013-05-20 10:29:49 +10:00
Chris Hunt c2a4f16f24 Show posts for last page when page out of range 2013-05-18 13:11:01 -07:00
Sam 5ec52bd2e9 :s/moderator?/staff/g ... our naming was kind of crazy, renamed moderator? to staff 2013-05-02 17:22:27 +10:00
Régis Hanol 7105349f1f FIX: accessing a topic with a 'page' parameter 2013-04-04 00:12:27 +02:00
Sam 2295290383 added best=N option to get N best comment on a post 2013-03-27 22:53:11 -07:00
Robin Ward f1e2923a91 Display correct post counts, even with a filter active 2013-03-26 15:06:23 -04:00
Robin Ward 5dc47c2d82 Rename `posts_count` in topic view to `post_counts_by_user` which makes much more sense 2013-03-26 14:06:24 -04:00
Robin Ward 2efd3e61c7 TopicView respects `sort_order` and better specs 2013-03-26 13:27:11 -04:00
Sam 2a047df4f1 cache reply_to_user_id in post to eliminate a very nasty n+1 query 2013-03-19 16:54:23 -07:00
Robin Ward 908bba8c13 First stab at oneboxing of meta.discourse.org 2013-03-08 15:59:12 -05:00
Robin Ward d1d4530efd User Profile enhancements:
- Added PreloadStore support to avoid duplicate requests
- preliminary SEO
- Support for opengraph/twitter cards
2013-03-08 15:04:37 -05:00
Robin Ward d848a9fedc Add opengraph and twitter card support to topics 2013-03-07 17:46:43 -05:00
Régis Hanol 239cbd2d58 enforce coding convention
replaced every `and` by `&&` and every `or` by `||`
2013-03-05 01:42:44 +01:00
Gosha Arinich 0c99dea153 introduce Enum 2013-03-01 21:16:36 +03:00
Alexander 8855a0bfbe RSS of a topic via new route
Adds TopicView#recent_posts; Post#by_newest, #with_user, #author_readable; User#readable_name
Autodiscovery tag in topic show HTML.
2013-02-26 14:54:17 -08:00
Gosha Arinich cafc75b238 remove trailing whitespaces ❤️ 2013-02-26 07:31:35 +03:00
Sam Saffron 4aa7ba620e fix, so really long topics are correct, tested perf on a 4k post topic and seems fine 2013-02-15 13:08:37 +11:00
Sam Saffron a8085f15c4 grab highest post number from the raw data, so deletions at the end of a topic work 2013-02-15 13:08:37 +11:00
Robin Ward 27a07054d7 We never want to filter TopicView to just one post. 2013-02-12 19:02:16 -05:00
Grant Ammons f3dc93a0db WIP, a very nice refactoring of TopicsController#show 2013-02-11 17:54:56 -05:00
Robin Ward 21b5628528 Initial release of Discourse 2013-02-05 14:16:51 -05:00