Commit 4feaaba5dd05b4ba6bffd487c74dd939f3e2b4e7

Authored by Miguel Barao
1 parent 8584ceb0
Exists in master and in 1 other branch dev

- show ip address and user-agent of online students

app.py
... ... @@ -156,6 +156,8 @@ class App(object):
156 156 d[uid]['start_time'] = self.online.get(uid, {}).get('test', {}).get('start_time','')
157 157 d[uid]['password_defined'] = pw != ''
158 158 d[uid]['grades'] = self.db.get_student_grades_from_test(uid, self.testfactory['ref'])
  159 + d[uid]['ip_address'] = self.online.get(uid, {}).get('student', {}).get('ip_address','')
  160 + d[uid]['user_agent'] = self.online.get(uid, {}).get('student', {}).get('user_agent','')
159 161 return d
160 162  
161 163 # def get_this_students_grades(self):
... ... @@ -179,6 +181,12 @@ class App(object):
179 181 self.db.reset_password(uid)
180 182 logger.info('Student {}: password reset to ""'.format(uid))
181 183  
  184 + def set_user_agent(self, uid, user_agent=''):
  185 + self.online[uid]['student']['user_agent'] = user_agent
  186 +
  187 + def set_user_ip(self, uid, ipaddress=''):
  188 + self.online[uid]['student']['ip_address'] = ipaddress
  189 +
182 190 # ============================================================================
183 191 ch = logging.StreamHandler()
184 192 ch.setLevel(logging.INFO)
... ...
serve.py
... ... @@ -133,7 +133,9 @@ class Root(object):
133 133  
134 134 if self.app.login(uid, pw): # ok
135 135 cherrypy.session[SESSION_KEY] = cherrypy.request.login = uid
136   - raise cherrypy.HTTPRedirect('/') # FIXME
  136 + self.app.set_user_agent(uid, cherrypy.request.headers.get('User-Agent', ''))
  137 + self.app.set_user_ip(uid, cherrypy.request.remote.ip)
  138 + raise cherrypy.HTTPRedirect('/')
137 139 else: # denied
138 140 return self.template['login'].render()
139 141  
... ...
static/js/admin.js
... ... @@ -46,13 +46,20 @@ $(document).ready(function() {
46 46 var rows = "";
47 47 $.each(students, function(i, r) {
48 48 if (r[1]['start_time'] != '') {
49   - active.push([r[0], r[1]['name'], r[1]['start_time']]);
  49 + active.push([r[0], r[1]['name'], r[1]['start_time'], r[1]['ip_address'], r[1]['user_agent']]);
50 50 }
51 51 });
  52 + // sort by start time
52 53 active.sort(function(a,b){return a[2] < b[2] ? -1 : (a[2] == b[2] ? 0 : 1);});
53 54 n = active.length;
54 55 for(var i = 0; i < n; i++) {
55   - rows += "<tr><td>" + active[i][0] + "</td><td>" + active[i][1] + "</td><td>" + active[i][2].slice(0,10) + "</td><td>" + active[i][2].slice(11,19) + "</td></tr>";
  56 + rows += "<tr>\
  57 + <td>" + active[i][0] + "</td>\
  58 + <td>" + active[i][1] + "</td>\
  59 + <td>" + active[i][2].slice(0,10) + "</td>\
  60 + <td>" + active[i][2].slice(11,19) + '</td>\
  61 + <td><div data-toggle="tooltip" data-placement="top" title="' + active[i][4] + '">' + active[i][3] + '</div></td>\
  62 + </tr>';
56 63 }
57 64 $("#online_students").html(rows);
58 65 $("#online-header").html(n + " Activo(s)");
... ...
templates/admin.html
... ... @@ -92,6 +92,7 @@
92 92 <th>Nome</th>
93 93 <th>Data de início</th>
94 94 <th>Hora de início</th>
  95 + <th>IP</th>
95 96 </tr>
96 97 </thead>
97 98 <tbody id="online_students">
... ...