diff options
Diffstat (limited to 'OpenSim/Region/Framework')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SimStatsReporter.cs | 48 |
1 files changed, 43 insertions, 5 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs b/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs index 5c56264..08d8d7c 100644 --- a/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs +++ b/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs | |||
@@ -26,7 +26,7 @@ | |||
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | //using System.Collections.Generic; | 29 | using System.Collections.Generic; |
30 | using System.Timers; | 30 | using System.Timers; |
31 | using OpenMetaverse.Packets; | 31 | using OpenMetaverse.Packets; |
32 | using OpenSim.Framework; | 32 | using OpenSim.Framework; |
@@ -35,10 +35,18 @@ using OpenSim.Region.Framework.Interfaces; | |||
35 | 35 | ||
36 | namespace OpenSim.Region.Framework.Scenes | 36 | namespace OpenSim.Region.Framework.Scenes |
37 | { | 37 | { |
38 | /// <summary> | ||
39 | /// Collect statistics from the scene to send to the client and for access by other monitoring tools. | ||
40 | /// </summary> | ||
41 | /// <remarks> | ||
42 | /// FIXME: This should be a monitoring region module | ||
43 | /// </remarks> | ||
38 | public class SimStatsReporter | 44 | public class SimStatsReporter |
39 | { | 45 | { |
40 | // private static readonly log4net.ILog m_log | 46 | private static readonly log4net.ILog m_log |
41 | // = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | 47 | = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); |
48 | |||
49 | public const string LastReportedObjectUpdateStatName = "LastReportedObjectUpdates"; | ||
42 | 50 | ||
43 | public delegate void SendStatResult(SimStats stats); | 51 | public delegate void SendStatResult(SimStats stats); |
44 | 52 | ||
@@ -100,6 +108,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
100 | get { return lastReportedSimStats; } | 108 | get { return lastReportedSimStats; } |
101 | } | 109 | } |
102 | 110 | ||
111 | /// <summary> | ||
112 | /// Extra sim statistics that are used by monitors but not sent to the client. | ||
113 | /// </summary> | ||
114 | /// <value> | ||
115 | /// The keys are the stat names. | ||
116 | /// </value> | ||
117 | private Dictionary<string, float> m_lastReportedExtraSimStats = new Dictionary<string, float>(); | ||
118 | |||
103 | // Sending a stats update every 3 seconds- | 119 | // Sending a stats update every 3 seconds- |
104 | private int statsUpdatesEveryMS = 3000; | 120 | private int statsUpdatesEveryMS = 3000; |
105 | private float statsUpdateFactor = 0; | 121 | private float statsUpdateFactor = 0; |
@@ -334,7 +350,20 @@ namespace OpenSim.Region.Framework.Scenes | |||
334 | } | 350 | } |
335 | 351 | ||
336 | // Extra statistics that aren't currently sent to clients | 352 | // Extra statistics that aren't currently sent to clients |
337 | LastReportedObjectUpdates = m_objectUpdates / statsUpdateFactor; | 353 | lock (m_lastReportedExtraSimStats) |
354 | { | ||
355 | m_lastReportedExtraSimStats[LastReportedObjectUpdateStatName] = m_objectUpdates / statsUpdateFactor; | ||
356 | |||
357 | Dictionary<string, float> physicsStats = m_scene.PhysicsScene.GetStats(); | ||
358 | |||
359 | if (physicsStats != null) | ||
360 | { | ||
361 | foreach (KeyValuePair<string, float> tuple in physicsStats) | ||
362 | { | ||
363 | m_lastReportedExtraSimStats[tuple.Key] = tuple.Value / statsUpdateFactor; | ||
364 | } | ||
365 | } | ||
366 | } | ||
338 | 367 | ||
339 | resetvalues(); | 368 | resetvalues(); |
340 | } | 369 | } |
@@ -487,7 +516,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
487 | public void AddPendingDownloads(int count) | 516 | public void AddPendingDownloads(int count) |
488 | { | 517 | { |
489 | m_pendingDownloads += count; | 518 | m_pendingDownloads += count; |
490 | if (m_pendingDownloads < 0) m_pendingDownloads = 0; | 519 | |
520 | if (m_pendingDownloads < 0) | ||
521 | m_pendingDownloads = 0; | ||
522 | |||
491 | //m_log.InfoFormat("[stats]: Adding {0} to pending downloads to make {1}", count, m_pendingDownloads); | 523 | //m_log.InfoFormat("[stats]: Adding {0} to pending downloads to make {1}", count, m_pendingDownloads); |
492 | } | 524 | } |
493 | 525 | ||
@@ -509,5 +541,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
509 | } | 541 | } |
510 | 542 | ||
511 | #endregion | 543 | #endregion |
544 | |||
545 | public Dictionary<string, float> GetExtraSimStats() | ||
546 | { | ||
547 | lock (m_lastReportedExtraSimStats) | ||
548 | return new Dictionary<string, float>(m_lastReportedExtraSimStats); | ||
549 | } | ||
512 | } | 550 | } |
513 | } | 551 | } |