mirror of
https://github.com/discourse/discourse.git
synced 2025-05-22 16:11:08 +08:00
DEV: Move discourse-chat
to the core repo. (#18776)
As part of this move, we are also renaming `discourse-chat` to `chat`.
This commit is contained in:
23
plugins/chat/lib/tasks/chat.rake
Normal file
23
plugins/chat/lib/tasks/chat.rake
Normal file
@ -0,0 +1,23 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
if Discourse.allow_dev_populate?
|
||||
chat_task = Rake::Task["dev:populate"]
|
||||
chat_task.enhance do
|
||||
SiteSetting.chat_enabled = true
|
||||
DiscourseDev::PublicChannel.populate!
|
||||
DiscourseDev::DirectChannel.populate!
|
||||
DiscourseDev::Message.populate!
|
||||
end
|
||||
|
||||
desc "Generates sample content for chat"
|
||||
task "chat:populate" => ["db:load_config"] do |_, args|
|
||||
DiscourseDev::PublicChannel.new.populate!(ignore_current_count: true)
|
||||
DiscourseDev::DirectChannel.new.populate!(ignore_current_count: true)
|
||||
DiscourseDev::Message.new.populate!(ignore_current_count: true)
|
||||
end
|
||||
|
||||
desc "Generates sample messages in channels"
|
||||
task "chat:message:populate" => ["db:load_config"] do |_, args|
|
||||
DiscourseDev::Message.new.populate!(ignore_current_count: true)
|
||||
end
|
||||
end
|
143
plugins/chat/lib/tasks/chat_message.rake
Normal file
143
plugins/chat/lib/tasks/chat_message.rake
Normal file
@ -0,0 +1,143 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
task "chat_messages:rebake_uncooked_chat_messages" => :environment do
|
||||
# rebaking uncooked chat_messages can very quickly saturate sidekiq
|
||||
# this provides an insurance policy so you can safely run and stop
|
||||
# this rake task without worrying about your sidekiq imploding
|
||||
Jobs.run_immediately!
|
||||
|
||||
ENV["RAILS_DB"] ? rebake_uncooked_chat_messages : rebake_uncooked_chat_messages_all_sites
|
||||
end
|
||||
|
||||
def rebake_uncooked_chat_messages_all_sites
|
||||
RailsMultisite::ConnectionManagement.each_connection { |db| rebake_uncooked_chat_messages }
|
||||
end
|
||||
|
||||
def rebake_uncooked_chat_messages
|
||||
puts "Rebaking uncooked chat messages on #{RailsMultisite::ConnectionManagement.current_db}"
|
||||
uncooked = ChatMessage.uncooked
|
||||
|
||||
rebaked = 0
|
||||
total = uncooked.count
|
||||
|
||||
ids = uncooked.pluck(:id)
|
||||
# work randomly so you can run this job from lots of consoles if needed
|
||||
ids.shuffle!
|
||||
|
||||
ids.each do |id|
|
||||
# may have been cooked in interim
|
||||
chat_message = uncooked.where(id: id).first
|
||||
|
||||
rebake_chat_message(chat_message) if chat_message
|
||||
|
||||
print_status(rebaked += 1, total)
|
||||
end
|
||||
|
||||
puts "", "#{rebaked} chat messages done!", ""
|
||||
end
|
||||
|
||||
def rebake_chat_message(chat_message, opts = {})
|
||||
opts[:priority] = :ultra_low if !opts[:priority]
|
||||
chat_message.rebake!(**opts)
|
||||
rescue => e
|
||||
puts "",
|
||||
"Failed to rebake chat message (chat_message_id: #{chat_message.id})",
|
||||
e,
|
||||
e.backtrace.join("\n")
|
||||
end
|
||||
|
||||
task "chat:make_channel_to_test_archiving", [:user_for_membership] => :environment do |t, args|
|
||||
user_for_membership = args[:user_for_membership]
|
||||
|
||||
# do not want this running in production!
|
||||
return if !Rails.env.development?
|
||||
|
||||
require "fabrication"
|
||||
Dir[Rails.root.join("spec/fabricators/*.rb")].each { |f| require f }
|
||||
|
||||
messages = [
|
||||
"Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
|
||||
"Cras sit **amet** metus eget nisl accumsan ullamcorper.",
|
||||
"Vestibulum commodo justo _quis_ fringilla fringilla.",
|
||||
"Etiam malesuada erat eget aliquam interdum.",
|
||||
"Praesent mattis lacus nec ~~orci~~ [spoiler]semper[/spoiler], et fermentum augue tincidunt.",
|
||||
"Duis vel tortor suscipit justo fringilla faucibus id tempus purus.",
|
||||
"Phasellus *tempus erat* sit amet pharetra facilisis.",
|
||||
"Fusce egestas urna ut nisi ornare, ut malesuada est fermentum.",
|
||||
"Aenean ornare arcu vitae pulvinar dictum.",
|
||||
"Nam at turpis eu magna sollicitudin fringilla sed sed diam.",
|
||||
"Proin non [enim](https://discourse.org/team) nec mauris efficitur convallis.",
|
||||
"Nullam cursus lacus non libero vulputate ornare.",
|
||||
"In eleifend ante ut ullamcorper ultrices.",
|
||||
"In placerat diam sit amet nibh feugiat, in posuere metus feugiat.",
|
||||
"Nullam porttitor leo a leo `cursus`, id hendrerit dui ultrices.",
|
||||
"Pellentesque ut @#{user_for_membership} ut ex pulvinar pharetra sit amet ac leo.",
|
||||
"Vestibulum sit amet enim et lectus tincidunt rhoncus hendrerit in enim.",
|
||||
<<~MSG,
|
||||
some bigger message
|
||||
|
||||
```ruby
|
||||
beep = \"wow\"
|
||||
puts beep
|
||||
```
|
||||
MSG
|
||||
]
|
||||
|
||||
topic = nil
|
||||
chat_channel = nil
|
||||
|
||||
Topic.transaction do
|
||||
topic =
|
||||
Fabricate(
|
||||
:topic,
|
||||
user: make_test_user,
|
||||
title: "Testing topic for chat archiving #{SecureRandom.hex(4)}",
|
||||
)
|
||||
Fabricate(
|
||||
:post,
|
||||
topic: topic,
|
||||
user: topic.user,
|
||||
raw: "This is some cool first post for archive stuff",
|
||||
)
|
||||
chat_channel =
|
||||
ChatChannel.create(
|
||||
chatable: topic,
|
||||
chatable_type: "Topic",
|
||||
name: "testing channel for archiving #{SecureRandom.hex(4)}",
|
||||
)
|
||||
end
|
||||
|
||||
puts "topic: #{topic.id}, #{topic.title}"
|
||||
puts "channel: #{chat_channel.id}, #{chat_channel.name}"
|
||||
|
||||
users = [make_test_user, make_test_user, make_test_user]
|
||||
|
||||
ChatChannel.transaction do
|
||||
start_time = Time.now
|
||||
|
||||
puts "creating 1039 messages for the channel"
|
||||
1039.times do
|
||||
cm = ChatMessage.new(message: messages.sample, user: users.sample, chat_channel: chat_channel)
|
||||
cm.cook
|
||||
cm.save!
|
||||
end
|
||||
|
||||
puts "message creation done"
|
||||
puts "took #{Time.now - start_time} seconds"
|
||||
|
||||
UserChatChannelMembership.create(
|
||||
chat_channel: chat_channel,
|
||||
last_read_message_id: 0,
|
||||
user: User.find_by(username: user_for_membership),
|
||||
following: true,
|
||||
)
|
||||
end
|
||||
|
||||
puts "channel is located at #{chat_channel.url}"
|
||||
end
|
||||
|
||||
def make_test_user
|
||||
return if !Rails.env.development?
|
||||
unique_prefix = "archiveuser#{SecureRandom.hex(4)}"
|
||||
Fabricate(:user, username: unique_prefix, email: "#{unique_prefix}@testemail.com")
|
||||
end
|
Reference in New Issue
Block a user