added users_with_posts_today to DataPoint
This commit is contained in:
parent
ecb059b661
commit
55bfbfd5b0
6 changed files with 63 additions and 10 deletions
|
|
@ -1,6 +1,12 @@
|
|||
class DataPoint < ActiveRecord::Base
|
||||
attr_accessor :descriptor
|
||||
attr_accessor :value
|
||||
|
||||
belongs_to :statistic
|
||||
|
||||
def self.users_with_posts_today(number)
|
||||
sql = ActiveRecord::Base.connection()
|
||||
value = sql.execute(
|
||||
"SELECT COUNT(*) FROM (SELECT `people`.guid, COUNT(*) AS posts_sum FROM `people` LEFT JOIN `posts` ON `people`.id = `posts`.person_id AND `posts`.created_at > '#{(Time.now - 1.days).to_date}' GROUP BY `people`.guid) AS t1 WHERE t1.posts_sum = #{number};"
|
||||
).first[0]
|
||||
|
||||
self.new(:key => number, :value => value)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
class Statistc < ActiveRecord::Base
|
||||
attr_accessor :average
|
||||
|
||||
has_many :data_points, :class_name => 'DataPoint'
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
class CreateDataPoints < ActiveRecord::Migration
|
||||
def self.up
|
||||
create_table :data_points do |t|
|
||||
t.string :descriptor
|
||||
t.string :key
|
||||
t.integer :value
|
||||
t.integer :statistic_id
|
||||
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ ActiveRecord::Schema.define(:version => 20110120182100) do
|
|||
add_index "contacts", ["user_id", "person_id"], :name => "index_contacts_on_user_id_and_person_id", :unique => true
|
||||
|
||||
create_table "data_points", :force => true do |t|
|
||||
t.string "descriptor"
|
||||
t.string "key"
|
||||
t.integer "value"
|
||||
t.integer "statistic_id"
|
||||
t.datetime "created_at"
|
||||
|
|
|
|||
|
|
@ -22,13 +22,19 @@ namespace :statistics do
|
|||
|
||||
def users_with_x_posts(count)
|
||||
@sql.execute(
|
||||
"SELECT COUNT(*) FROM (SELECT `people`.guid, COUNT(*) AS posts_sum FROM `people` LEFT JOIN `posts` ON `people`.id = `posts`.person_id GROUP BY `people`.guid) AS t1 WHERE t1.posts_sum > #{count};"
|
||||
"SELECT COUNT(*) FROM (SELECT `people`.guid, COUNT(*) AS posts_sum FROM `people` LEFT JOIN `posts` ON `people`.id = `posts`.person_id GROUP BY `people`.guid) AS t1 WHERE t1.posts_sum = #{count};"
|
||||
).first[0]
|
||||
end
|
||||
|
||||
def users_with_x_posts_today(count)
|
||||
@sql.execute(
|
||||
"SELECT COUNT(*) FROM (SELECT `people`.guid, COUNT(*) AS posts_sum FROM `people` LEFT JOIN `posts` ON `people`.id = `posts`.person_id AND `post`.created_at > '#{(Time.now - 1.days).to_date}' GROUP BY `people`.guid) AS t1 WHERE t1.posts_sum = #{count};"
|
||||
).first[0]
|
||||
end
|
||||
|
||||
def users_with_x_contacts(count)
|
||||
@sql.execute(
|
||||
"SELECT COUNT(*) FROM (SELECT `users`.id, COUNT(*) AS contact_sum FROM `users` LEFT JOIN `contacts` ON `users`.id = `contacts`.person_id AND `contacts`.pending = 0 GROUP BY `users`.id) AS t1 WHERE t1.contact_sum > #{count};"
|
||||
"SELECT COUNT(*) FROM (SELECT `users`.id, COUNT(*) AS contact_sum FROM `users` LEFT JOIN `contacts` ON `users`.id = `contacts`.person_id AND `contacts`.pending = 0 GROUP BY `users`.id) AS t1 WHERE t1.contact_sum = #{count};"
|
||||
).first[0]
|
||||
end
|
||||
|
||||
|
|
@ -49,6 +55,15 @@ namespace :statistics do
|
|||
puts "Users with 10 or more contacts: %i" % users_with_x_contacts(9)
|
||||
end
|
||||
|
||||
task :model => :environment do
|
||||
stat = Statistic.new(:type => "posts_per_day")
|
||||
[0..15].each do |n|
|
||||
stat.data_points << DataPoint.posts_per_day(n)
|
||||
end
|
||||
stat.compute_avg
|
||||
stat.save!
|
||||
end
|
||||
|
||||
task :splunk => :environment do
|
||||
puts "event=statistic, type=users, count=#{users}, "+
|
||||
"incomplete=#{incomplete}, " +
|
||||
|
|
|
|||
|
|
@ -1,5 +1,39 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe DataPoint do
|
||||
pending "add some examples to (or delete) #{__FILE__}"
|
||||
context '.posts_per_day_last_week' do
|
||||
before do
|
||||
1.times do |n|
|
||||
alice.post(:status_message, :message => 'hi', :to => alice.aspects.first)
|
||||
end
|
||||
|
||||
5.times do |n|
|
||||
bob.post(:status_message, :message => 'hi', :to => bob.aspects.first)
|
||||
end
|
||||
|
||||
10.times do |n|
|
||||
eve.post(:status_message, :message => 'hi', :to => eve.aspects.first)
|
||||
end
|
||||
end
|
||||
|
||||
it 'returns a DataPoint object' do
|
||||
DataPoint.users_with_posts_today(1).class.should == DataPoint
|
||||
end
|
||||
|
||||
it 'returns a DataPoint with non-zero value' do
|
||||
point = DataPoint.users_with_posts_today(1)
|
||||
point.value.should == 1
|
||||
end
|
||||
|
||||
it 'returns a DataPoint with zero value' do
|
||||
point = DataPoint.users_with_posts_today(15)
|
||||
point.value.should == 0
|
||||
end
|
||||
|
||||
it 'returns the correct descriptor' do
|
||||
point = DataPoint.users_with_posts_today(15)
|
||||
point.key.should == 15
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
Loading…
Reference in a new issue