Skip to content

Instantly share code, notes, and snippets.

@sevos
Created May 15, 2011 09:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sevos/972995 to your computer and use it in GitHub Desktop.
Save sevos/972995 to your computer and use it in GitHub Desktop.
class DailyStatsReport < KPI::Report
def users
result 'Users', User.count, :description => 'Total users count'
end
def premium_users
result 'Premium users', User.premium.count
end
def premium_users_percentage
result 'Premium users', premium_users.to_f / users * 100, :unit => '%'
end
def income
result 'Total income', Order.paid.sum(:total), :unit => 'EUR'
end
def daily_income
result 'Daily income', Order.paid.where(:created_at => the_day).sum(:total), :unit => 'EUR'
end
private
def the_day
@yesterday ||= begin
yesterday = (time - 1.day)
yesterday.beginning_of_day..yesterday.end_of_day
end
end
end
report = DailyStatsReport.new
> report.users
=> #<KPI::Entry:0x10177f630 @name="Users", @unit=nil, @description="Total users count", @value=874>
> report.entries.map(&:value)
=> [874, 14, 138.6, 19.8]
report = DailyStatsReport.new(:time => 1.day.ago)
report_today = DailyStatsReport.new
report_yesterday = DailyStatsReport.new(:time => 1.day.ago)
diff_report = KPI::MergedReport.new(report_today, report_yesterday) do |entry_today, entry_yesterday|
KPI::Entry.new '$$ (change)', entry_today.value - entry_yesterday.value
end
> diff_report.premium_users
=> #<KPI::Entry:0x11577e319 @name="Premium users (change)", @unit=nil, @description="", @value=2>
avg_report = KPI::MergedReport.new(*week_reports) do |*entries|
KPI::Entry.new '$$ (avg)', entries.map(&:value).inject(:+).to_f / entries.size
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment