diff --git a/app/models/job/http_multi.rb b/app/models/job/http_multi.rb index 7db68d1fd..5bdeac98a 100644 --- a/app/models/job/http_multi.rb +++ b/app/models/job/http_multi.rb @@ -48,7 +48,10 @@ module Job end end unless response.success? + pod = Pod.find_or_create_by_url(response.effective_url) log_line = "event=http_multi_fail sender_id=#{user_id} recipient_id=#{person.id} url=#{response.effective_url} response_code='#{response.code}'" + Rails.logger.info(log_line) + pod.pod_stats.create(:error_message => log_line, :person_id => person.id, :error_code => response.code.to_i) failed_request_people << person.id end end diff --git a/app/models/pod.rb b/app/models/pod.rb new file mode 100644 index 000000000..bd66a5630 --- /dev/null +++ b/app/models/pod.rb @@ -0,0 +1,13 @@ +class Pod < ActiveRecord::Base + has_many :pod_stats + + def self.find_or_create_by_url(url) + u = URI.parse(url) + pod = self.find_or_initialize_by_host(u.host) + unless pod.persisted? + pod.ssl = (u.scheme == 'https')? true : false + pod.save + end + pod + end +end diff --git a/app/models/pod_stat.rb b/app/models/pod_stat.rb new file mode 100644 index 000000000..5452d1f0a --- /dev/null +++ b/app/models/pod_stat.rb @@ -0,0 +1,4 @@ +class PodStat < ActiveRecord::Base + belongs_to :pod + +end diff --git a/db/migrate/20110830000140_remove_pod_stats_table.rb b/db/migrate/20110830000140_remove_pod_stats_table.rb deleted file mode 100644 index 4bc146fa1..000000000 --- a/db/migrate/20110830000140_remove_pod_stats_table.rb +++ /dev/null @@ -1,24 +0,0 @@ -class RemovePodStatsTable < ActiveRecord::Migration - def self.up - drop_table :pods - drop_table :pod_stats - end - - def self.down - create_table :pods do |t| - t.string :host - t.boolean :ssl - - t.timestamps - end - - create_table :pod_stats do |t| - t.integer :error_code - t.integer :person_id - t.text :error_message - t.integer :pod_id - - t.timestamps - end - end -end diff --git a/db/schema.rb b/db/schema.rb index a81802c01..5f7edde5f 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20110830000140) do +ActiveRecord::Schema.define(:version => 20110818212541) do create_table "aspect_memberships", :force => true do |t| t.integer "aspect_id", :null => false @@ -236,6 +236,22 @@ ActiveRecord::Schema.define(:version => 20110830000140) do add_index "people", ["guid"], :name => "index_people_on_guid", :unique => true add_index "people", ["owner_id"], :name => "index_people_on_owner_id", :unique => true + create_table "pod_stats", :force => true do |t| + t.integer "error_code" + t.integer "person_id" + t.text "error_message" + t.integer "pod_id" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "pods", :force => true do |t| + t.string "host" + t.boolean "ssl" + t.datetime "created_at" + t.datetime "updated_at" + end + create_table "post_visibilities", :force => true do |t| t.integer "post_id", :null => false t.datetime "created_at" diff --git a/spec/models/pod_spec.rb b/spec/models/pod_spec.rb new file mode 100644 index 000000000..e6a5e63b9 --- /dev/null +++ b/spec/models/pod_spec.rb @@ -0,0 +1,19 @@ +require 'spec_helper' + +describe Pod do + + it 'has many pod_stats' do + Pod.new.pod_stats.should be_empty + end + describe '.find_or_create_by_url' do + it 'takes a url, and makes one by host' do + pod = Pod.find_or_create_by_url('https://joindiaspora.com/maxwell') + pod.host.should == 'joindiaspora.com' + end + + it 'sets ssl boolean(side-effect)' do + pod = Pod.find_or_create_by_url('https://joindiaspora.com/maxwell') + pod.ssl.should be_true + end + end +end diff --git a/spec/models/pod_stat_spec.rb b/spec/models/pod_stat_spec.rb new file mode 100644 index 000000000..15bc5b2b8 --- /dev/null +++ b/spec/models/pod_stat_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe PodStat do + pending "add some examples to (or delete) #{__FILE__}" +end