docbrown/lib/data_update_scripts
Jeremy Friesen 816e92e549
Configurable weighted feed strategy (#15240)
* AB Test for Feed Strategy

Adding the plumbing for performing AB Tests on the feed strategy.

You can add the environment variable `AB_TEST_SERVICE_FEED_STRATEGY` to
specify the field test to run.

For example, from the forem application home directory you can run the
following to force a strategy for all users:

```console
AB_TEST_SERVICE_FEED_STRATEGY=original bin/start
```

Forcing the strategy can significantly help with quality assurance testing.

* Adding configurable weighted feed strategy

I wrote about this exploration on [DEV.to][1].  This particular
implementation provides significant configuration options for A/B
testing.

At it's core this `Articles::Feeds::WeightedQueryStrategy` provides a
means to query articles that are relevant to the user.  The
configuration helps us test and refine those values.

Further more this implementation introduces the idea of some common
interfaces for feed strategies.  I'm not happy with the naming
convention but we can work to change that.

This even hints at a mechanism for administrators to configure.

Related to forem/rfcs#314, as I work towards understanding the feed
algorithm. And #15180

[1]:https://dev.to/jeremyf/practicing-postgresql-and-postulating-improvements-5m

* Renaming AbTestService to AbExperiment

I'm loath to end any production class's filename with "test".  I don't
want minitest or rspec coming along and attempting to "test" that file.
In addition, I find that Experiment better describes the concept.

Also, per conversations with Michael K, we favor nouns objects to go
in app/models and verb objects to go in app/services.  That's a great
separation.

* Factoring AbExperiment into a Controller concern

I wish this could be a stand-alone module but the implementation of
field test has cases that require controller context.

* Sanitizing configurable weighted strategy cases

* Minor refactoring of coding structure

* Renaming parameter for clarity

* Renaming variable to avoid confusion

Prior to the commit, `env` is a controller variable.  The injected `env`
variable didn't collide, but did create just a bit of confusion.

With this change, I'm trying to disentangle from that variable.

* Factoring AbExperiment away from mixin concern

Per discussion with Michael K, we both agree that we do not like
controller concern mixins.  They can quickly complicate the legibility
of any given codebase.

This refactor provides a common and simplified interface for a Plain Old
Ruby Object (PORO) that accounts for the implementation considerations
of the underlying "field_test" controller method.

* Adding Datadog.tracer.trace around feed actions

* Adding featured_article_factor

Prior to this commit, there was no consideration for how moderators
engage with an article.  This is a first nudge towards that effort.

* Removing spec

Add a spec that says yes or no we're feature testing something seems
fragile.  Namely, why are we wanting to assert that as a truism.

* Helping ensure we're "tracing" the same things

From the code comment:

> Hey, why the to_a you say?  Because the
> LargeForemExperimental has already done this.  But the
> weighted strategy has not.  I also don't want to alter the
> weighted query implementation as it returns a lovely
> ActiveRecord::Relation.  So this is a concession.

* Addressing parameters for tracing function

* For weight feed query only count positive tags

A user assigns explicit points to the tags that they do or do not want
to see.  This change treats the negative explicit_points as an indicator
that they don't want to see the tag.

* Adding weighted factor for privileged user reactions

* Updating comments to better clarify

* Adding additional constraint for published_at

* Updating documentation and adding logger

* Adding documentation concerning method call

* Upping logging level for experiments

See conversations in https://github.com/forem/forem/pull/15240

* Adding group by clauses to appease postgres configs

* Injecting relevant scoring method's joins

Prior to this commit, we included all of the joins regardless of the
scoring methods chosen.  With this commit, we only inject joins that are
used with the commit.

What this would allow us to do is to then have some pre-cooked scoring
methods but not turn them on.  Or to turn off the more expensive scoring
methods.

* Adding feature flag for feed strategy experiment
2021-11-29 10:46:56 -05:00
..
20200226193303_backfill_column_for_broadcasts.rb Run BackfillColumnForBroadcasts only if the column still exists (#6508) 2020-03-09 15:38:34 +01:00
20200305201642_index_feed_content_to_elasticsearch.rb [deploy] Remove Elasticsearch from Index Worker Names (#7594) 2020-04-29 12:12:29 -05:00
20200313123108_index_users_to_elasticsearch.rb [deploy] Remove Elasticsearch from Index Worker Names (#7594) 2020-04-29 12:12:29 -05:00
20200324133751_update_tag_hotness_scores.rb Hotness Score for Tags Should Use Article positive_reactions_count (#6808) [deploy] 2020-03-31 09:04:20 -05:00
20200503134234_remove_github_issues.rb [deploy] Decouple GitHub authentication from fetching GitHub issues (#7660) 2020-05-04 16:17:16 -04:00
20200530085153_backfill_broadcasts_timestamps.rb Add timestamps to broadcasts (#8181) 2020-06-01 18:11:38 +02:00
20200708163323_backfill_broadcastable_for_broadcasts.rb Hotfix: Fix Typo in backfill_broadcastable_type_for_broadcasts (#9292) [deploy] 2020-07-13 10:50:29 -06:00
20200715140848_backfill_user_registered_at.rb [MERGE AFTER INVITATION PR] Add registered_at data script (#9331) 2020-07-27 12:28:06 -04:00
20200723070918_update_articles_cached_entities.rb Rubocop: Move from OpenStruct to Struct in Organization (#9431) 2020-07-30 21:04:05 +07:00
20200810083831_remove_orphaned_ahoy_rows.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200813072205_remove_orphaned_display_ad_events.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200818103028_nullify_orphaned_by_article_html_variant_trials.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200818170410_remove_orphaned_poll_votes.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200818170433_remove_orphaned_poll_skips.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200818170505_remove_orphaned_poll_options.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200818170523_remove_orphaned_polls.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200820153340_insert_facebook_connect_broadcast_message.rb Bump rubocop from 1.17.0 to 1.18.0 (#14107) 2021-07-01 13:51:49 +02:00
20200821103125_nullify_orphaned_articles_by_organization.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200821103305_nullify_orphaned_collections_by_organization.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200821103405_remove_orphaned_credits_by_organization.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200821103718_remove_orphaned_display_ads_by_organization.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200821103834_remove_orphaned_listings_by_organization.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200822082229_remove_orphaned_notifications_by_organization.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200822083050_remove_orphaned_sponsorships_by_organization.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200825095512_nullify_orphaned_comments_by_article.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200825102635_remove_orphaned_notification_subscriptions_by_article.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200825102956_remove_orphaned_notifications_by_article.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200825103119_remove_orphaned_profile_pins_by_article.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200825103244_remove_orphaned_rating_votes_by_article.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200826075937_migrate_profile_field_groups.rb [deploy] Introduce ProfileFieldGroup model (#10007) 2020-08-28 10:51:33 +07:00
20200826092816_remove_orphaned_notes_by_user.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200826133748_nullify_orphaned_tweets_by_user.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200826140317_remove_orphaned_articles_by_user.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200826140754_remove_orphaned_collections_by_user.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200826140924_remove_orphaned_credits_by_user.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200826141015_remove_orphaned_github_repos_by_user.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200826141105_remove_orphaned_mentions_by_user.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200826141145_remove_orphaned_organization_memberships_by_user.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200826141447_nullify_orphaned_page_views_by_user.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200826141550_nullify_orphaned_rating_votes_by_user.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200826141652_remove_orphaned_reactions_by_user.rb Routine rubocop fixes (#10237) 2020-09-08 12:06:47 -04:00
20200901040521_create_profile_fields.rb Profile generalization cleanup phase 2 (#14555) 2021-08-27 09:17:26 +07:00
20200901085230_remove_draft_articles_with_duplicate_canonical_url.rb Abstract DatadogStatsClient to ForemStatsClient (#12304) 2021-01-27 11:25:44 -05:00
20200904141057_cleanup_articles_with_invalid_feed_source_url.rb [deploy] Remove draft articles with duplicate feed source URL and cleanup invalid data: take 2 (#10239) 2020-09-08 11:53:41 -05:00
20200910135958_remove_draft_articles_with_duplicate_user_id_title_body_markdown.rb Bug Fix:Update Remove Draft Articles Scripts to not use Squish (#11445) 2020-11-16 13:20:37 -06:00
20200910140109_cleanup_published_articles_with_duplicate_user_id_title_body_markdown.rb Remove Elasticsearch ✂️ ✂️ ✂️ ✂️ ✂️ ✂️ ✂️ ✂️ ✂️ ✂️ ✂️ ✂️ ✂️ ✂️ (#13606) 2021-05-03 11:09:45 -04:00
20200916202343_backfill_co_author_ids_for_articles.rb Removes second_user_id and third_user_id From the Articles Table (#10383) [deploy] 2020-10-02 13:14:32 -06:00
20200917115821_backfill_listing_published_date.rb Showing date in listing tile (#10217) 2020-09-21 10:14:26 +02:00
20200917150808_nullify_orphaned_tags_by_mod_chat_channel_id.rb [deploy] Cleanup orphan data from tags and feedback_messages (#10367) 2020-09-29 10:12:40 -04:00
20200917150838_nullify_orphaned_feedback_messages_by_reporter_id.rb [deploy] Cleanup orphan data from tags and feedback_messages (#10367) 2020-09-29 10:12:40 -04:00
20200922065307_fix_dribbble_url_profile_field.rb [deploy] /profile/settings page rendering (Ridhwana/Michael) (#10733) 2020-10-20 09:18:13 -04:00
20201015190914_update_article_main_image_path.rb [deploy] Store Article's main_image path unprocessed (#10867) 2020-10-16 14:46:37 -04:00
20201019192035_backfill_registered_for_users.rb Data update Script: Backfill Created, but Unregistered Users (#10939) [deploy] 2020-10-20 08:47:11 -06:00
20201022161311_backfill_user_registrations_in_registrations_controller_path.rb Fix missing registration data change (#11008) 2020-10-22 19:21:03 -04:00
20201026155851_resave_to_bust_cache_for_imgproxy.rb Update bust_user to EdgeCache::BustUser (#12051) 2020-12-29 09:53:00 +01:00
20201030015634_make_tags_with_mods_supported.rb Automatically mark tag supported when adding mod (#11151) 2020-10-30 09:46:10 -04:00
20201118141822_gradual_article_cache_bust.rb Rubocop fixes (#11862) 2020-12-11 17:36:42 +03:00
20201120001727_populate_explicit_follow_points.rb Add implicit points to follows to improve feed relevancy (in all algorithms) (#11513) 2020-11-25 16:09:51 -05:00
20201130041949_remove_name_profile_field.rb Drop profile columns from user (#10707) 2020-12-03 08:14:38 +07:00
20201208151516_set_onboarding_profile_fields_for_existing_forems.rb Replace the "setup onboarding profile fields" temp rake task with a data update script (#11800) 2020-12-08 17:50:43 +02:00
20201209134953_touch_articles_with_capitalized_paths.rb Ensure Article's username method returns a downcased string (#11813) 2020-12-09 12:56:40 -06:00
20201217162454_cleanup_orphan_git_hub_repositories.rb Remove GitHub repositories when GitHub identity is removed (#11951) 2020-12-20 15:15:40 +01:00
20210107151449_remove_feeds_import_feature_flag.rb Remove RssReader (#12169) 2021-01-08 11:45:15 -05:00
20210108033107_remove_looking_for_work_profile_fields.rb Remove looking for work columns (#12173) 2021-01-11 11:22:39 +07:00
20210114174504_update_user_update_rate_limit_default.rb Create settings model for rate limits (#13381) 2021-04-20 11:29:22 +07:00
20210119060219_make_local_navigation_links_relative.rb Update NavigationLink handling (#12316) 2021-01-20 13:57:59 -05:00
20210119131811_replace_instances_of_banned_and_comment_banned.rb Rename banned and comment_banned roles (#12270) 2021-04-06 10:12:14 -05:00
20210209152726_add_fastly_http_purge_feature_flag.rb Fastly edge caching: use PURGE HTTP method instead of POST (#12627) 2021-02-17 13:34:37 -05:00
20210209185037_add_single_resource_role_to_tech_admins.rb Fix erroring data update script (#12628) 2021-02-09 11:16:44 -08:00
20210210124346_add_data_updates_scripts_feature_flag.rb Adds a feature flag for Data Update Scripts (#12641) 2021-02-10 18:22:27 +02:00
20210211164634_fix_profile_field_edge_cases.rb Fix edge cases in profile field UI migration (#12665) 2021-02-11 17:18:46 -05:00
20210329172336_remove_pro_roles.rb Remove pro role from users and database (#13176) 2021-03-31 09:34:10 -07:00
20210405152916_invoke_update_reading_list_document_trigger_on_articles.rb [Search 2.0] Optimize search reading list (#13275) 2021-04-12 16:40:40 +02:00
20210412183428_resave_all_comment_mentioned_messages.rb Rename comment-mentioned-user class added by Html::Parser (#13263) 2021-04-13 14:33:22 -07:00
20210412185444_resave_all_comment_mentioned_comments.rb Rename comment-mentioned-user class added by Html::Parser (#13263) 2021-04-13 14:33:22 -07:00
20210412185449_resave_all_comment_mentioned_articles.rb Rename comment-mentioned-user class added by Html::Parser (#13263) 2021-04-13 14:33:22 -07:00
20210503175027_move_summary_website_url_and_location_to_profile.rb Fix misnamed data update script (#13862) 2021-05-26 15:50:31 -05:00
20210503202046_remove_unused_data_update_scripts.rb Add reaction to articles when seeding the database (#15193) 2021-10-26 10:56:14 -05:00
20210506052235_remove_runtime_banner_feature_flag.rb Remove :runtime_banner feature flag (#13662) 2021-05-28 15:10:15 -06:00
20210512030719_mark_mascot_setting_dus_as_obsolete.rb Remove settings_mascots table (#13737) 2021-05-13 10:03:25 +07:00
20210512032437_remove_settings_data_update_scripts.rb Clean up SiteConfig (#13738) 2021-05-18 09:38:31 +07:00
20210518043957_remove_site_config_scripts.rb [Hotfix] Fix DataUpdateScripts::RemoveSiteConfigScripts script (#13824) 2021-05-21 16:34:21 +02:00
20210604104735_remove_email_addresses_scripts.rb Removing Settings::General.email_addresses (#13958) 2021-06-11 12:34:34 +03:00
20210622145212_backfill_forem_consumer_app_team_id.rb Make Consumer Apps dictate aasa results (#14015) 2021-06-24 08:36:11 -06:00
20210630034523_add_work_profile_field.rb Add 'Work' profile field (#14106) 2021-07-09 09:24:08 +07:00
20210630063635_drop_profile_fields_for_static_attributes.rb Drop profile fields for static attributes (#14109) 2021-07-01 14:30:40 -04:00
20210701134702_remove_notification_setting_migration_scripts.rb Use new UserSetting and UserNotificationSettings and Ignore Related User Table Fields (#14121) 2021-07-08 09:31:34 -05:00
20210712044513_work_profile_field_follow_up.rb Remove duplicated work display from header / profile work (#14210) 2021-07-30 12:28:40 +02:00
20210712054300_remove_unused_profile_fields.rb Remove unused profile fields (#14206) 2021-07-16 09:45:12 -04:00
20210712162220_backfill_section_column_for_navigation_links.rb Static Sections for Site Navigation - Pt1 (#14213) 2021-07-14 11:01:56 -04:00
20210722135549_profile_website_url_format.rb [hotfix] website_url update script should handle parse errors (#14306) 2021-07-22 14:16:43 -05:00
20210722160452_profile_website_url_format_fixup.rb [hotfix] website_url update script should handle parse errors (#14306) 2021-07-22 14:16:43 -05:00
20210803161945_remove_apple_auth_feature_flag.rb Take Apple Authentication out of Beta (#12114) 2021-08-03 15:04:00 -06:00
20210824202334_backfill_creator_role_for_first_super_admin.rb Added the creator role for the first Forem instance admin (#14583) 2021-08-26 13:50:21 -04:00
20210831052422_add_connect_feature_flag.rb Add feature flag for Connect (#14644) 2021-09-13 10:45:56 -04:00
20210921235050_insert_forem_connect_broadcast_message.rb Forem passport (cont) (#14759) 2021-09-30 06:47:45 -06:00
20210928044418_remove_checkbox_type_from_profile_fields.rb Remove check_box type from profile fields (#14832) 2021-09-30 13:27:39 -04:00
20211019063703_migrate_themes.rb Theme data update script, remove theme choices from UI (#15225) 2021-11-08 08:38:43 -05:00
20211020145958_remove_passport_feature_flag.rb Enable Forem (Passport) Auth (#15141) 2021-11-23 14:59:00 -06:00
20211104200856_update_each_articles_privileged_user_point_count.rb Caching sum privileged reaction scores (#15299) 2021-11-08 12:50:08 -05:00
20211109161231_migrate_themes_again.rb Rerun migrate themes script (#15312) 2021-11-09 10:38:17 -06:00
20211112173720_nullify_empty_tag_colors.rb Nullify invalid tag colors (#15361) 2021-11-12 14:35:08 -06:00
20211117204333_add_feature_flag_for_feed_experiment.rb Configurable weighted feed strategy (#15240) 2021-11-29 10:46:56 -05:00