app/models/cohortly/report.rb in cohortly-0.0.7 vs app/models/cohortly/report.rb in cohortly-0.0.8
- old
+ new
@@ -1,19 +1,20 @@
module Cohortly
class Report
# this is the reduced collection
- attr_accessor :collection, :weekly, :key_pattern, :groups, :tags
+ attr_accessor :collection, :weekly, :key_pattern, :groups, :tags, :report_meta
def initialize( tags = nil, groups = nil, weekly = true )
self.collection = Cohortly::Metric.report_table_name(tags, groups, weekly)
+ self.report_meta = ReportMeta.find_or_create_by_collection_name(self.collection)
self.groups = groups
self.tags = tags
self.weekly = weekly
self.key_pattern = self.weekly ? "%Y-%W" : "%Y-%m"
end
def data
- @data ||= (Cohortly::Metric.database[self.collection].find().collect {|x| x}).sort_by {|x| x['_id'] }
+ @data ||= (Cohortly::Metric.database[self.report_meta.store_name].find().collect {|x| x}).sort_by {|x| x['_id'] }
end
def fix_data_lines
data.each do |line|
period_cohorts_from(line['_id']).collect do |key|
@@ -43,23 +44,24 @@
def key_to_time(report_key)
DateTime.strptime(report_key, self.key_pattern).to_time.utc
end
def user_count_in_cohort(report_key)
- params = { :user_start_date => { :$gt => key_to_time(report_key) - self.offset,
- :$lt => (key_to_time(report_key))}}
+ params = { :user_start_date => { :$gt => key_to_time(report_key),
+ :$lt => (key_to_time(report_key) + 1.week)}}
params[:tags] = { :$in => groups } if self.groups
Cohortly::Metric.collection.distinct(:user_id, params).length
end
def period_cohorts
return [] unless data.first
start_time = key_to_time(start_key)
end_time = key_to_time(end_key)
cur_time = start_time
- res = []
- while(cur_time <= end_time) do
+ res = [start_key]
+ cur_time += self.offset
+ while(cur_time < end_time) do
res << time_to_key(cur_time)
cur_time += self.offset
end
res
end
@@ -97,10 +99,15 @@
@base_n ||= self.period_cohorts.inject({ }) { |accum, key| accum[key] = user_count_in_cohort(key); accum }
end
def as_json(*args)
fix_data_lines
- { :data => data,
+ { :name => report_meta.collection_name,
+ :store_name => report_meta.store_name,
+ :groups => self.groups,
+ :tags => self.tags,
+ :weekly => self.weekly,
+ :data => data,
:base_n => base_n
}
end
end
end