Description:
fix date time
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r443:2d5e2b9fa726 - - 1 file changed: 4 inserted, 2 deleted

@@ -1,193 +1,195
1 1 class ReportController < ApplicationController
2 2
3 3 before_filter :admin_authorization, only: [:login_stat,:submission_stat]
4 4 before_filter(only: [:problem_hof]) { |c|
5 5 return false unless authenticate
6 6
7 7 if GraderConfiguration["right.user_view_submission"]
8 8 return true;
9 9 end
10 10
11 11 admin_authorization
12 12 }
13 13
14 14 def login_stat
15 15 @logins = Array.new
16 16
17 17 date_and_time = '%Y-%m-%d %H:%M'
18 18 begin
19 - @since_time = DateTime.strptime(params[:since_datetime],date_and_time)
19 + md = params[:since_datetime].match(/(\d+)-(\d+)-(\d+) (\d+):(\d+)/)
20 + @since_time = Time.zone.local(md[1].to_i,md[2].to_i,md[3].to_i,md[4].to_i,md[5].to_i)
20 21 rescue
21 22 @since_time = DateTime.new(1000,1,1)
22 23 end
23 24 begin
24 - @until_time = DateTime.strptime(params[:until_datetime],date_and_time)
25 + md = params[:until_datetime].match(/(\d+)-(\d+)-(\d+) (\d+):(\d+)/)
26 + @until_time = Time.zone.local(md[1].to_i,md[2].to_i,md[3].to_i,md[4].to_i,md[5].to_i)
25 27 rescue
26 28 @until_time = DateTime.new(3000,1,1)
27 29 end
28 30
29 31 User.all.each do |user|
30 32 @logins << { id: user.id,
31 33 login: user.login,
32 34 full_name: user.full_name,
33 35 count: Login.where("user_id = ? AND created_at >= ? AND created_at <= ?",
34 36 user.id,@since_time,@until_time)
35 37 .count(:id),
36 38 min: Login.where("user_id = ? AND created_at >= ? AND created_at <= ?",
37 39 user.id,@since_time,@until_time)
38 40 .minimum(:created_at),
39 41 max: Login.where("user_id = ? AND created_at >= ? AND created_at <= ?",
40 42 user.id,@since_time,@until_time)
41 43 .maximum(:created_at),
42 44 ip: Login.where("user_id = ? AND created_at >= ? AND created_at <= ?",
43 45 user.id,@since_time,@until_time)
44 46 .select(:ip_address).uniq
45 47
46 48 }
47 49 end
48 50 end
49 51
50 52 def submission_stat
51 53
52 54 date_and_time = '%Y-%m-%d %H:%M'
53 55 begin
54 56 @since_time = DateTime.strptime(params[:since_datetime],date_and_time)
55 57 rescue
56 58 @since_time = DateTime.new(1000,1,1)
57 59 end
58 60 begin
59 61 @until_time = DateTime.strptime(params[:until_datetime],date_and_time)
60 62 rescue
61 63 @until_time = DateTime.new(3000,1,1)
62 64 end
63 65
64 66 @submissions = {}
65 67
66 68 User.find_each do |user|
67 69 @submissions[user.id] = { login: user.login, full_name: user.full_name, count: 0, sub: { } }
68 70 end
69 71
70 72 Submission.where("submitted_at >= ? AND submitted_at <= ?",@since_time,@until_time).find_each do |s|
71 73 if @submissions[s.user_id]
72 74 if not @submissions[s.user_id][:sub].has_key?(s.problem_id)
73 75 a = nil
74 76 begin
75 77 a = Problem.find(s.problem_id)
76 78 rescue
77 79 a = nil
78 80 end
79 81 @submissions[s.user_id][:sub][s.problem_id] =
80 82 { prob_name: (a ? a.full_name : '(NULL)'),
81 83 sub_ids: [s.id] }
82 84 else
83 85 @submissions[s.user_id][:sub][s.problem_id][:sub_ids] << s.id
84 86 end
85 87 @submissions[s.user_id][:count] += 1
86 88 end
87 89 end
88 90 end
89 91
90 92 def problem_hof
91 93 # gen problem list
92 94 @user = User.find(session[:user_id])
93 95 @problems = @user.available_problems
94 96
95 97 # get selected problems or the default
96 98 if params[:id]
97 99 begin
98 100 @problem = Problem.available.find(params[:id])
99 101 rescue
100 102 redirect_to action: :problem_hof
101 103 flash[:notice] = 'Error: submissions for that problem are not viewable.'
102 104 return
103 105 end
104 106 end
105 107
106 108 if @problem
107 109 #aggregrate by language
108 110 @by_lang = {}
109 111 Submission.where(problem_id: @problem.id).find_each do |sub|
110 112 lang = Language.find_by_id(sub.language_id)
111 113 next unless lang
112 114 next unless sub.points >= @problem.full_score
113 115
114 116 #initialize
115 117 unless @by_lang.has_key?(lang.pretty_name)
116 118 @by_lang[lang.pretty_name] = {
117 119 runtime: { avail: false, value: 2**30-1 },
118 120 memory: { avail: false, value: 2**30-1 },
119 121 length: { avail: false, value: 2**30-1 },
120 122 first: { avail: false, value: DateTime.new(3000,1,1) }
121 123 }
122 124 end
123 125
124 126 if sub.max_runtime and sub.max_runtime < @by_lang[lang.pretty_name][:runtime][:value]
125 127 @by_lang[lang.pretty_name][:runtime] = {
126 128 avail: true,
127 129 user_id: sub.user_id,
128 130 value: sub.max_runtime,
129 131 sub_id: sub.id
130 132 }
131 133 end
132 134
133 135 if sub.peak_memory and sub.peak_memory < @by_lang[lang.pretty_name][:memory][:value]
134 136 @by_lang[lang.pretty_name][:memory] = {
135 137 avail: true,
136 138 user_id: sub.user_id,
137 139 value: sub.peak_memory,
138 140 sub_id: sub.id
139 141 }
140 142 end
141 143
142 144 if sub.submitted_at and sub.submitted_at < @by_lang[lang.pretty_name][:first][:value] and
143 145 !sub.user.admin?
144 146 @by_lang[lang.pretty_name][:first] = {
145 147 avail: true,
146 148 user_id: sub.user_id,
147 149 value: sub.submitted_at,
148 150 sub_id: sub.id
149 151 }
150 152 end
151 153
152 154 if @by_lang[lang.pretty_name][:length][:value] > sub.effective_code_length
153 155 @by_lang[lang.pretty_name][:length] = {
154 156 avail: true,
155 157 user_id: sub.user_id,
156 158 value: sub.effective_code_length,
157 159 sub_id: sub.id
158 160 }
159 161 end
160 162 end
161 163
162 164 #process user_id
163 165 @by_lang.each do |lang,prop|
164 166 prop.each do |k,v|
165 167 v[:user] = User.exists?(v[:user_id]) ? User.find(v[:user_id]).full_name : "(NULL)"
166 168 end
167 169 end
168 170
169 171 #sum into best
170 172 if @by_lang and @by_lang.first
171 173 @best = @by_lang.first[1].clone
172 174 @by_lang.each do |lang,prop|
173 175 if @best[:runtime][:value] >= prop[:runtime][:value]
174 176 @best[:runtime] = prop[:runtime]
175 177 @best[:runtime][:lang] = lang
176 178 end
177 179 if @best[:memory][:value] >= prop[:memory][:value]
178 180 @best[:memory] = prop[:memory]
179 181 @best[:memory][:lang] = lang
180 182 end
181 183 if @best[:length][:value] >= prop[:length][:value]
182 184 @best[:length] = prop[:length]
183 185 @best[:length][:lang] = lang
184 186 end
185 187 if @best[:first][:value] >= prop[:first][:value]
186 188 @best[:first] = prop[:first]
187 189 @best[:first][:lang] = lang
188 190 end
189 191 end
190 192 end
191 193 end
192 194 end
193 195 end
You need to be logged in to leave comments. Login now