Module: Jobs
- Defined in:
- app/jobs/scheduled/auto_queue_handler.rb,
app/jobs/base.rb,
app/jobs/scheduled/weekly.rb,
app/jobs/regular/bump_topic.rb,
app/jobs/regular/merge_user.rb,
app/jobs/regular/open_topic.rb,
app/jobs/regular/post_alert.rb,
app/jobs/regular/user_email.rb,
app/jobs/onceoff/grant_emoji.rb,
app/jobs/regular/bulk_invite.rb,
app/jobs/regular/close_topic.rb,
app/jobs/regular/unpin_topic.rb,
app/jobs/scheduled/heartbeat.rb,
app/jobs/onceoff/fix_s3_etags.rb,
app/jobs/onceoff/grant_onebox.rb,
app/jobs/regular/delete_topic.rb,
app/jobs/regular/invite_email.rb,
app/jobs/regular/process_post.rb,
app/jobs/regular/create_backup.rb,
app/jobs/regular/process_email.rb,
app/jobs/regular/remove_banner.rb,
app/jobs/regular/run_heartbeat.rb,
app/jobs/scheduled/about_stats.rb,
app/jobs/scheduled/badge_grant.rb,
app/jobs/onceoff/fix_posts_read.rb,
app/jobs/regular/anonymize_user.rb,
app/jobs/regular/delete_replies.rb,
app/jobs/regular/group_pm_alert.rb,
app/jobs/regular/retrieve_topic.rb,
app/jobs/scheduled/poll_mailbox.rb,
app/jobs/regular/clear_slow_mode.rb,
app/jobs/regular/export_csv_file.rb,
app/jobs/regular/update_gravatar.rb,
app/jobs/regular/update_username.rb,
app/jobs/scheduled/version_check.rb,
app/jobs/regular/crawl_topic_link.rb,
app/jobs/regular/group_smtp_email.rb,
app/jobs/regular/mass_award_badge.rb,
app/jobs/regular/suspicious_login.rb,
app/jobs/regular/topic_timer_base.rb,
app/jobs/scheduled/admin_problems.rb,
app/jobs/scheduled/category_stats.rb,
app/jobs/scheduled/problem_checks.rb,
app/jobs/scheduled/reindex_search.rb,
app/jobs/scheduled/tl3_promotions.rb,
app/jobs/regular/notify_tag_change.rb,
app/jobs/regular/push_notification.rb,
app/jobs/scheduled/schedule_backup.rb,
app/jobs/scheduled/unsilence_users.rb,
app/jobs/regular/notify_moved_posts.rb,
app/jobs/scheduled/clean_up_exports.rb,
app/jobs/scheduled/clean_up_uploads.rb,
app/jobs/scheduled/enqueue_onceoffs.rb,
app/jobs/regular/change_display_name.rb,
app/jobs/regular/create_linked_topic.rb,
app/jobs/regular/critical_user_email.rb,
app/jobs/regular/emit_web_hook_event.rb,
app/jobs/regular/export_user_archive.rb,
app/jobs/regular/feature_topic_users.rb,
app/jobs/regular/send_system_message.rb,
app/jobs/regular/toggle_topic_closed.rb,
app/jobs/regular/update_s3_inventory.rb,
app/jobs/scheduled/old_keys_reminder.rb,
app/jobs/scheduled/purge_unactivated.rb,
app/jobs/scheduled/top_refresh_older.rb,
app/jobs/scheduled/top_refresh_today.rb,
app/jobs/regular/backup_chunks_merger.rb,
app/jobs/regular/notify_post_revision.rb,
app/jobs/regular/stream_topic_summary.rb,
app/jobs/regular/update_hotlinked_raw.rb,
app/jobs/scheduled/check_new_features.rb,
app/jobs/scheduled/drop_backup_schema.rb,
app/jobs/scheduled/periodical_updates.rb,
app/jobs/onceoff/clean_up_post_timings.rb,
app/jobs/onceoff/fix_retro_anniversary.rb,
app/jobs/onceoff/migrate_custom_emojis.rb,
app/jobs/onceoff/post_uploads_recovery.rb,
app/jobs/regular/download_backup_email.rb,
app/jobs/regular/enable_bootstrap_mode.rb,
app/jobs/regular/pull_hotlinked_images.rb,
app/jobs/regular/sync_acls_for_uploads.rb,
app/jobs/regular/update_group_mentions.rb,
app/jobs/scheduled/clean_up_email_logs.rb,
app/jobs/scheduled/regenerate_sitemaps.rb,
app/jobs/onceoff/clear_width_and_height.rb,
app/jobs/onceoff/migrate_censored_words.rb,
app/jobs/onceoff/migrate_featured_links.rb,
app/jobs/onceoff/migrate_tagging_plugin.rb,
app/jobs/onceoff/retro_recent_time_read.rb,
app/jobs/regular/bulk_grant_trust_level.rb,
app/jobs/regular/bulk_user_title_update.rb,
app/jobs/regular/notify_category_change.rb,
app/jobs/regular/send_push_notification.rb,
app/jobs/regular/update_top_redirection.rb,
app/jobs/scheduled/clean_up_search_logs.rb,
app/jobs/scheduled/topic_timer_enqueuer.rb,
app/jobs/scheduled/update_heat_settings.rb,
app/jobs/onceoff/fix_encoded_topic_slugs.rb,
app/jobs/onceoff/init_category_tag_stats.rb,
app/jobs/onceoff/retro_grant_anniversary.rb,
app/jobs/regular/group_pm_update_summary.rb,
app/jobs/regular/rebake_posts_for_upload.rb,
app/jobs/scheduled/clean_up_email_tokens.rb,
app/jobs/scheduled/cleanup_imap_sync_log.rb,
app/jobs/scheduled/enqueue_digest_emails.rb,
app/jobs/scheduled/enqueue_suspect_users.rb,
app/jobs/scheduled/ensure_db_consistency.rb,
app/jobs/scheduled/ignored_users_summary.rb,
app/jobs/scheduled/migrate_upload_scheme.rb,
app/jobs/scheduled/process_badge_backlog.rb,
app/jobs/scheduled/purge_deleted_uploads.rb,
app/jobs/onceoff/create_tags_search_index.rb,
app/jobs/regular/admin_confirmation_email.rb,
app/jobs/regular/confirm_sns_subscription.rb,
app/jobs/regular/create_avatar_thumbnails.rb,
app/jobs/regular/download_avatar_from_url.rb,
app/jobs/regular/process_sns_notification.rb,
app/jobs/scheduled/clean_up_crawler_stats.rb,
app/jobs/scheduled/clean_up_unmatched_ips.rb,
app/jobs/scheduled/create_missing_avatars.rb,
app/jobs/scheduled/disable_bootstrap_mode.rb,
app/jobs/scheduled/pending_users_reminder.rb,
app/jobs/onceoff/migrate_upload_extensions.rb,
app/jobs/regular/generate_topic_thumbnails.rb,
app/jobs/regular/publish_topic_to_category.rb,
app/jobs/regular/rebake_custom_emoji_posts.rb,
app/jobs/scheduled/clean_up_inactive_users.rb,
app/jobs/scheduled/directory_refresh_daily.rb,
app/jobs/scheduled/directory_refresh_older.rb,
app/jobs/scheduled/update_animated_uploads.rb,
app/jobs/onceoff/clean_up_sidekiq_statistic.rb,
app/jobs/onceoff/fix_encoded_category_slugs.rb,
app/jobs/onceoff/grant_first_reply_by_email.rb,
app/jobs/onceoff/remove_old_auto_close_jobs.rb,
app/jobs/regular/automatic_group_membership.rb,
app/jobs/regular/process_bulk_invite_emails.rb,
app/jobs/regular/sync_topic_user_bookmarked.rb,
app/jobs/scheduled/backfill_dominant_colors.rb,
app/jobs/scheduled/check_out_of_date_themes.rb,
app/jobs/scheduled/clean_up_post_reply_keys.rb,
app/jobs/scheduled/clean_up_unused_api_keys.rb,
app/jobs/scheduled/destroy_old_hidden_posts.rb,
app/jobs/scheduled/grant_anniversary_badges.rb,
app/jobs/onceoff/clean_up_user_export_topics.rb,
app/jobs/regular/make_embedded_topic_visible.rb,
app/jobs/scheduled/clean_up_stylesheet_cache.rb,
app/jobs/scheduled/clean_up_unmatched_emails.rb,
app/jobs/scheduled/clean_up_unsubscribe_keys.rb,
app/jobs/scheduled/purge_old_web_hook_events.rb,
app/jobs/onceoff/fix_featured_link_for_topics.rb,
app/jobs/onceoff/fix_invalid_gravatar_uploads.rb,
app/jobs/regular/update_topic_upload_security.rb,
app/jobs/scheduled/activation_reminder_emails.rb,
app/jobs/scheduled/clean_up_api_keys_max_life.rb,
app/jobs/scheduled/clean_up_associated_groups.rb,
app/jobs/scheduled/destroy_old_deletion_stubs.rb,
app/jobs/scheduled/invalidate_inactive_admins.rb,
app/jobs/onceoff/fix_invalid_upload_extensions.rb,
app/jobs/scheduled/check_translation_overrides.rb,
app/jobs/scheduled/clean_dismissed_topic_users.rb,
app/jobs/scheduled/ensure_s3_uploads_existence.rb,
app/jobs/scheduled/presence_channel_auto_leave.rb,
app/jobs/scheduled/purge_expired_ignored_users.rb,
app/jobs/onceoff/correct_missing_dualstack_urls.rb,
app/jobs/onceoff/migrate_badge_image_to_uploads.rb,
app/jobs/scheduled/clean_up_associated_accounts.rb,
app/jobs/scheduled/clean_up_unused_staged_users.rb,
app/jobs/scheduled/pending_reviewables_reminder.rb,
app/jobs/regular/notify_mailing_list_subscribers.rb,
app/jobs/scheduled/clean_up_unused_user_api_keys.rb,
app/jobs/scheduled/pending_queued_posts_reminder.rb,
app/jobs/scheduled/process_shelved_notifications.rb,
app/jobs/regular/post_update_topic_tracking_state.rb,
app/jobs/regular/publish_group_membership_updates.rb,
app/jobs/scheduled/clean_up_email_change_requests.rb,
app/jobs/regular/delete_inaccessible_notifications.rb,
app/jobs/regular/update_post_uploads_secure_status.rb,
app/jobs/scheduled/bookmark_reminder_notifications.rb,
app/jobs/scheduled/clean_up_user_api_keys_max_life.rb,
app/jobs/regular/invite_password_instructions_email.rb,
app/jobs/regular/pull_user_profile_hotlinked_images.rb,
app/jobs/onceoff/fix_primary_emails_for_staged_users.rb,
app/jobs/scheduled/create_recent_post_search_indexes.rb,
app/jobs/onceoff/fix_out_of_sync_user_uploaded_avatar.rb,
app/jobs/regular/download_profile_background_from_url.rb,
app/jobs/scheduled/grant_new_user_of_the_month_badges.rb,
app/jobs/scheduled/process_user_notification_schedules.rb,
app/jobs/scheduled/fix_user_usernames_and_groups_names_clash.rb,
app/jobs/onceoff/fix_post_search_data_after_default_locale_rename.rb
Overview
This job will automatically act on records that have gone unhandled on a queue for a long time.
Defined Under Namespace
Classes: AboutStats, ActivationReminderEmails, AdminConfirmationEmail, AdminProblems, AnonymizeUser, AutoQueueHandler, AutomaticGroupMembership, BackfillDominantColors, BackfillSidebarSiteSettings, BackupChunksMerger, BadgeGrant, Base, BookmarkReminderNotifications, BulkGrantTrustLevel, BulkInvite, BulkUserTitleUpdate, BumpTopic, CategoryStats, ChangeDisplayName, CheckNewFeatures, CheckOutOfDateThemes, CheckTranslationOverrides, CleanDismissedTopicUsers, CleanUpApiKeysMaxLife, CleanUpAssociatedAccounts, CleanUpAssociatedGroups, CleanUpCrawlerStats, CleanUpEmailChangeRequests, CleanUpEmailLogs, CleanUpEmailTokens, CleanUpExports, CleanUpInactiveUsers, CleanUpPostReplyKeys, CleanUpPostTimings, CleanUpSearchLogs, CleanUpSidekiqStatistic, CleanUpStylesheetCache, CleanUpUnmatchedEmails, CleanUpUnmatchedIPs, CleanUpUnsubscribeKeys, CleanUpUnusedApiKeys, CleanUpUnusedStagedUsers, CleanUpUnusedUserApiKeys, CleanUpUploads, CleanUpUserApiKeysMaxLife, CleanUpUserExportTopics, CleanupImapSyncLog, ClearSlowMode, ClearWidthAndHeight, CloseTopic, ConfirmSnsSubscription, CorrectMissingDualstackUrls, CrawlTopicLink, CreateAvatarThumbnails, CreateBackup, CreateLinkedTopic, CreateMissingAvatars, CreateRecentPostSearchIndexes, CreateTagsSearchIndex, CreateUserReviewable, CriticalUserEmail, DeleteInaccessibleNotifications, DeleteReplies, DeleteTopic, DestroyOldDeletionStubs, DestroyOldHiddenPosts, DirectoryRefreshDaily, DirectoryRefreshOlder, DisableBootstrapMode, DownloadAvatarFromUrl, DownloadBackupEmail, DownloadProfileBackgroundFromUrl, DropBackupSchema, EmitWebHookEvent, EnableBootstrapMode, EnqueueDigestEmails, EnqueueOnceoffs, EnqueueSuspectUsers, EnsureDbConsistency, EnsureS3UploadsExistence, ExportCsvFile, ExportUserArchive, FeatureTopicUsers, FixEncodedCategorySlugs, FixEncodedTopicSlugs, FixFeaturedLinkForTopics, FixInvalidGravatarUploads, FixInvalidUploadExtensions, FixOutOfSyncUserUploadedAvatar, FixPostSearchDataAfterDefaultLocaleRename, FixPostsRead, FixPrimaryEmailsForStagedUsers, FixRetroAnniversary, FixS3Etags, FixUserUsernamesAndGroupsNamesClash, GenerateTopicThumbnails, GrantAnniversaryBadges, GrantEmoji, GrantFirstReplyByEmail, GrantNewUserOfTheMonthBadges, GrantOnebox, GroupPmAlert, GroupPmUpdateSummary, GroupSmtpEmail, HandledExceptionWrapper, Heartbeat, IgnoredUsersSummary, IndexCategoryForSearch, InitCategoryTagStats, InvalidateInactiveAdmins, InviteEmail, InvitePasswordInstructionsEmail, MakeEmbeddedTopicVisible, MassAwardBadge, MergeUser, MigrateBadgeImageToUploads, MigrateCensoredWords, MigrateCustomEmojis, MigrateFeaturedLinks, MigrateTaggingPlugin, MigrateUploadExtensions, MigrateUploadScheme, NotifyCategoryChange, NotifyMailingListSubscribers, NotifyMovedPosts, NotifyPostRevision, NotifyReviewable, NotifyTagChange, OldKeysReminder, Onceoff, OpenTopic, PendingQueuedPostsReminder, PendingReviewablesReminder, PendingUsersReminder, PeriodicalUpdates, PollMailbox, PostAlert, PostUpdateTopicTrackingState, PostUploadsRecovery, PresenceChannelAutoLeave, ProblemChecks, ProcessBadgeBacklog, ProcessBulkInviteEmails, ProcessEmail, ProcessPost, ProcessShelvedNotifications, ProcessSnsNotification, ProcessUserNotificationSchedules, PublishGroupMembershipUpdates, PublishTopicToCategory, PullHotlinkedImages, PullUserProfileHotlinkedImages, PurgeDeletedUploads, PurgeExpiredIgnoredUsers, PurgeOldWebHookEvents, PurgeUnactivated, PushNotification, RebakeCustomEmojiPosts, RebakePostsForUpload, RefreshUsersReviewableCounts, RegenerateSitemaps, ReindexSearch, RemoveBanner, RemoveOldAutoCloseJobs, RetrieveTopic, RetroGrantAnniversary, RetroRecentTimeRead, ReviewablePriorities, RunHeartbeat, ScheduleBackup, Scheduled, SendPushNotification, SendSystemMessage, StreamTopicSummary, SuspiciousLogin, SyncAclsForUploads, SyncTopicUserBookmarked, Tl3Promotions, ToggleTopicClosed, TopRefreshOlder, TopRefreshToday, TopicActionConverter, TopicTimerBase, TopicTimerEnqueuer, TruncateUserFlagStats, UnpinTopic, UnsilenceUsers, UpdateAnimatedUploads, UpdateGravatar, UpdateGroupMentions, UpdateHeatSettings, UpdateHotlinkedRaw, UpdatePostUploadsSecureStatus, UpdateS3Inventory, UpdateTopRedirection, UpdateTopicUploadSecurity, UpdateUsername, UserEmail, VersionCheck, Weekly
Class Method Summary
collapse
Class Method Details
.cancel_scheduled_job(job_name, opts = {}) ⇒ Object
429
430
431
|
# File 'app/jobs/base.rb', line 429
def self.cancel_scheduled_job(job_name, opts = {})
scheduled_for(job_name, opts).each(&:delete)
end
|
.enqueue(job, opts = {}) ⇒ Object
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
|
# File 'app/jobs/base.rb', line 350
def self.enqueue(job, opts = {})
if job.instance_of?(Class)
klass = job
else
klass = "::Jobs::#{job.to_s.camelcase}".constantize
end
unless opts.delete(:all_sites)
opts[:current_site_id] ||= RailsMultisite::ConnectionManagement.current_db
end
delay = opts.delete(:delay_for)
queue = opts.delete(:queue)
opts = opts.deep_stringify_keys
parsed_opts = JSON.parse(JSON.dump(opts))
Discourse.deprecate(<<~TEXT.squish, since: "2.9", drop_from: "3.0") if opts != parsed_opts
#{klass.name} was enqueued with argument values which do not cleanly serialize to/from JSON.
This means that the job will be run with slightly different values than the ones supplied to `enqueue`.
Argument values should be strings, booleans, numbers, or nil (or arrays/hashes of those value types).
TEXT
opts = parsed_opts
if ::Jobs.run_later?
hash = { "class" => klass, "args" => [opts] }
if delay
hash["at"] = Time.now.to_f + delay.to_f if delay.to_f > 0
end
hash["queue"] = queue if queue
DB.after_commit { klass.client_push(hash) }
else
if Rails.env == "development"
Scheduler::Defer.later("job") { klass.new.perform(opts) }
else
queue = Thread.current[:discourse_nested_job_queue]
outermost_job = !queue
if outermost_job
queue = Queue.new
Thread.current[:discourse_nested_job_queue] = queue
end
queue.push([klass, opts])
if outermost_job
begin
until queue.empty?
queued_klass, queued_opts = queue.pop(true)
queued_klass.new.perform_immediately(queued_opts)
end
ensure
Thread.current[:discourse_nested_job_queue] = nil
end
end
end
end
end
|
.enqueue_at(datetime, job_name, opts = {}) ⇒ Object
424
425
426
427
|
# File 'app/jobs/base.rb', line 424
def self.enqueue_at(datetime, job_name, opts = {})
secs = [datetime.to_f - Time.zone.now.to_f, 0].max
enqueue_in(secs, job_name, opts)
end
|
.enqueue_in(secs, job_name, opts = {}) ⇒ Object
420
421
422
|
# File 'app/jobs/base.rb', line 420
def self.enqueue_in(secs, job_name, opts = {})
enqueue(job_name, opts.merge!(delay_for: secs))
end
|
24
25
26
27
28
29
|
# File 'app/jobs/base.rb', line 24
def self.last_job_performed_at
Sidekiq.redis do |r|
int = r.get("last_job_perform_at")
int ? Time.at(int.to_i) : nil
end
end
|
.num_email_retry_jobs ⇒ Object
31
32
33
|
# File 'app/jobs/base.rb', line 31
def self.num_email_retry_jobs
Sidekiq::RetrySet.new.count { |job| job.klass =~ /Email\z/ }
end
|
.queued ⇒ Object
4
5
6
|
# File 'app/jobs/base.rb', line 4
def self.queued
Sidekiq::Stats.new.enqueued
end
|
16
17
18
|
# File 'app/jobs/base.rb', line 16
def self.run_immediately!
@run_immediately = true
end
|
12
13
14
|
# File 'app/jobs/base.rb', line 12
def self.run_immediately?
!!@run_immediately
end
|
.run_later! ⇒ Object
20
21
22
|
# File 'app/jobs/base.rb', line 20
def self.run_later!
@run_immediately = false
end
|
.run_later? ⇒ Boolean
8
9
10
|
# File 'app/jobs/base.rb', line 8
def self.run_later?
!@run_immediately
end
|
.scheduled_for(job_name, opts = {}) ⇒ Object
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
|
# File 'app/jobs/base.rb', line 433
def self.scheduled_for(job_name, opts = {})
opts = opts.with_indifferent_access
unless opts.delete(:all_sites)
opts[:current_site_id] ||= RailsMultisite::ConnectionManagement.current_db
end
job_class = "Jobs::#{job_name.to_s.camelcase}"
Sidekiq::ScheduledSet.new.select do |scheduled_job|
if scheduled_job.klass.to_s == job_class
matched = true
job_params = scheduled_job.item["args"][0].with_indifferent_access
opts.each do |key, value|
if job_params[key] != value
matched = false
break
end
end
matched
else
false
end
end
end
|