-
Notifications
You must be signed in to change notification settings - Fork 1.8k
/
stats_controller.rb
85 lines (78 loc) · 3.05 KB
/
stats_controller.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
class StatsController < ApplicationController
def subscriptions
@tags = {}
TagSelection.where(following: true).each do |tag|
@tags[tag.tagname] = @tags[tag.tagname] || 0
@tags[tag.tagname] += 1
end
render plain: @tags.inspect, status: 200
end
def range
@start = params[:start] ? Time.parse(params[:start]) : Time.now - 1.month
@end = params[:end] ? Time.parse(params[:end]) : Time.now
@notes = Node.select(%i(created type status))
.where(type: 'note', status: 1, created: @[email protected]_i)
.count(:all)
@wikis = Revision.select(:timestamp)
.where(timestamp: @[email protected]_i)
.count - @notes # because notes each have one revision
@people = User.where(created_at: @start..@end)
.joins('INNER JOIN users ON users.uid = rusers.id')
.where('users.status = 1')
.count
@answers = Answer.where(created_at: @start..@end)
.count
@comments = Comment.select(:timestamp)
.where(timestamp: @[email protected]_i)
.count
@questions = Node.questions.where(status: 1, created: @[email protected]_i)
.count
@contributors = User.contributor_count_for(@start, @end)
end
def index
@time = if params[:time]
Time.parse(params[:time])
else
Time.now
end
@weekly_notes = Node.select(%i(created type status))
.where(type: 'note', status: 1, created: @time.to_i - [email protected]_i)
.count(:all)
@weekly_wikis = Revision.select(:timestamp)
.where(timestamp: @time.to_i - [email protected]_i)
.count
@weekly_members = User.where(created_at: @time - 1.weeks..@time)
.joins('INNER JOIN users ON users.uid = rusers.id')
.where('users.status = 1')
.count
@monthly_notes = Node.select(%i(created type status))
.where(type: 'note', status: 1, created: @time.to_i - [email protected]_i)
.count(:all)
@monthly_wikis = Revision.select(:timestamp)
.where(timestamp: @time.to_i - [email protected]_i)
.count
@monthly_members = User.where(created_at: @time - 1.months..@time)
.joins('INNER JOIN users ON users.uid = rusers.id')
.where('users.status = 1')
.count
@notes_per_week_past_year = Node.select(%i(created type status))
.where(type: 'note', status: 1, created: @time.to_i - [email protected]_i)
.count(:all) / 52.0
@edits_per_week_past_year = Revision.select(:timestamp)
.where(timestamp: @time.to_i - [email protected]_i)
.count / 52.0
@graph_notes = Node.contribution_graph_making('note', 52, @time).to_a.to_json
@graph_wikis = Node.contribution_graph_making('page', 52, @time).to_a.to_json
@graph_comments = Comment.contribution_graph_making(52, @time).to_a.to_json
users = []
nids = []
Node.where(type: 'note', status: 1).each do |note|
unless note.uid == 674 || note.uid == 671
users << note.uid
nids << note.nid
end
end
@all_notes = nids.uniq.length
@all_contributors = users.uniq.length
end
end