diff --git a/OpenSim/Region/CoreModules/Framework/Monitoring/IMonitor.cs b/OpenSim/Region/CoreModules/Framework/Monitoring/IMonitor.cs
index 9f618ccaef..72c7a4ae78 100644
--- a/OpenSim/Region/CoreModules/Framework/Monitoring/IMonitor.cs
+++ b/OpenSim/Region/CoreModules/Framework/Monitoring/IMonitor.cs
@@ -29,8 +29,31 @@ namespace OpenSim.Region.CoreModules.Framework.Monitoring
{
interface IMonitor
{
- double GetValue();
+ ///
+ /// Name of the monitor.
+ ///
+ ///
+ /// This is the name used in XML.
+ ///
+ ///
string GetName();
- string GetFriendlyValue(); // Convert to readable numbers
+
+ ///
+ /// Value of this monitor
+ ///
+ ///
+ double GetValue();
+
+ ///
+ /// Human-readable name of the monitor
+ ///
+ ///
+ string GetFriendlyName();
+
+ ///
+ /// Human readable value.
+ ///
+ ///
+ string GetFriendlyValue();
}
}
diff --git a/OpenSim/Region/CoreModules/Framework/Monitoring/MonitorModule.cs b/OpenSim/Region/CoreModules/Framework/Monitoring/MonitorModule.cs
index 057ed6f20e..a9dc1fe40b 100644
--- a/OpenSim/Region/CoreModules/Framework/Monitoring/MonitorModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/Monitoring/MonitorModule.cs
@@ -82,7 +82,7 @@ namespace OpenSim.Region.CoreModules.Framework.Monitoring
{
foreach (IMonitor monitor in m_monitors)
{
- m_log.Info("[MonitorModule]: " + m_scene.RegionInfo.RegionName + " reports " + monitor.GetName() + " = " + monitor.GetFriendlyValue());
+ m_log.Info("[MonitorModule]: " + m_scene.RegionInfo.RegionName + " reports " + monitor.GetFriendlyName() + " = " + monitor.GetFriendlyValue());
}
}
@@ -132,11 +132,9 @@ namespace OpenSim.Region.CoreModules.Framework.Monitoring
string xml = "";
foreach (IMonitor monitor in m_monitors)
{
- string elemName = monitor.ToString();
- if (elemName.StartsWith(monitor.GetType().Namespace))
- elemName = elemName.Substring(monitor.GetType().Namespace.Length + 1);
-
- xml += "<" + elemName + ">" + monitor.GetValue() + "" + elemName + ">";
+ string elemName = monitor.GetName();
+ xml += "<" + elemName + ">" + monitor.GetValue().ToString() + "" + elemName + ">";
+// m_log.DebugFormat("[MONITOR MODULE]: {0} = {1}", elemName, monitor.GetValue());
}
xml += "";
@@ -166,6 +164,150 @@ namespace OpenSim.Region.CoreModules.Framework.Monitoring
m_monitors.Add(new EventFrameMonitor(m_scene));
m_monitors.Add(new LandFrameMonitor(m_scene));
m_monitors.Add(new LastFrameTimeMonitor(m_scene));
+
+ m_monitors.Add(
+ new GenericMonitor(
+ m_scene,
+ "TimeDilationMonitor",
+ "Time Dilation",
+ m => m.Scene.StatsReporter.LastReportedSimStats[0],
+ m => m.GetValue().ToString()));
+
+ m_monitors.Add(
+ new GenericMonitor(
+ m_scene,
+ "SimFPSMonitor",
+ "Sim FPS",
+ m => m.Scene.StatsReporter.LastReportedSimStats[1],
+ m => string.Format("{0}", m.GetValue())));
+
+ m_monitors.Add(
+ new GenericMonitor(
+ m_scene,
+ "PhysicsFPSMonitor",
+ "Physics FPS",
+ m => m.Scene.StatsReporter.LastReportedSimStats[2],
+ m => string.Format("{0}", m.GetValue())));
+
+ m_monitors.Add(
+ new GenericMonitor(
+ m_scene,
+ "AgentUpdatesPerSecondMonitor",
+ "Agent Updates",
+ m => m.Scene.StatsReporter.LastReportedSimStats[3],
+ m => string.Format("{0} per second", m.GetValue())));
+
+ m_monitors.Add(
+ new GenericMonitor(
+ m_scene,
+ "ActiveObjectCountMonitor",
+ "Active Objects",
+ m => m.Scene.StatsReporter.LastReportedSimStats[7],
+ m => string.Format("{0}", m.GetValue())));
+
+ m_monitors.Add(
+ new GenericMonitor(
+ m_scene,
+ "ActiveScriptsMonitor",
+ "Active Scripts",
+ m => m.Scene.StatsReporter.LastReportedSimStats[19],
+ m => string.Format("{0}", m.GetValue())));
+
+ m_monitors.Add(
+ new GenericMonitor(
+ m_scene,
+ "ScriptEventsPerSecondMonitor",
+ "Script Events",
+ m => m.Scene.StatsReporter.LastReportedSimStats[20],
+ m => string.Format("{0} per second", m.GetValue())));
+
+ m_monitors.Add(
+ new GenericMonitor(
+ m_scene,
+ "InPacketsPerSecondMonitor",
+ "In Packets",
+ m => m.Scene.StatsReporter.LastReportedSimStats[13],
+ m => string.Format("{0} per second", m.GetValue())));
+
+ m_monitors.Add(
+ new GenericMonitor(
+ m_scene,
+ "OutPacketsPerSecondMonitor",
+ "Out Packets",
+ m => m.Scene.StatsReporter.LastReportedSimStats[14],
+ m => string.Format("{0} per second", m.GetValue())));
+
+ m_monitors.Add(
+ new GenericMonitor(
+ m_scene,
+ "UnackedBytesMonitor",
+ "Unacked Bytes",
+ m => m.Scene.StatsReporter.LastReportedSimStats[15],
+ m => string.Format("{0}", m.GetValue())));
+
+ m_monitors.Add(
+ new GenericMonitor(
+ m_scene,
+ "PendingDownloadsMonitor",
+ "Pending Downloads",
+ m => m.Scene.StatsReporter.LastReportedSimStats[17],
+ m => string.Format("{0}", m.GetValue())));
+
+ m_monitors.Add(
+ new GenericMonitor(
+ m_scene,
+ "PendingUploadsMonitor",
+ "Pending Uploads",
+ m => m.Scene.StatsReporter.LastReportedSimStats[18],
+ m => string.Format("{0}", m.GetValue())));
+
+ m_monitors.Add(
+ new GenericMonitor(
+ m_scene,
+ "TotalFrameTimeMonitor",
+ "Total Frame Time",
+ m => m.Scene.StatsReporter.LastReportedSimStats[8],
+ m => string.Format("{0} ms", m.GetValue())));
+
+ m_monitors.Add(
+ new GenericMonitor(
+ m_scene,
+ "NetFrameTimeMonitor",
+ "Net Frame Time",
+ m => m.Scene.StatsReporter.LastReportedSimStats[9],
+ m => string.Format("{0} ms", m.GetValue())));
+
+ m_monitors.Add(
+ new GenericMonitor(
+ m_scene,
+ "PhysicsFrameTimeMonitor",
+ "Physics Frame Time",
+ m => m.Scene.StatsReporter.LastReportedSimStats[10],
+ m => string.Format("{0} ms", m.GetValue())));
+
+ m_monitors.Add(
+ new GenericMonitor(
+ m_scene,
+ "SimulationFrameTimeMonitor",
+ "Simulation Frame Time",
+ m => m.Scene.StatsReporter.LastReportedSimStats[12],
+ m => string.Format("{0} ms", m.GetValue())));
+
+ m_monitors.Add(
+ new GenericMonitor(
+ m_scene,
+ "AgentFrameTimeMonitor",
+ "Agent Frame Time",
+ m => m.Scene.StatsReporter.LastReportedSimStats[16],
+ m => string.Format("{0} ms", m.GetValue())));
+
+ m_monitors.Add(
+ new GenericMonitor(
+ m_scene,
+ "ImagesFrameTimeMonitor",
+ "Images Frame Time",
+ m => m.Scene.StatsReporter.LastReportedSimStats[11],
+ m => string.Format("{0} ms", m.GetValue())));
m_alerts.Add(new DeadlockAlert(m_monitors.Find(x => x is LastFrameTimeMonitor) as LastFrameTimeMonitor));
diff --git a/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/AgentCountMonitor.cs b/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/AgentCountMonitor.cs
index 4a2029e6cd..3fb5e3ac8a 100644
--- a/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/AgentCountMonitor.cs
+++ b/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/AgentCountMonitor.cs
@@ -40,12 +40,17 @@ namespace OpenSim.Region.CoreModules.Framework.Monitoring.Monitors
#region Implementation of IMonitor
+ public string GetName()
+ {
+ return "AgentCountMonitor";
+ }
+
public double GetValue()
{
return m_scene.SceneGraph.GetRootAgentCount();
}
- public string GetName()
+ public string GetFriendlyName()
{
return "Root Agent Count";
}
diff --git a/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/ChildAgentCountMonitor.cs b/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/ChildAgentCountMonitor.cs
index 4ab3eddb22..be0e8fbd48 100644
--- a/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/ChildAgentCountMonitor.cs
+++ b/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/ChildAgentCountMonitor.cs
@@ -40,12 +40,17 @@ namespace OpenSim.Region.CoreModules.Framework.Monitoring.Monitors
#region Implementation of IMonitor
+ public string GetName()
+ {
+ return "ChildAgentCountMonitor";
+ }
+
public double GetValue()
{
return m_scene.SceneGraph.GetChildAgentCount();
}
- public string GetName()
+ public string GetFriendlyName()
{
return "Child Agent Count";
}
diff --git a/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/EventFrameMonitor.cs b/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/EventFrameMonitor.cs
index 356458d861..1c44c78195 100644
--- a/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/EventFrameMonitor.cs
+++ b/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/EventFrameMonitor.cs
@@ -40,12 +40,17 @@ namespace OpenSim.Region.CoreModules.Framework.Monitoring.Monitors
#region Implementation of IMonitor
+ public string GetName()
+ {
+ return "EventFrameMonitor";
+ }
+
public double GetValue()
{
return m_scene.MonitorEventTime;
}
- public string GetName()
+ public string GetFriendlyName()
{
return "Total Event Frame Time";
}
diff --git a/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/GCMemoryMonitor.cs b/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/GCMemoryMonitor.cs
index aa2e9c000b..3f4d4a2bfb 100644
--- a/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/GCMemoryMonitor.cs
+++ b/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/GCMemoryMonitor.cs
@@ -33,12 +33,17 @@ namespace OpenSim.Region.CoreModules.Framework.Monitoring.Monitors
{
#region Implementation of IMonitor
+ public string GetName()
+ {
+ return "GCMemoryMonitor";
+ }
+
public double GetValue()
{
return GC.GetTotalMemory(false);
}
- public string GetName()
+ public string GetFriendlyName()
{
return "GC Reported Memory";
}
diff --git a/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/GenericMonitor.cs b/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/GenericMonitor.cs
new file mode 100644
index 0000000000..551c49c1da
--- /dev/null
+++ b/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/GenericMonitor.cs
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSimulator Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using OpenSim.Region.Framework.Scenes;
+
+namespace OpenSim.Region.CoreModules.Framework.Monitoring.Monitors
+{
+ class GenericMonitor : IMonitor
+ {
+ public Scene Scene { get; private set; }
+ public string Name { get; private set; }
+ public string FriendlyName { get; private set; }
+
+ private readonly Func m_getValueAction;
+ private readonly Func m_getFriendlyValueAction;
+
+ public GenericMonitor(
+ Scene scene,
+ string name,
+ string friendlyName,
+ Func getValueAction,
+ Func getFriendlyValueAction)
+ {
+ Scene = scene;
+ Name = name;
+ FriendlyName = name;
+ m_getFriendlyValueAction = getFriendlyValueAction;
+ m_getValueAction = getValueAction;
+ }
+
+ public double GetValue()
+ {
+ return m_getValueAction(this);
+ }
+
+ public string GetName()
+ {
+ return Name;
+ }
+
+ public string GetFriendlyName()
+ {
+ return FriendlyName;
+ }
+
+ public string GetFriendlyValue()
+ {
+ return m_getFriendlyValueAction(this);
+ }
+ }
+}
+
+
+
+
diff --git a/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/LandFrameMonitor.cs b/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/LandFrameMonitor.cs
index e1c36def34..262735eef5 100644
--- a/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/LandFrameMonitor.cs
+++ b/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/LandFrameMonitor.cs
@@ -40,12 +40,17 @@ namespace OpenSim.Region.CoreModules.Framework.Monitoring.Monitors
#region Implementation of IMonitor
+ public string GetName()
+ {
+ return "LandFrameMonitor";
+ }
+
public double GetValue()
{
return m_scene.MonitorLandTime;
}
- public string GetName()
+ public string GetFriendlyName()
{
return "Land Frame Time";
}
diff --git a/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/LastFrameTimeMonitor.cs b/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/LastFrameTimeMonitor.cs
index f21a3ae476..3acb4adcf5 100644
--- a/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/LastFrameTimeMonitor.cs
+++ b/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/LastFrameTimeMonitor.cs
@@ -41,12 +41,17 @@ namespace OpenSim.Region.CoreModules.Framework.Monitoring.Monitors
#region Implementation of IMonitor
+ public string GetName()
+ {
+ return "LastFrameTimeMonitor";
+ }
+
public double GetValue()
{
return Environment.TickCount - m_scene.MonitorLastFrameTick;
}
- public string GetName()
+ public string GetFriendlyName()
{
return "Last Completed Frame At";
}
diff --git a/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/ObjectCountMonitor.cs b/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/ObjectCountMonitor.cs
index 10804f9cbb..52a2df1af4 100644
--- a/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/ObjectCountMonitor.cs
+++ b/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/ObjectCountMonitor.cs
@@ -40,12 +40,17 @@ namespace OpenSim.Region.CoreModules.Framework.Monitoring.Monitors
#region Implementation of IMonitor
+ public string GetName()
+ {
+ return "ObjectCountMonitor";
+ }
+
public double GetValue()
{
return m_scene.SceneGraph.GetTotalObjectsCount();
}
- public string GetName()
+ public string GetFriendlyName()
{
return "Total Objects Count";
}
diff --git a/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/PWSMemoryMonitor.cs b/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/PWSMemoryMonitor.cs
index 5f6190c1dd..07c13d178e 100644
--- a/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/PWSMemoryMonitor.cs
+++ b/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/PWSMemoryMonitor.cs
@@ -33,12 +33,17 @@ namespace OpenSim.Region.CoreModules.Framework.Monitoring.Monitors
{
#region Implementation of IMonitor
+ public string GetName()
+ {
+ return "PWSMemoryMonitor";
+ }
+
public double GetValue()
{
return System.Diagnostics.Process.GetCurrentProcess().PrivateMemorySize64;
}
- public string GetName()
+ public string GetFriendlyName()
{
return "Private Working Set Memory";
}
diff --git a/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/PhysicsFrameMonitor.cs b/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/PhysicsFrameMonitor.cs
index 7c5bb0a089..b10fa755b7 100644
--- a/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/PhysicsFrameMonitor.cs
+++ b/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/PhysicsFrameMonitor.cs
@@ -40,12 +40,17 @@ namespace OpenSim.Region.CoreModules.Framework.Monitoring.Monitors
#region Implementation of IMonitor
+ public string GetName()
+ {
+ return "PhysicsFrameMonitor";
+ }
+
public double GetValue()
{
return m_scene.MonitorPhysicsSyncTime + m_scene.MonitorPhysicsUpdateTime;
}
- public string GetName()
+ public string GetFriendlyName()
{
return "Total Physics Frame Time";
}
diff --git a/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/PhysicsUpdateFrameMonitor.cs b/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/PhysicsUpdateFrameMonitor.cs
index 1894b3b1a9..a85d8ccceb 100644
--- a/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/PhysicsUpdateFrameMonitor.cs
+++ b/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/PhysicsUpdateFrameMonitor.cs
@@ -40,12 +40,17 @@ namespace OpenSim.Region.CoreModules.Framework.Monitoring.Monitors
#region Implementation of IMonitor
+ public string GetName()
+ {
+ return "PhysicsUpdateFrameMonitor";
+ }
+
public double GetValue()
{
return m_scene.MonitorPhysicsUpdateTime;
}
- public string GetName()
+ public string GetFriendlyName()
{
return "Physics Update Frame Time";
}
diff --git a/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/ThreadCountMonitor.cs b/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/ThreadCountMonitor.cs
index 63ddf07e77..fcfe32af8d 100644
--- a/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/ThreadCountMonitor.cs
+++ b/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/ThreadCountMonitor.cs
@@ -32,12 +32,17 @@ namespace OpenSim.Region.CoreModules.Framework.Monitoring.Monitors
{
#region Implementation of IMonitor
+ public string GetName()
+ {
+ return "ThreadCountMonitor";
+ }
+
public double GetValue()
{
return System.Diagnostics.Process.GetCurrentProcess().Threads.Count;
}
- public string GetName()
+ public string GetFriendlyName()
{
return "Total Threads";
}
diff --git a/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/TotalFrameMonitor.cs b/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/TotalFrameMonitor.cs
index c3942bfe67..a46795d961 100644
--- a/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/TotalFrameMonitor.cs
+++ b/OpenSim/Region/CoreModules/Framework/Monitoring/Monitors/TotalFrameMonitor.cs
@@ -40,12 +40,17 @@ namespace OpenSim.Region.CoreModules.Framework.Monitoring.Monitors
#region Implementation of IMonitor
+ public string GetName()
+ {
+ return "TotalFrameMonitor";
+ }
+
public double GetValue()
{
return m_scene.MonitorFrameTime;
}
- public string GetName()
+ public string GetFriendlyName()
{
return "Total Frame Time";
}
diff --git a/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs b/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs
index b9d38d0b60..8e1c8f09ed 100644
--- a/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs
+++ b/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs
@@ -52,7 +52,7 @@ namespace OpenSim.Region.Framework.Scenes
private YourStatsAreWrong handlerStatsIncorrect = null;
- private enum Stats : uint
+ public enum Stats : uint
{
TimeDilation = 0,
SimFPS = 1,