From 6243925aeb4dbed00d216ece148db7b1b6686889 Mon Sep 17 00:00:00 2001 From: Albert Yi Date: Wed, 30 Jan 2019 10:37:39 -0800 Subject: [PATCH 1/3] add user job for updating table in dynamodb --- app/logical/automod/update_dynamo_db_job.rb | 66 +++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 app/logical/automod/update_dynamo_db_job.rb diff --git a/app/logical/automod/update_dynamo_db_job.rb b/app/logical/automod/update_dynamo_db_job.rb new file mode 100644 index 000000000..3e973104c --- /dev/null +++ b/app/logical/automod/update_dynamo_db_job.rb @@ -0,0 +1,66 @@ +module Automod + class UpdateDynamoDbJob < Struct.new(:post_id) + extend Memoist + + def perform + post = Post.find(post_id) + data = { + post_id: post_id, + is_approved: is_approved?(post), + fav_count: post.fav_count, + file_size: post.file_size, + width: post.image_width, + height: post.image_height, + tag_count: post.tag_array.size, + artist_identified: artist_identified?(post), + artist_count: artist_count(post), + character_identified: character_identified?(post), + character_count: character_count(post), + copyright_identified: copyright_identified?(post), + copyright_count: copyright_count(post), + translated: is_translated?(post), + comment_count: post.comments.count, + note_count: post.notes.count + } + + dynamo_db_client.put_item(table_name: "automod_events_#{Rails.env}", item: data) + end + + def dynamo_db_client + Aws::DynamoDB::Client.new(region: "us-west-1") + end + memoize :dynamo_db_client + + def is_approved?(post) + !post.is_pending? && !post.is_deleted? + end + + def artist_identified?(post) + post.tags.any? { |t| t.category == Tag.categories.artist } + end + + def character_identified?(post) + post.tags.any? { |t| t.category == Tag.categories.character } + end + + def copyright_identified?(post) + post.tags.any? { |t| t.category == Tag.categories.copyright } + end + + def artist_count(post) + post.tags.select { |t| t.category == Tag.categories.artist }.map {|x| x.post_count}.min + end + + def character_count(post) + post.tags.select { |t| t.category == Tag.categories.character }.map {|x| x.post_count}.min + end + + def copyright_count(post) + post.tags.select { |t| t.category == Tag.categories.copyright }.map {|x| x.post_count}.min + end + + def is_translated?(post) + post.has_tag?("translated") + end + end +end From 2961be636a29ee4668987dd26294c40cf2c09838 Mon Sep 17 00:00:00 2001 From: Albert Yi Date: Wed, 30 Jan 2019 10:54:27 -0800 Subject: [PATCH 2/3] add job hook when post is created --- app/logical/automod/update_dynamo_db_job.rb | 13 ++++++++++++- app/logical/upload_service.rb | 5 +++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/app/logical/automod/update_dynamo_db_job.rb b/app/logical/automod/update_dynamo_db_job.rb index 3e973104c..f59f08d35 100644 --- a/app/logical/automod/update_dynamo_db_job.rb +++ b/app/logical/automod/update_dynamo_db_job.rb @@ -2,6 +2,10 @@ module Automod class UpdateDynamoDbJob < Struct.new(:post_id) extend Memoist + def self.enabled? + Danbooru.config.aws_access_key_id.present? + end + def perform post = Post.find(post_id) data = { @@ -27,7 +31,14 @@ module Automod end def dynamo_db_client - Aws::DynamoDB::Client.new(region: "us-west-1") + credentials = Aws::Credentials.new( + Danbooru.config.aws_access_key_id, + Danbooru.config.aws_secret_access_key + ) + Aws::DynamoDB::Client.new( + credentials: credentials, + region: "us-west-1" + ) end memoize :dynamo_db_client diff --git a/app/logical/upload_service.rb b/app/logical/upload_service.rb index 1974726b9..8e9b78847 100644 --- a/app/logical/upload_service.rb +++ b/app/logical/upload_service.rb @@ -90,6 +90,11 @@ class UploadService end upload.update(status: "completed", post_id: @post.id) + + if @post.is_pending? && Automod::UpdateDynamoDbJob.enabled? + Delayed::Job.enqueue(Automod::UpdateDynamoDbJob.new(@post.id), run_at: 84.hours.from_now, queue: "default") + end + @post end From cb11e96c3175437fcbc9f4da38044ff045ee90b7 Mon Sep 17 00:00:00 2001 From: Albert Yi Date: Wed, 30 Jan 2019 10:58:29 -0800 Subject: [PATCH 3/3] handle recordnotfound errors --- app/logical/automod/update_dynamo_db_job.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/logical/automod/update_dynamo_db_job.rb b/app/logical/automod/update_dynamo_db_job.rb index f59f08d35..a14f3e252 100644 --- a/app/logical/automod/update_dynamo_db_job.rb +++ b/app/logical/automod/update_dynamo_db_job.rb @@ -28,6 +28,8 @@ module Automod } dynamo_db_client.put_item(table_name: "automod_events_#{Rails.env}", item: data) + rescue ActiveRecord::RecordNotFound + # do nothing end def dynamo_db_client