AIdeaText commited on
Commit
6674bfa
·
verified ·
1 Parent(s): dfb74b5

Update modules/admin/admin_ui.py

Browse files
Files changed (1) hide show
  1. modules/admin/admin_ui.py +90 -55
modules/admin/admin_ui.py CHANGED
@@ -137,77 +137,112 @@ def admin_page():
137
  st.error("Estudiante no encontrado")
138
 
139
  #######################################################################
140
- # Tab 3: Actividad de la Plataforma
141
- with tab3:
142
- st.header("Actividad Reciente")
143
-
 
 
 
 
 
 
144
  # Obtener sesiones recientes
145
- recent_sessions = get_recent_sessions(10)
146
-
147
- if recent_sessions:
148
- # Crear dataframe para mostrar los datos
149
- sessions_data = []
150
- for session in recent_sessions:
151
- # Convertir loginTime a formato legible
152
- login_time = datetime.fromisoformat(
153
- session['loginTime'].rstrip('Z')
154
- ).strftime("%Y-%m-%d %H:%M:%S")
 
 
 
 
155
 
156
  # Manejar el caso de logout_time cuando la sesión está activa
157
  if session.get('logoutTime') and session['logoutTime'] != "Activo":
158
- logout_time = datetime.fromisoformat(
159
- session['logoutTime'].rstrip('Z')
160
- ).strftime("%Y-%m-%d %H:%M:%S")
 
 
 
161
  else:
162
  logout_time = "Activo"
163
 
 
164
  sessions_data.append({
165
- "Usuario": session['username'],
166
  "Inicio de Sesión": login_time,
167
  "Fin de Sesión": logout_time,
168
  "Duración": format_duration(session.get('sessionDuration', 0))
169
  })
 
 
 
 
 
 
 
 
170
 
171
- # Mostrar tabla con estilos
172
- st.dataframe(
173
- sessions_data,
174
- hide_index=True,
175
- column_config={
176
- "Usuario": st.column_config.TextColumn(
177
- "Usuario",
178
- width="medium"
179
- ),
180
- "Inicio de Sesión": st.column_config.TextColumn(
181
- "Inicio de Sesión",
182
- width="medium"
183
- ),
184
- "Fin de Sesión": st.column_config.TextColumn(
185
- "Fin de Sesión",
186
- width="medium"
187
- ),
188
- "Duración": st.column_config.TextColumn(
189
- "Duración",
190
- width="small"
191
- )
192
- }
193
- )
194
-
195
- # Añadir métricas resumen
196
- total_sessions = len(sessions_data)
197
- total_users = len(set(session['Usuario'] for session in sessions_data))
198
-
199
- metric_col1, metric_col2 = st.columns(2)
200
- with metric_col1:
201
- st.metric("Total de Sesiones", total_sessions)
202
- with metric_col2:
203
- st.metric("Usuarios Únicos", total_users)
204
-
205
- else:
206
- st.info("No hay registros de sesiones recientes")
 
 
 
 
 
 
 
 
 
 
 
207
 
 
208
  # Agregar una línea divisoria antes del botón
209
  st.markdown("---")
210
-
 
211
  # Centrar el botón de cierre de sesión
212
  col1, col2, col3 = st.columns([2,1,2])
213
  with col2:
 
137
  st.error("Estudiante no encontrado")
138
 
139
  #######################################################################
140
+ # Tab 3: Actividad de la Plataforma
141
+ with tab3:
142
+ st.header("Actividad Reciente")
143
+
144
+ # Agregar botón de actualización
145
+ if st.button("Actualizar datos", key="refresh_sessions", type="primary"):
146
+ st.rerun()
147
+
148
+ # Mostrar spinner mientras carga
149
+ with st.spinner("Cargando datos de sesiones..."):
150
  # Obtener sesiones recientes
151
+ recent_sessions = get_recent_sessions(20) # Aumentado a 20 para más datos
152
+
153
+ if recent_sessions:
154
+ # Crear dataframe para mostrar los datos
155
+ sessions_data = []
156
+ for session in recent_sessions:
157
+ try:
158
+ # Manejar el formato de fecha con manejo de excepciones
159
+ try:
160
+ login_time = datetime.fromisoformat(
161
+ session['loginTime'].replace('Z', '+00:00')
162
+ ).strftime("%Y-%m-%d %H:%M:%S")
163
+ except Exception as e:
164
+ login_time = session['loginTime']
165
 
166
  # Manejar el caso de logout_time cuando la sesión está activa
167
  if session.get('logoutTime') and session['logoutTime'] != "Activo":
168
+ try:
169
+ logout_time = datetime.fromisoformat(
170
+ session['logoutTime'].replace('Z', '+00:00')
171
+ ).strftime("%Y-%m-%d %H:%M:%S")
172
+ except Exception as e:
173
+ logout_time = session['logoutTime']
174
  else:
175
  logout_time = "Activo"
176
 
177
+ # Agregar datos a la lista
178
  sessions_data.append({
179
+ "Usuario": session.get('username', 'Desconocido'),
180
  "Inicio de Sesión": login_time,
181
  "Fin de Sesión": logout_time,
182
  "Duración": format_duration(session.get('sessionDuration', 0))
183
  })
184
+ except Exception as e:
185
+ st.error(f"Error procesando sesión: {str(e)}")
186
+ continue
187
+
188
+ # Mostrar información de depuración si hay problemas
189
+ with st.expander("Información de depuración", expanded=False):
190
+ st.write("Datos crudos recuperados:")
191
+ st.json(recent_sessions)
192
 
193
+ st.write("Datos procesados para mostrar:")
194
+ st.json(sessions_data)
195
+
196
+ # Mostrar tabla con estilos
197
+ st.dataframe(
198
+ sessions_data,
199
+ hide_index=True,
200
+ column_config={
201
+ "Usuario": st.column_config.TextColumn(
202
+ "Usuario",
203
+ width="medium"
204
+ ),
205
+ "Inicio de Sesión": st.column_config.TextColumn(
206
+ "Inicio de Sesión",
207
+ width="medium"
208
+ ),
209
+ "Fin de Sesión": st.column_config.TextColumn(
210
+ "Fin de Sesión",
211
+ width="medium"
212
+ ),
213
+ "Duración": st.column_config.TextColumn(
214
+ "Duración",
215
+ width="small"
216
+ )
217
+ }
218
+ )
219
+
220
+ # Añadir métricas resumen
221
+ total_sessions = len(sessions_data)
222
+ total_users = len(set(session['Usuario'] for session in sessions_data))
223
+
224
+ metric_col1, metric_col2 = st.columns(2)
225
+ with metric_col1:
226
+ st.metric("Total de Sesiones", total_sessions)
227
+ with metric_col2:
228
+ st.metric("Usuarios Únicos", total_users)
229
+ else:
230
+ st.info("No hay registros de sesiones recientes o hubo un problema al recuperarlos.")
231
+
232
+ # Ayuda de depuración
233
+ if st.button("Mostrar diagnóstico"):
234
+ st.write("Verificando la función get_recent_sessions:")
235
+ container = get_container("users_sessions")
236
+ if container:
237
+ st.success("✅ Conectado al contenedor users_sessions")
238
+ else:
239
+ st.error("❌ No se pudo conectar al contenedor users_sessions")
240
 
241
+ ##################################################################
242
  # Agregar una línea divisoria antes del botón
243
  st.markdown("---")
244
+
245
+ ##################################################################
246
  # Centrar el botón de cierre de sesión
247
  col1, col2, col3 = st.columns([2,1,2])
248
  with col2: