diff options
author | Rhenium <rhenium@rhe.jp> | 2013-07-28 18:50:01 +0900 |
---|---|---|
committer | Rhenium <rhenium@rhe.jp> | 2013-07-28 18:50:01 +0900 |
commit | 2e552090d8f66d71403abfe21a879a9ff0754e4a (patch) | |
tree | 586ddb94c5a5e0379971c9a6e5c529144e8edeaf | |
parent | 97178592d5cc3562daf9eb457c6fad4f362e7d3b (diff) | |
download | aclog-2e552090d8f66d71403abfe21a879a9ff0754e4a.tar.gz |
change message of collector-receiver
-rw-r--r-- | Gemfile | 1 | ||||
-rw-r--r-- | Gemfile.lock | 5 | ||||
-rw-r--r-- | app/controllers/sessions_controller.rb | 10 | ||||
-rw-r--r-- | app/models/favorite.rb | 31 | ||||
-rw-r--r-- | app/models/retweet.rb | 28 | ||||
-rw-r--r-- | app/models/tweet.rb | 42 | ||||
-rw-r--r-- | app/models/user.rb | 56 | ||||
-rw-r--r-- | app/views/about/index.html.haml | 2 | ||||
-rw-r--r-- | collector/stream.rb | 76 | ||||
-rw-r--r-- | lib/aclog/receiver/collector_connection.rb | 58 |
10 files changed, 134 insertions, 175 deletions
@@ -5,7 +5,6 @@ source "https://rubygems.org" gem "rails", "~> 4.0.0" gem "mysql2" gem "pry-rails" -gem "counter_culture" gem "settingslogic" gem "yajl-ruby", require: "yajl" gem "twitter" diff --git a/Gemfile.lock b/Gemfile.lock index 9222d17..eae794a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -26,8 +26,6 @@ GEM thread_safe (~> 0.1) tzinfo (~> 0.3.37) addressable (2.3.5) - after_commit_action (0.1.3) - activerecord (>= 3.0.0) arel (4.0.0) atomic (1.1.10) bootstrap-sass-rails (2.3.2.1) @@ -45,8 +43,6 @@ GEM colorize (0.5.8) cool.io (1.1.0) iobuffer (>= 1.0.0) - counter_culture (0.1.13) - after_commit_action (~> 0.1.3) coveralls (0.6.7) colorize multi_json (~> 1.3) @@ -213,7 +209,6 @@ PLATFORMS DEPENDENCIES bootstrap-sass-rails coffee-rails (~> 4.0.0) - counter_culture coveralls daemon-spawn dalli diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index 03ab2b4..24349cb 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -8,11 +8,11 @@ class SessionsController < ApplicationController consumer_version: Settings.collector.consumer_version) account.update_connection - User.from_hash(id: account.user_id, - screen_name: auth["extra"]["raw_info"]["screen_name"], - name: auth["extra"]["raw_info"]["name"], - profile_image_url: auth["extra"]["raw_info"]["profile_image_url_https"], - protected: auth["extra"]["raw_info"]["protected"]) + User.from_receiver("id" => account.user_id, + "screen_name" => auth["extra"]["raw_info"]["screen_name"], + "name" => auth["extra"]["raw_info"]["name"], + "profile_image_url" => auth["extra"]["raw_info"]["profile_image_url_https"], + "protected" => auth["extra"]["raw_info"]["protected"]) session[:account] = account session[:user_id] = account.user_id diff --git a/app/models/favorite.rb b/app/models/favorite.rb index e0b8eb7..82f7312 100644 --- a/app/models/favorite.rb +++ b/app/models/favorite.rb @@ -1,21 +1,22 @@ class Favorite < ActiveRecord::Base - belongs_to :tweet, :counter_cache => true -# counter_culture :tweet + belongs_to :tweet, counter_cache: true belongs_to :user - def self.from_hash(hash) - begin - f = logger.quietly do - create!(tweet_id: hash[:tweet_id], user_id: hash[:user_id]) - end - logger.debug("Created Favorite: #{hash[:user_id]} => #{hash[:tweet_id]}") - + def self.from_receiver(msg) + transaction do + t = Tweet.from_receiver(msg["tweet"]) + u = User.from_receiver(msg["user"]) + f = self.create!(tweet: t, + user: u) + logger.debug("Created Favorite: #{msg["user"]["id"]} => #{msg["tweet"]["id"]}") return f - rescue ActiveRecord::RecordNotUnique - logger.debug("Duplicate Favorite: #{hash[:user_id]} => #{hash[:tweet_id]}") - rescue => e - logger.error("Unknown error while inserting favorite: #{e.class}: #{e.message}/#{e.backtrace.join("\n")}") end + rescue ActiveRecord::RecordNotUnique + logger.debug("Duplicate Favorite: #{msg["user"]["id"]} => #{msg["tweet"]["id"]}") + return nil + rescue => e + logger.error("Unknown error while inserting favorite: #{e.class}: #{e.message}/#{e.backtrace.join("\n")}") + return nil end def self.from_tweet_object(tweet_object) @@ -26,7 +27,7 @@ class Favorite < ActiveRecord::Base end end - def self.delete_from_hash(hash) - where(tweet_id: hash[:tweet_id], user_id: hash[:user_id]).destroy_all + def self.delete_from_receiver(msg) + where(tweet_id: msg["tweet"]["id"], user_id: msg["user"]["id"]).destroy_all end end diff --git a/app/models/retweet.rb b/app/models/retweet.rb index 05bfd65..48ca515 100644 --- a/app/models/retweet.rb +++ b/app/models/retweet.rb @@ -1,23 +1,23 @@ class Retweet < ActiveRecord::Base belongs_to :tweet, :counter_cache => true -# counter_culture :tweet belongs_to :user - def self.from_hash(hash) - begin - r = logger.quietly do - create!(id: hash[:id], - tweet_id: hash[:tweet_id], - user_id: hash[:user_id]) - end - logger.debug("Created Retweet: #{hash[:id]}: #{hash[:user_id]} => #{hash[:tweet_id]}") - + def self.from_receiver(msg) + transaction do + t = Tweet.from_receiver(msg["tweet"]) + u = User.from_receiver(msg["user"]) + r = self.create!(id: msg["id"], + tweet: t, + user: u) + logger.debug("Created Retweet: #{msg["id"]}: #{msg["user"]["id"]} => #{msg["tweet"]["id"]}") return r - rescue ActiveRecord::RecordNotUnique - logger.debug("Duplicate Retweet: #{hash[:id]}: #{hash[:user_id]} => #{hash[:tweet_id]}") - rescue => e - logger.error("Unknown error while inserting retweet: #{e.class}: #{e.message}/#{e.backtrace.join("\n")}") end + rescue ActiveRecord::RecordNotUnique + logger.debug("Duplicate Retweet: #{msg["id"]}: #{msg["user"]["id"]} => #{msg["tweet"]["id"]}") + return nil + rescue => e + logger.error("Unknown error while inserting retweet: #{e.class}: #{e.message}/#{e.backtrace.join("\n")}") + return nil end def self.from_tweet_object(status) diff --git a/app/models/tweet.rb b/app/models/tweet.rb index 37e81d9..8d10f96 100644 --- a/app/models/tweet.rb +++ b/app/models/tweet.rb @@ -33,6 +33,12 @@ class Tweet < ActiveRecord::Base joins("INNER JOIN (#{un}) m ON m.tweet_id = tweets.id") } + def notify_favorite + if Settings.notification.enabled + Notification.notify_favorite(self) + end + end + def self.list(params, options = {}) params[:page] ||= "1" if options[:force_page] @@ -74,23 +80,31 @@ class Tweet < ActiveRecord::Base end end - def self.from_hash(hash) - begin - t = logger.quietly do - create!(id: hash[:id], - text: hash[:text], - source: hash[:source], - tweeted_at: hash[:tweeted_at], - user_id: hash[:user_id]) - end - logger.debug("Created Tweet: #{hash[:id]}") + def self.delete_from_receiver(msg) + delete_from_id(msg["id"]) + end + def self.from_receiver(msg) + transaction do + t = self.find_by(id: msg["id"]) + unless t + begin + u = User.from_receiver(msg["user"]) + t = self.create!(id: msg["id"], + text: msg["text"], + source: msg["source"], + tweeted_at: Time.parse(msg["tweeted_at"]), + user: u) + logger.debug("Created Tweet: #{msg["id"]}") + rescue ActiveRecord::RecordNotUnique + logger.debug("Duplicate Tweet: #{msg["id"]}") + end + end return t - rescue ActiveRecord::RecordNotUnique - logger.debug("Duplicate Tweet: #{hash[:id]}") - rescue => e - logger.error("Unknown error while inserting tweet: #{e.class}: #{e.message}/#{e.backtrace.join("\n")}") end + rescue => e + logger.error("Unknown error while inserting tweet: #{e.class}: #{e.message}/#{e.backtrace.join("\n")}") + return nil end def self.parse_query(query) diff --git a/app/models/user.rb b/app/models/user.rb index 6db2c75..1c4cfb4 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -5,38 +5,36 @@ class User < ActiveRecord::Base has_many :favorites, dependent: :delete_all has_many :retweets, dependent: :delete_all - def self.from_hash(hash) - begin - user = where(id: hash[:id]).first_or_initialize - orig = user.attributes.dup - - user.screen_name = hash[:screen_name] - user.name = hash[:name] - user.profile_image_url = hash[:profile_image_url] - user.protected = hash[:protected] - - if orig["screen_name"] == user.screen_name && - orig["name"] == user.name && - orig["profile_image_url"][-44..-1] == user.profile_image_url[-44..-1] && - orig["protected"] == user.protected? - logger.debug("User not changed: #{user.id}") - else - user.save! - logger.debug("User saved: #{user.id}") - end - - return user - rescue - logger.error("Unknown error while inserting user: #{$!}/#{$@}") + def self.from_receiver(msg) + user = where(id: msg["id"]).first_or_initialize + att = user.attributes.dup + + user.screen_name = msg["screen_name"] + user.name = msg["name"] + user.profile_image_url = msg["profile_image_url"] + user.protected = msg["protected"] + + if att["screen_name"] == user.screen_name && + att["name"] == user.name && + att["profile_image_url"][-44..-1] == user.profile_image_url[-44..-1] && + att["protected"] == user.protected? + logger.debug("User not changed: #{user.id}") + else + user.save! + logger.debug("User saved: #{user.id}") end + + return user + rescue + logger.error("Unknown error while inserting user: #{$!}/#{$@}") end def self.from_user_object(user_object) - from_hash(id: user_object.id, - screen_name: user_object.screen_name, - name: user_object.name, - profile_image_url: user_object.profile_image_url_https, - protected: user_object.protected) + from_receiver("id" => user_object.id, + "screen_name" => user_object.screen_name, + "name" => user_object.name, + "profile_image_url" => user_object.profile_image_url_https, + "protected" => user_object.protected) end def protected? @@ -44,7 +42,7 @@ class User < ActiveRecord::Base end def registered? - account + !!account end def account diff --git a/app/views/about/index.html.haml b/app/views/about/index.html.haml index a604ca4..5b33ee1 100644 --- a/app/views/about/index.html.haml +++ b/app/views/about/index.html.haml @@ -1,4 +1,6 @@ %h1 aclog +- if Rails.env.development? + %h1.text-error !!!DEVELOPMENT!!! %p aclog は Twitter でのふぁぼ・RTを集めて表示するサービスです %p diff --git a/collector/stream.rb b/collector/stream.rb index 874cdad..0fda622 100644 --- a/collector/stream.rb +++ b/collector/stream.rb @@ -125,72 +125,54 @@ module Aclog } end - def send_user(user) - @callback.call( - type: "user", - id: user[:id], - screen_name: user[:screen_name], - name: user[:name], - profile_image_url: user[:profile_image_url_https], - protected: user[:protected] - ) - log(:debug, "Sent user", user[:id]) + def conv_user(user) + {id: user[:id], + screen_name: user[:screen_name], + name: user[:name], + profile_image_url: user[:profile_image_url_https], + protected: user[:protected]} + end + + def conv_tweet(status) + {type: "tweet", + id: status[:id], + text: format_text(status), + source: format_source(status), + tweeted_at: status[:created_at], + user: conv_user(status[:user])} end def send_tweet(status) - send_user(status[:user]) - @callback.call( - type: "tweet", - id: status[:id], - text: format_text(status), - source: format_source(status), - tweeted_at: status[:created_at], - user_id: status[:user][:id] - ) + @callback.call(conv_tweet(status)) log(:debug, "Sent tweet", status[:id]) end def send_favorite(source, target, target_object) - send_tweet(target_object) - send_user(source) - @callback.call( - type: "favorite", - tweet_id: target_object[:id], - target_user_id: target[:id], - user_id: source[:id] - ) + @callback.call(type: "favorite", + tweet: conv_tweet(target_object), + user: conv_user(source)) log(:debug, "Sent favorite", source[:id] => target_object[:id]) end def send_unfavorite(source, target, target_object) - @callback.call( - type: "unfavorite", - tweet_id: target_object[:id], - target_user_id: target[:id], - user_id: source[:id] - ) + @callback.call(type: "unfavorite", + tweet: conv_tweet(target_object), + user: conv_user(source)) log(:debug, "Sent unfavorite", source[:id] => target_object[:id]) end def send_retweet(status) - send_tweet(status[:retweeted_status]) - send_user(status[:user]) - @callback.call( - type: "retweet", - id: status[:id], - tweet_id: status[:retweeted_status][:id], - target_user_id: status[:retweeted_status][:user][:id], - user_id: status[:user][:id] - ) + @callback.call(type: "retweet", + id: status[:id], + tweet: conv_tweet(status[:retweeted_status]), + user: conv_user(status[:user])) log(:debug, "Sent retweet", status[:user][:id] => status[:retweeted_status][:id]) end def send_delete(deleted_status_id, deleted_user_id) - @callback.call( - :type => "delete", - :id => deleted_status_id, - :user_id => deleted_user_id - ) + @callback.call(type: "delete", + id: deleted_status_id, + user_id: deleted_user_id) log(:debug, "Sent delete", deleted_user_id => deleted_status_id) end end diff --git a/lib/aclog/receiver/collector_connection.rb b/lib/aclog/receiver/collector_connection.rb index 8e80b1b..0ee8e6c 100644 --- a/lib/aclog/receiver/collector_connection.rb +++ b/lib/aclog/receiver/collector_connection.rb @@ -16,18 +16,15 @@ module Aclog _cr = -> bl { bl.call; @@queue.pop &_cr } EM.defer { @@queue.pop &_cr } end - - @@saved_tweets ||= [] end def send_account(account) - send_object( - type: "account", - id: account.id, - oauth_token: account.oauth_token, - oauth_token_secret: account.oauth_token_secret, - user_id: account.user_id, - consumer_version: account.consumer_version) + send_object(type: "account", + id: account.id, + oauth_token: account.oauth_token, + oauth_token_secret: account.oauth_token_secret, + user_id: account.user_id, + consumer_version: account.consumer_version) Rails.logger.debug("Sent #{account.id}/#{account.user_id}") end @@ -36,8 +33,8 @@ module Aclog end def unbind + @connections.reject! {|k, v| v == self } Rails.logger.info("Connection closed(#{@worker_number})") - @connections.delete_if {|k, v| v == self } end def receive_data(data) @@ -126,44 +123,18 @@ module Aclog # unregister end - def receive_user(msg) - @@queue.push -> do - Rails.logger.debug("Received User(#{@worker_number}): #{msg["id"]}") - User.from_hash(:id => msg["id"], - :screen_name => msg["screen_name"], - :name => msg["name"], - :profile_image_url => msg["profile_image_url"], - :protected => msg["protected"]) - end - end - def receive_tweet(msg) @@queue.push -> do Rails.logger.debug("Received Tweet(#{@worker_number}): #{msg["id"]}") - unless @@saved_tweets.include?(msg["id"]) - @@saved_tweets << msg["id"] - if @@saved_tweets.size > 100000 - Rails.logger.debug("Tweet id dropped from cache: #{@@saved_tweets.shift}") - end - - Tweet.from_hash(:id => msg["id"], - :text => msg["text"], - :source => msg["source"], - :tweeted_at => Time.parse(msg["tweeted_at"]), - :user_id => msg["user_id"]) - else - Rails.logger.debug("Tweet already exists(#{@worker_number}): #{msg["id"]}") - end + Tweet.from_receiver(msg) end end def receive_favorite(msg) @@queue.push -> do Rails.logger.debug("Receive Favorite(#{@worker_number}): #{msg["user_id"]} => #{msg["tweet_id"]}") - f = Favorite.from_hash(:tweet_id => msg["tweet_id"], - :user_id => msg["user_id"]) - if Settings.notification.enabled && t = Tweet.find_by(id: msg["tweet_id"]) - Notification.notify_favorite(t) + if f = Favorite.from_receiver(msg) + f.tweet.notify_favorite end end end @@ -171,24 +142,21 @@ module Aclog def receive_unfavorite(msg) @@queue.push -> do Rails.logger.debug("Receive Unfavorite(#{@worker_number}): #{msg["user_id"]} => #{msg["tweet_id"]}") - Favorite.delete_from_hash(:tweet_id => msg["tweet_id"], - :user_id => msg["user_id"]) + Favorite.delete_from_receiver(msg) end end def receive_retweet(msg) @@queue.push -> do Rails.logger.debug("Receive Retweet(#{@worker_number}): #{msg["user_id"]} => #{msg["tweet_id"]}") - Retweet.from_hash(:id => msg["id"], - :tweet_id => msg["tweet_id"], - :user_id => msg["user_id"]) + Retweet.from_receiver(msg) end end def receive_delete(msg) @@queue.push -> do Rails.logger.debug("Receive Delete(#{@worker_number}): #{msg["id"]}") - Tweet.delete_from_id(msg["id"]) + Tweet.delete_from_receiver(msg) end end end |