aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/UserStatistics/WebStatsModule.cs43
1 files changed, 13 insertions, 30 deletions
diff --git a/OpenSim/Region/UserStatistics/WebStatsModule.cs b/OpenSim/Region/UserStatistics/WebStatsModule.cs
index faf746f..c11ea02 100644
--- a/OpenSim/Region/UserStatistics/WebStatsModule.cs
+++ b/OpenSim/Region/UserStatistics/WebStatsModule.cs
@@ -57,7 +57,12 @@ namespace OpenSim.Region.UserStatistics
57 LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 57 LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
58 58
59 private static SqliteConnection dbConn; 59 private static SqliteConnection dbConn;
60
61 /// <summary>
62 /// User statistics sessions keyed by agent ID
63 /// </summary>
60 private Dictionary<UUID, UserSessionID> m_sessions = new Dictionary<UUID, UserSessionID>(); 64 private Dictionary<UUID, UserSessionID> m_sessions = new Dictionary<UUID, UserSessionID>();
65
61 private List<Scene> m_scenes = new List<Scene>(); 66 private List<Scene> m_scenes = new List<Scene>();
62 private Dictionary<string, IStatsController> reports = new Dictionary<string, IStatsController>(); 67 private Dictionary<string, IStatsController> reports = new Dictionary<string, IStatsController>();
63 private Dictionary<UUID, USimStatsData> m_simstatsCounters = new Dictionary<UUID, USimStatsData>(); 68 private Dictionary<UUID, USimStatsData> m_simstatsCounters = new Dictionary<UUID, USimStatsData>();
@@ -308,49 +313,41 @@ namespace OpenSim.Region.UserStatistics
308 scene.EventManager.OnDeregisterCaps += OnDeRegisterCaps; 313 scene.EventManager.OnDeregisterCaps += OnDeRegisterCaps;
309 scene.EventManager.OnClientClosed += OnClientClosed; 314 scene.EventManager.OnClientClosed += OnClientClosed;
310 scene.EventManager.OnMakeRootAgent += OnMakeRootAgent; 315 scene.EventManager.OnMakeRootAgent += OnMakeRootAgent;
311 scene.EventManager.OnMakeChildAgent += OnMakeChildAgent;
312 } 316 }
313 } 317 }
314 } 318 }
315 319
316 private void OnMakeRootAgent(ScenePresence agent) 320 private void OnMakeRootAgent(ScenePresence agent)
317 { 321 {
318 UUID regionUUID = GetRegionUUIDFromHandle(agent.RegionHandle);
319
320 lock (m_sessions) 322 lock (m_sessions)
321 { 323 {
324 UserSessionID uid;
325
322 if (!m_sessions.ContainsKey(agent.UUID)) 326 if (!m_sessions.ContainsKey(agent.UUID))
323 { 327 {
324 UserSessionData usd = UserSessionUtil.newUserSessionData(); 328 UserSessionData usd = UserSessionUtil.newUserSessionData();
325 329 uid = new UserSessionID();
326 UserSessionID uid = new UserSessionID();
327 uid.name_f = agent.Firstname; 330 uid.name_f = agent.Firstname;
328 uid.name_l = agent.Lastname; 331 uid.name_l = agent.Lastname;
329 uid.region_id = regionUUID;
330 uid.session_id = agent.ControllingClient.SessionId;
331 uid.session_data = usd; 332 uid.session_data = usd;
332 333
333 m_sessions.Add(agent.UUID, uid); 334 m_sessions.Add(agent.UUID, uid);
334 } 335 }
335 else 336 else
336 { 337 {
337 UserSessionID uid = m_sessions[agent.UUID]; 338 uid = m_sessions[agent.UUID];
338 uid.region_id = regionUUID;
339 uid.session_id = agent.ControllingClient.SessionId;
340 m_sessions[agent.UUID] = uid;
341 } 339 }
342 }
343 }
344 340
345 private void OnMakeChildAgent(ScenePresence agent) 341 uid.region_id = agent.Scene.RegionInfo.RegionID;
346 { 342 uid.session_id = agent.ControllingClient.SessionId;
343 }
347 } 344 }
348 345
349 private void OnClientClosed(UUID agentID, Scene scene) 346 private void OnClientClosed(UUID agentID, Scene scene)
350 { 347 {
351 lock (m_sessions) 348 lock (m_sessions)
352 { 349 {
353 if (m_sessions.ContainsKey(agentID)) 350 if (m_sessions.ContainsKey(agentID) && m_sessions[agentID].region_id == scene.RegionInfo.RegionID)
354 { 351 {
355 m_sessions.Remove(agentID); 352 m_sessions.Remove(agentID);
356 } 353 }
@@ -395,20 +392,6 @@ namespace OpenSim.Region.UserStatistics
395 return encoding.GetString(buffer); 392 return encoding.GetString(buffer);
396 } 393 }
397 394
398 private UUID GetRegionUUIDFromHandle(ulong regionhandle)
399 {
400 lock (m_scenes)
401 {
402 foreach (Scene scene in m_scenes)
403 {
404 if (scene.RegionInfo.RegionHandle == regionhandle)
405 return scene.RegionInfo.RegionID;
406 }
407 }
408
409 return UUID.Zero;
410 }
411
412 /// <summary> 395 /// <summary>
413 /// Callback for a viewerstats cap 396 /// Callback for a viewerstats cap
414 /// </summary> 397 /// </summary>