From 35efa88c26d249d315837fdca0faf643511e1a4e Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Wed, 25 Jul 2012 23:11:50 +0100
Subject: Rename OpenSim.Framework.Statistics to OpenSim.Framework.Monitoring.
This better reflects the long-term purpose of that project and matches Monitoring modules.
---
.../Framework/Monitoring/AssetStatsCollector.cs | 104 +++++
OpenSim/Framework/Monitoring/BaseStatsCollector.cs | 67 +++
.../Monitoring/Interfaces/IPullStatsProvider.cs | 41 ++
.../Monitoring/Interfaces/IStatsCollector.cs | 49 +++
.../Framework/Monitoring/SimExtraStatsCollector.cs | 463 ++++++++++++++++++++
OpenSim/Framework/Monitoring/StatsManager.cs | 65 +++
OpenSim/Framework/Monitoring/UserStatsCollector.cs | 92 ++++
OpenSim/Framework/Servers/BaseOpenSimServer.cs | 2 +-
.../Framework/Statistics/AssetStatsCollector.cs | 104 -----
OpenSim/Framework/Statistics/BaseStatsCollector.cs | 68 ---
.../Statistics/Interfaces/IPullStatsProvider.cs | 41 --
.../Statistics/Interfaces/IStatsCollector.cs | 49 ---
.../Framework/Statistics/SimExtraStatsCollector.cs | 464 ---------------------
OpenSim/Framework/Statistics/StatsManager.cs | 65 ---
OpenSim/Framework/Statistics/UserStatsCollector.cs | 92 ----
OpenSim/Region/Application/OpenSim.cs | 2 +-
OpenSim/Region/Application/OpenSimBase.cs | 2 +-
.../Region/ClientStack/Linden/UDP/LLClientView.cs | 2 +-
.../Region/ClientStack/Linden/UDP/LLUDPServer.cs | 2 +-
.../Avatar/Commands/UserCommandsModule.cs | 2 +-
.../Inventory/RemoteXInventoryServiceConnector.cs | 2 +-
.../World/Objects/Commands/ObjectCommandsModule.cs | 2 +-
.../World/Region/RegionCommandsModule.cs | 2 +-
.../Region/Framework/Scenes/RegionStatsHandler.cs | 2 +-
.../Region/Framework/Scenes/SimStatsReporter.cs | 2 +-
.../Agent/UDP/Linden/LindenUDPInfoModule.cs | 2 +-
.../Avatar/Appearance/AppearanceInfoModule.cs | 2 +-
.../Avatar/Attachments/AttachmentsCommandModule.cs | 2 +-
.../Avatar/Friends/FriendsCommandsModule.cs | 2 +-
.../Region/UserStatistics/ActiveConnectionsAJAX.cs | 2 +-
OpenSim/Region/UserStatistics/Default_Report.cs | 2 +-
OpenSim/Region/UserStatistics/LogLinesAJAX.cs | 2 +-
OpenSim/Region/UserStatistics/SimStatsAJAX.cs | 2 +-
prebuild.xml | 47 +--
34 files changed, 923 insertions(+), 926 deletions(-)
create mode 100644 OpenSim/Framework/Monitoring/AssetStatsCollector.cs
create mode 100644 OpenSim/Framework/Monitoring/BaseStatsCollector.cs
create mode 100644 OpenSim/Framework/Monitoring/Interfaces/IPullStatsProvider.cs
create mode 100644 OpenSim/Framework/Monitoring/Interfaces/IStatsCollector.cs
create mode 100644 OpenSim/Framework/Monitoring/SimExtraStatsCollector.cs
create mode 100644 OpenSim/Framework/Monitoring/StatsManager.cs
create mode 100644 OpenSim/Framework/Monitoring/UserStatsCollector.cs
delete mode 100644 OpenSim/Framework/Statistics/AssetStatsCollector.cs
delete mode 100644 OpenSim/Framework/Statistics/BaseStatsCollector.cs
delete mode 100644 OpenSim/Framework/Statistics/Interfaces/IPullStatsProvider.cs
delete mode 100644 OpenSim/Framework/Statistics/Interfaces/IStatsCollector.cs
delete mode 100644 OpenSim/Framework/Statistics/SimExtraStatsCollector.cs
delete mode 100644 OpenSim/Framework/Statistics/StatsManager.cs
delete mode 100644 OpenSim/Framework/Statistics/UserStatsCollector.cs
diff --git a/OpenSim/Framework/Monitoring/AssetStatsCollector.cs b/OpenSim/Framework/Monitoring/AssetStatsCollector.cs
new file mode 100644
index 0000000..2a4d45b
--- /dev/null
+++ b/OpenSim/Framework/Monitoring/AssetStatsCollector.cs
@@ -0,0 +1,104 @@
+/*
+ * 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 System.Timers;
+
+namespace OpenSim.Framework.Monitoring
+{
+ ///
+ /// Asset service statistics collection
+ ///
+ public class AssetStatsCollector : BaseStatsCollector
+ {
+ private Timer ageStatsTimer = new Timer(24 * 60 * 60 * 1000);
+ private DateTime startTime = DateTime.Now;
+
+ private long assetRequestsToday;
+ private long assetRequestsNotFoundToday;
+ private long assetRequestsYesterday;
+ private long assetRequestsNotFoundYesterday;
+
+ public long AssetRequestsToday { get { return assetRequestsToday; } }
+ public long AssetRequestsNotFoundToday { get { return assetRequestsNotFoundToday; } }
+ public long AssetRequestsYesterday { get { return assetRequestsYesterday; } }
+ public long AssetRequestsNotFoundYesterday { get { return assetRequestsNotFoundYesterday; } }
+
+ public AssetStatsCollector()
+ {
+ ageStatsTimer.Elapsed += new ElapsedEventHandler(OnAgeing);
+ ageStatsTimer.Enabled = true;
+ }
+
+ private void OnAgeing(object source, ElapsedEventArgs e)
+ {
+ assetRequestsYesterday = assetRequestsToday;
+
+ // There is a possibility that an asset request could occur between the execution of these
+ // two statements. But we're better off without the synchronization overhead.
+ assetRequestsToday = 0;
+
+ assetRequestsNotFoundYesterday = assetRequestsNotFoundToday;
+ assetRequestsNotFoundToday = 0;
+ }
+
+ ///
+ /// Record that an asset request failed to find an asset
+ ///
+ public void AddNotFoundRequest()
+ {
+ assetRequestsNotFoundToday++;
+ }
+
+ ///
+ /// Record that a request was made to the asset server
+ ///
+ public void AddRequest()
+ {
+ assetRequestsToday++;
+ }
+
+ ///
+ /// Report back collected statistical information.
+ ///
+ ///
+ override public string Report()
+ {
+ double elapsedHours = (DateTime.Now - startTime).TotalHours;
+ if (elapsedHours <= 0) { elapsedHours = 1; } // prevent divide by zero
+
+ long assetRequestsTodayPerHour = (long)Math.Round(AssetRequestsToday / elapsedHours);
+ long assetRequestsYesterdayPerHour = (long)Math.Round(AssetRequestsYesterday / 24.0);
+
+ return string.Format(
+@"Asset requests today : {0} ({1} per hour) of which {2} were not found
+Asset requests yesterday : {3} ({4} per hour) of which {5} were not found",
+ AssetRequestsToday, assetRequestsTodayPerHour, AssetRequestsNotFoundToday,
+ AssetRequestsYesterday, assetRequestsYesterdayPerHour, AssetRequestsNotFoundYesterday);
+ }
+ }
+}
diff --git a/OpenSim/Framework/Monitoring/BaseStatsCollector.cs b/OpenSim/Framework/Monitoring/BaseStatsCollector.cs
new file mode 100644
index 0000000..57a63ef
--- /dev/null
+++ b/OpenSim/Framework/Monitoring/BaseStatsCollector.cs
@@ -0,0 +1,67 @@
+/*
+ * 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 System.Diagnostics;
+using System.Text;
+using OpenMetaverse;
+using OpenMetaverse.StructuredData;
+
+namespace OpenSim.Framework.Monitoring
+{
+ ///
+ /// Statistics which all collectors are interested in reporting
+ ///
+ public class BaseStatsCollector : IStatsCollector
+ {
+ public virtual string Report()
+ {
+ StringBuilder sb = new StringBuilder(Environment.NewLine);
+ sb.Append("MEMORY STATISTICS");
+ sb.Append(Environment.NewLine);
+
+ sb.AppendFormat(
+ "Allocated to OpenSim objects: {0} MB\n",
+ Math.Round(GC.GetTotalMemory(false) / 1024.0 / 1024.0));
+
+ sb.AppendFormat(
+ "OpenSim object memory churn : {0} MB/s\n",
+ Math.Round((MemoryWatchdog.AverageMemoryChurn * 1000) / 1024.0 / 1024, 3));
+
+ sb.AppendFormat(
+ "Process memory : {0} MB\n",
+ Math.Round(Process.GetCurrentProcess().WorkingSet64 / 1024.0 / 1024.0));
+
+ return sb.ToString();
+ }
+
+ public virtual string XReport(string uptime, string version)
+ {
+ return (string) Math.Round(GC.GetTotalMemory(false) / 1024.0 / 1024.0).ToString() ;
+ }
+ }
+}
diff --git a/OpenSim/Framework/Monitoring/Interfaces/IPullStatsProvider.cs b/OpenSim/Framework/Monitoring/Interfaces/IPullStatsProvider.cs
new file mode 100644
index 0000000..86a6620
--- /dev/null
+++ b/OpenSim/Framework/Monitoring/Interfaces/IPullStatsProvider.cs
@@ -0,0 +1,41 @@
+/*
+ * 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.
+ */
+
+namespace OpenSim.Framework.Monitoring.Interfaces
+{
+ ///
+ /// Implemented by objects which allow statistical information to be pulled from them.
+ ///
+ public interface IPullStatsProvider
+ {
+ ///
+ /// Provide statistical information. Only temporary one long string.
+ ///
+ ///
+ string GetStats();
+ }
+}
diff --git a/OpenSim/Framework/Monitoring/Interfaces/IStatsCollector.cs b/OpenSim/Framework/Monitoring/Interfaces/IStatsCollector.cs
new file mode 100644
index 0000000..99f75e3
--- /dev/null
+++ b/OpenSim/Framework/Monitoring/Interfaces/IStatsCollector.cs
@@ -0,0 +1,49 @@
+/*
+ * 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.
+ */
+
+namespace OpenSim.Framework.Monitoring
+{
+ ///
+ /// Implemented by classes which collect up non-viewer statistical information
+ ///
+ public interface IStatsCollector
+ {
+ ///
+ /// Report back collected statistical information.
+ ///
+ ///
+ string Report();
+
+ ///
+ /// Report back collected statistical information in json
+ ///
+ ///
+ /// A
+ ///
+ string XReport(string uptime, string version);
+ }
+}
diff --git a/OpenSim/Framework/Monitoring/SimExtraStatsCollector.cs b/OpenSim/Framework/Monitoring/SimExtraStatsCollector.cs
new file mode 100644
index 0000000..cdd7cc7
--- /dev/null
+++ b/OpenSim/Framework/Monitoring/SimExtraStatsCollector.cs
@@ -0,0 +1,463 @@
+/*
+ * 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 System.Collections.Generic;
+using System.Text;
+using OpenMetaverse;
+using OpenMetaverse.StructuredData;
+using OpenSim.Framework.Monitoring.Interfaces;
+
+namespace OpenSim.Framework.Monitoring
+{
+ ///
+ /// Collects sim statistics which aren't already being collected for the linden viewer's statistics pane
+ ///
+ public class SimExtraStatsCollector : BaseStatsCollector
+ {
+ private long abnormalClientThreadTerminations;
+
+// private long assetsInCache;
+// private long texturesInCache;
+// private long assetCacheMemoryUsage;
+// private long textureCacheMemoryUsage;
+// private TimeSpan assetRequestTimeAfterCacheMiss;
+// private long blockedMissingTextureRequests;
+
+// private long assetServiceRequestFailures;
+// private long inventoryServiceRetrievalFailures;
+
+ private volatile float timeDilation;
+ private volatile float simFps;
+ private volatile float physicsFps;
+ private volatile float agentUpdates;
+ private volatile float rootAgents;
+ private volatile float childAgents;
+ private volatile float totalPrims;
+ private volatile float activePrims;
+ private volatile float totalFrameTime;
+ private volatile float netFrameTime;
+ private volatile float physicsFrameTime;
+ private volatile float otherFrameTime;
+ private volatile float imageFrameTime;
+ private volatile float inPacketsPerSecond;
+ private volatile float outPacketsPerSecond;
+ private volatile float unackedBytes;
+ private volatile float agentFrameTime;
+ private volatile float pendingDownloads;
+ private volatile float pendingUploads;
+ private volatile float activeScripts;
+ private volatile float scriptLinesPerSecond;
+
+ ///
+ /// Number of times that a client thread terminated because of an exception
+ ///
+ public long AbnormalClientThreadTerminations { get { return abnormalClientThreadTerminations; } }
+
+// ///
+// /// These statistics are being collected by push rather than pull. Pull would be simpler, but I had the
+// /// notion of providing some flow statistics (which pull wouldn't give us). Though admittedly these
+// /// haven't yet been implemented...
+// ///
+// public long AssetsInCache { get { return assetsInCache; } }
+//
+// ///
+// /// Currently unused
+// ///
+// public long TexturesInCache { get { return texturesInCache; } }
+//
+// ///
+// /// Currently misleading since we can't currently subtract removed asset memory usage without a performance hit
+// ///
+// public long AssetCacheMemoryUsage { get { return assetCacheMemoryUsage; } }
+//
+// ///
+// /// Currently unused
+// ///
+// public long TextureCacheMemoryUsage { get { return textureCacheMemoryUsage; } }
+
+ public float TimeDilation { get { return timeDilation; } }
+ public float SimFps { get { return simFps; } }
+ public float PhysicsFps { get { return physicsFps; } }
+ public float AgentUpdates { get { return agentUpdates; } }
+ public float RootAgents { get { return rootAgents; } }
+ public float ChildAgents { get { return childAgents; } }
+ public float TotalPrims { get { return totalPrims; } }
+ public float ActivePrims { get { return activePrims; } }
+ public float TotalFrameTime { get { return totalFrameTime; } }
+ public float NetFrameTime { get { return netFrameTime; } }
+ public float PhysicsFrameTime { get { return physicsFrameTime; } }
+ public float OtherFrameTime { get { return otherFrameTime; } }
+ public float ImageFrameTime { get { return imageFrameTime; } }
+ public float InPacketsPerSecond { get { return inPacketsPerSecond; } }
+ public float OutPacketsPerSecond { get { return outPacketsPerSecond; } }
+ public float UnackedBytes { get { return unackedBytes; } }
+ public float AgentFrameTime { get { return agentFrameTime; } }
+ public float PendingDownloads { get { return pendingDownloads; } }
+ public float PendingUploads { get { return pendingUploads; } }
+ public float ActiveScripts { get { return activeScripts; } }
+ public float ScriptLinesPerSecond { get { return scriptLinesPerSecond; } }
+
+// ///
+// /// This is the time it took for the last asset request made in response to a cache miss.
+// ///
+// public TimeSpan AssetRequestTimeAfterCacheMiss { get { return assetRequestTimeAfterCacheMiss; } }
+//
+// ///
+// /// Number of persistent requests for missing textures we have started blocking from clients. To some extent
+// /// this is just a temporary statistic to keep this problem in view - the root cause of this lies either
+// /// in a mishandling of the reply protocol, related to avatar appearance or may even originate in graphics
+// /// driver bugs on clients (though this seems less likely).
+// ///
+// public long BlockedMissingTextureRequests { get { return blockedMissingTextureRequests; } }
+//
+// ///
+// /// Record the number of times that an asset request has failed. Failures are effectively exceptions, such as
+// /// request timeouts. If an asset service replies that a particular asset cannot be found, this is not counted
+// /// as a failure
+// ///
+// public long AssetServiceRequestFailures { get { return assetServiceRequestFailures; } }
+
+ ///
+ /// Number of known failures to retrieve avatar inventory from the inventory service. This does not
+ /// cover situations where the inventory service accepts the request but never returns any data, since
+ /// we do not yet timeout this situation.
+ ///
+ /// Commented out because we do not cache inventory at this point
+// public long InventoryServiceRetrievalFailures { get { return inventoryServiceRetrievalFailures; } }
+
+ ///
+ /// Retrieve the total frame time (in ms) of the last frame
+ ///
+ //public float TotalFrameTime { get { return totalFrameTime; } }
+
+ ///
+ /// Retrieve the physics update component (in ms) of the last frame
+ ///
+ //public float PhysicsFrameTime { get { return physicsFrameTime; } }
+
+ ///
+ /// Retain a dictionary of all packet queues stats reporters
+ ///
+ private IDictionary packetQueueStatsCollectors
+ = new Dictionary();
+
+ public void AddAbnormalClientThreadTermination()
+ {
+ abnormalClientThreadTerminations++;
+ }
+
+// public void AddAsset(AssetBase asset)
+// {
+// assetsInCache++;
+// //assetCacheMemoryUsage += asset.Data.Length;
+// }
+//
+// public void RemoveAsset(UUID uuid)
+// {
+// assetsInCache--;
+// }
+//
+// public void AddTexture(AssetBase image)
+// {
+// if (image.Data != null)
+// {
+// texturesInCache++;
+//
+// // This could have been a pull stat, though there was originally a nebulous idea to measure flow rates
+// textureCacheMemoryUsage += image.Data.Length;
+// }
+// }
+//
+// ///
+// /// Signal that the asset cache has been cleared.
+// ///
+// public void ClearAssetCacheStatistics()
+// {
+// assetsInCache = 0;
+// assetCacheMemoryUsage = 0;
+// texturesInCache = 0;
+// textureCacheMemoryUsage = 0;
+// }
+//
+// public void AddAssetRequestTimeAfterCacheMiss(TimeSpan ts)
+// {
+// assetRequestTimeAfterCacheMiss = ts;
+// }
+//
+// public void AddBlockedMissingTextureRequest()
+// {
+// blockedMissingTextureRequests++;
+// }
+//
+// public void AddAssetServiceRequestFailure()
+// {
+// assetServiceRequestFailures++;
+// }
+
+// public void AddInventoryServiceRetrievalFailure()
+// {
+// inventoryServiceRetrievalFailures++;
+// }
+
+ ///
+ /// Register as a packet queue stats provider
+ ///
+ /// An agent UUID
+ ///
+ public void RegisterPacketQueueStatsProvider(UUID uuid, IPullStatsProvider provider)
+ {
+ lock (packetQueueStatsCollectors)
+ {
+ // FIXME: If the region service is providing more than one region, then the child and root agent
+ // queues are wrongly replacing each other here.
+ packetQueueStatsCollectors[uuid] = new PacketQueueStatsCollector(provider);
+ }
+ }
+
+ ///
+ /// Deregister a packet queue stats provider
+ ///
+ /// An agent UUID
+ public void DeregisterPacketQueueStatsProvider(UUID uuid)
+ {
+ lock (packetQueueStatsCollectors)
+ {
+ packetQueueStatsCollectors.Remove(uuid);
+ }
+ }
+
+ ///
+ /// This is the method on which the classic sim stats reporter (which collects stats for
+ /// client purposes) sends information to listeners.
+ ///
+ ///
+ public void ReceiveClassicSimStatsPacket(SimStats stats)
+ {
+ // FIXME: SimStats shouldn't allow an arbitrary stat packing order (which is inherited from the original
+ // SimStatsPacket that was being used).
+ timeDilation = stats.StatsBlock[0].StatValue;
+ simFps = stats.StatsBlock[1].StatValue;
+ physicsFps = stats.StatsBlock[2].StatValue;
+ agentUpdates = stats.StatsBlock[3].StatValue;
+ rootAgents = stats.StatsBlock[4].StatValue;
+ childAgents = stats.StatsBlock[5].StatValue;
+ totalPrims = stats.StatsBlock[6].StatValue;
+ activePrims = stats.StatsBlock[7].StatValue;
+ totalFrameTime = stats.StatsBlock[8].StatValue;
+ netFrameTime = stats.StatsBlock[9].StatValue;
+ physicsFrameTime = stats.StatsBlock[10].StatValue;
+ otherFrameTime = stats.StatsBlock[11].StatValue;
+ imageFrameTime = stats.StatsBlock[12].StatValue;
+ inPacketsPerSecond = stats.StatsBlock[13].StatValue;
+ outPacketsPerSecond = stats.StatsBlock[14].StatValue;
+ unackedBytes = stats.StatsBlock[15].StatValue;
+ agentFrameTime = stats.StatsBlock[16].StatValue;
+ pendingDownloads = stats.StatsBlock[17].StatValue;
+ pendingUploads = stats.StatsBlock[18].StatValue;
+ activeScripts = stats.StatsBlock[19].StatValue;
+ scriptLinesPerSecond = stats.StatsBlock[20].StatValue;
+ }
+
+ ///
+ /// Report back collected statistical information.
+ ///
+ ///
+ public override string Report()
+ {
+ StringBuilder sb = new StringBuilder(Environment.NewLine);
+// sb.Append("ASSET STATISTICS");
+// sb.Append(Environment.NewLine);
+
+ /*
+ sb.Append(
+ string.Format(
+@"Asset cache contains {0,6} non-texture assets using {1,10} K
+Texture cache contains {2,6} texture assets using {3,10} K
+Latest asset request time after cache miss: {4}s
+Blocked client requests for missing textures: {5}
+Asset service request failures: {6}"+ Environment.NewLine,
+ AssetsInCache, Math.Round(AssetCacheMemoryUsage / 1024.0),
+ TexturesInCache, Math.Round(TextureCacheMemoryUsage / 1024.0),
+ assetRequestTimeAfterCacheMiss.Milliseconds / 1000.0,
+ BlockedMissingTextureRequests,
+ AssetServiceRequestFailures));
+ */
+
+ /*
+ sb.Append(
+ string.Format(
+@"Asset cache contains {0,6} assets
+Latest asset request time after cache miss: {1}s
+Blocked client requests for missing textures: {2}
+Asset service request failures: {3}" + Environment.NewLine,
+ AssetsInCache,
+ assetRequestTimeAfterCacheMiss.Milliseconds / 1000.0,
+ BlockedMissingTextureRequests,
+ AssetServiceRequestFailures));
+ */
+
+ sb.Append(Environment.NewLine);
+ sb.Append("CONNECTION STATISTICS");
+ sb.Append(Environment.NewLine);
+ sb.Append(
+ string.Format(
+ "Abnormal client thread terminations: {0}" + Environment.NewLine,
+ abnormalClientThreadTerminations));
+
+// sb.Append(Environment.NewLine);
+// sb.Append("INVENTORY STATISTICS");
+// sb.Append(Environment.NewLine);
+// sb.Append(
+// string.Format(
+// "Initial inventory caching failures: {0}" + Environment.NewLine,
+// InventoryServiceRetrievalFailures));
+
+ sb.Append(Environment.NewLine);
+ sb.Append("FRAME STATISTICS");
+ sb.Append(Environment.NewLine);
+ sb.Append("Dilatn SimFPS PhyFPS AgntUp RootAg ChldAg Prims AtvPrm AtvScr ScrLPS");
+ sb.Append(Environment.NewLine);
+ sb.Append(
+ string.Format(
+ "{0,6:0.00} {1,6:0} {2,6:0.0} {3,6:0.0} {4,6:0} {5,6:0} {6,6:0} {7,6:0} {8,6:0} {9,6:0}",
+ timeDilation, simFps, physicsFps, agentUpdates, rootAgents,
+ childAgents, totalPrims, activePrims, activeScripts, scriptLinesPerSecond));
+
+ sb.Append(Environment.NewLine);
+ sb.Append(Environment.NewLine);
+ // There is no script frame time currently because we don't yet collect it
+ sb.Append("PktsIn PktOut PendDl PendUl UnackB TotlFt NetFt PhysFt OthrFt AgntFt ImgsFt");
+ sb.Append(Environment.NewLine);
+ sb.Append(
+ string.Format(
+ "{0,6:0} {1,6:0} {2,6:0} {3,6:0} {4,6:0} {5,6:0.0} {6,6:0.0} {7,6:0.0} {8,6:0.0} {9,6:0.0} {10,6:0.0}",
+ inPacketsPerSecond, outPacketsPerSecond, pendingDownloads, pendingUploads, unackedBytes, totalFrameTime,
+ netFrameTime, physicsFrameTime, otherFrameTime, agentFrameTime, imageFrameTime));
+ sb.Append(Environment.NewLine);
+
+ /*
+ sb.Append(Environment.NewLine);
+ sb.Append("PACKET QUEUE STATISTICS");
+ sb.Append(Environment.NewLine);
+ sb.Append("Agent UUID ");
+ sb.Append(
+ string.Format(
+ " {0,7} {1,7} {2,7} {3,7} {4,7} {5,7} {6,7} {7,7} {8,7} {9,7}",
+ "Send", "In", "Out", "Resend", "Land", "Wind", "Cloud", "Task", "Texture", "Asset"));
+ sb.Append(Environment.NewLine);
+
+ foreach (UUID key in packetQueueStatsCollectors.Keys)
+ {
+ sb.Append(string.Format("{0}: ", key));
+ sb.Append(packetQueueStatsCollectors[key].Report());
+ sb.Append(Environment.NewLine);
+ }
+ */
+
+ sb.Append(base.Report());
+
+ return sb.ToString();
+ }
+
+ ///
+ /// Report back collected statistical information as json serialization.
+ ///
+ ///
+ public override string XReport(string uptime, string version)
+ {
+ OSDMap args = new OSDMap(30);
+// args["AssetsInCache"] = OSD.FromString (String.Format ("{0:0.##}", AssetsInCache));
+// args["TimeAfterCacheMiss"] = OSD.FromString (String.Format ("{0:0.##}",
+// assetRequestTimeAfterCacheMiss.Milliseconds / 1000.0));
+// args["BlockedMissingTextureRequests"] = OSD.FromString (String.Format ("{0:0.##}",
+// BlockedMissingTextureRequests));
+// args["AssetServiceRequestFailures"] = OSD.FromString (String.Format ("{0:0.##}",
+// AssetServiceRequestFailures));
+// args["abnormalClientThreadTerminations"] = OSD.FromString (String.Format ("{0:0.##}",
+// abnormalClientThreadTerminations));
+// args["InventoryServiceRetrievalFailures"] = OSD.FromString (String.Format ("{0:0.##}",
+// InventoryServiceRetrievalFailures));
+ args["Dilatn"] = OSD.FromString (String.Format ("{0:0.##}", timeDilation));
+ args["SimFPS"] = OSD.FromString (String.Format ("{0:0.##}", simFps));
+ args["PhyFPS"] = OSD.FromString (String.Format ("{0:0.##}", physicsFps));
+ args["AgntUp"] = OSD.FromString (String.Format ("{0:0.##}", agentUpdates));
+ args["RootAg"] = OSD.FromString (String.Format ("{0:0.##}", rootAgents));
+ args["ChldAg"] = OSD.FromString (String.Format ("{0:0.##}", childAgents));
+ args["Prims"] = OSD.FromString (String.Format ("{0:0.##}", totalPrims));
+ args["AtvPrm"] = OSD.FromString (String.Format ("{0:0.##}", activePrims));
+ args["AtvScr"] = OSD.FromString (String.Format ("{0:0.##}", activeScripts));
+ args["ScrLPS"] = OSD.FromString (String.Format ("{0:0.##}", scriptLinesPerSecond));
+ args["PktsIn"] = OSD.FromString (String.Format ("{0:0.##}", inPacketsPerSecond));
+ args["PktOut"] = OSD.FromString (String.Format ("{0:0.##}", outPacketsPerSecond));
+ args["PendDl"] = OSD.FromString (String.Format ("{0:0.##}", pendingDownloads));
+ args["PendUl"] = OSD.FromString (String.Format ("{0:0.##}", pendingUploads));
+ args["UnackB"] = OSD.FromString (String.Format ("{0:0.##}", unackedBytes));
+ args["TotlFt"] = OSD.FromString (String.Format ("{0:0.##}", totalFrameTime));
+ args["NetFt"] = OSD.FromString (String.Format ("{0:0.##}", netFrameTime));
+ args["PhysFt"] = OSD.FromString (String.Format ("{0:0.##}", physicsFrameTime));
+ args["OthrFt"] = OSD.FromString (String.Format ("{0:0.##}", otherFrameTime));
+ args["AgntFt"] = OSD.FromString (String.Format ("{0:0.##}", agentFrameTime));
+ args["ImgsFt"] = OSD.FromString (String.Format ("{0:0.##}", imageFrameTime));
+ args["Memory"] = OSD.FromString (base.XReport (uptime, version));
+ args["Uptime"] = OSD.FromString (uptime);
+ args["Version"] = OSD.FromString (version);
+
+ string strBuffer = "";
+ strBuffer = OSDParser.SerializeJsonString(args);
+
+ return strBuffer;
+ }
+ }
+
+ ///
+ /// Pull packet queue stats from packet queues and report
+ ///
+ public class PacketQueueStatsCollector : IStatsCollector
+ {
+ private IPullStatsProvider m_statsProvider;
+
+ public PacketQueueStatsCollector(IPullStatsProvider provider)
+ {
+ m_statsProvider = provider;
+ }
+
+ ///
+ /// Report back collected statistical information.
+ ///
+ ///
+ public string Report()
+ {
+ return m_statsProvider.GetStats();
+ }
+
+ public string XReport(string uptime, string version)
+ {
+ return "";
+ }
+ }
+}
diff --git a/OpenSim/Framework/Monitoring/StatsManager.cs b/OpenSim/Framework/Monitoring/StatsManager.cs
new file mode 100644
index 0000000..d78fa6a
--- /dev/null
+++ b/OpenSim/Framework/Monitoring/StatsManager.cs
@@ -0,0 +1,65 @@
+/*
+ * 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.
+ */
+
+namespace OpenSim.Framework.Monitoring
+{
+ ///
+ /// Singleton used to provide access to statistics reporters
+ ///
+ public class StatsManager
+ {
+ private static AssetStatsCollector assetStats;
+ private static UserStatsCollector userStats;
+ private static SimExtraStatsCollector simExtraStats = new SimExtraStatsCollector();
+
+ public static AssetStatsCollector AssetStats { get { return assetStats; } }
+ public static UserStatsCollector UserStats { get { return userStats; } }
+ public static SimExtraStatsCollector SimExtraStats { get { return simExtraStats; } }
+
+ ///
+ /// Start collecting statistics related to assets.
+ /// Should only be called once.
+ ///
+ public static AssetStatsCollector StartCollectingAssetStats()
+ {
+ assetStats = new AssetStatsCollector();
+
+ return assetStats;
+ }
+
+ ///
+ /// Start collecting statistics related to users.
+ /// Should only be called once.
+ ///
+ public static UserStatsCollector StartCollectingUserStats()
+ {
+ userStats = new UserStatsCollector();
+
+ return userStats;
+ }
+ }
+}
\ No newline at end of file
diff --git a/OpenSim/Framework/Monitoring/UserStatsCollector.cs b/OpenSim/Framework/Monitoring/UserStatsCollector.cs
new file mode 100644
index 0000000..e89c8e6
--- /dev/null
+++ b/OpenSim/Framework/Monitoring/UserStatsCollector.cs
@@ -0,0 +1,92 @@
+/*
+ * 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.Timers;
+
+namespace OpenSim.Framework.Monitoring
+{
+ ///
+ /// Collects user service statistics
+ ///
+ public class UserStatsCollector : BaseStatsCollector
+ {
+ private Timer ageStatsTimer = new Timer(24 * 60 * 60 * 1000);
+
+ private int successfulLoginsToday;
+ public int SuccessfulLoginsToday { get { return successfulLoginsToday; } }
+
+ private int successfulLoginsYesterday;
+ public int SuccessfulLoginsYesterday { get { return successfulLoginsYesterday; } }
+
+ private int successfulLogins;
+ public int SuccessfulLogins { get { return successfulLogins; } }
+
+ private int logouts;
+ public int Logouts { get { return logouts; } }
+
+ public UserStatsCollector()
+ {
+ ageStatsTimer.Elapsed += new ElapsedEventHandler(OnAgeing);
+ ageStatsTimer.Enabled = true;
+ }
+
+ private void OnAgeing(object source, ElapsedEventArgs e)
+ {
+ successfulLoginsYesterday = successfulLoginsToday;
+
+ // There is a possibility that an asset request could occur between the execution of these
+ // two statements. But we're better off without the synchronization overhead.
+ successfulLoginsToday = 0;
+ }
+
+ ///
+ /// Record a successful login
+ ///
+ public void AddSuccessfulLogin()
+ {
+ successfulLogins++;
+ successfulLoginsToday++;
+ }
+
+ public void AddLogout()
+ {
+ logouts++;
+ }
+
+ ///
+ /// Report back collected statistical information.
+ ///
+ ///
+ override public string Report()
+ {
+ return string.Format(
+@"Successful logins total : {0}, today : {1}, yesterday : {2}
+ Logouts total : {3}",
+ SuccessfulLogins, SuccessfulLoginsToday, SuccessfulLoginsYesterday, Logouts);
+ }
+ }
+}
diff --git a/OpenSim/Framework/Servers/BaseOpenSimServer.cs b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
index 14d8b0c..ab8d95a 100644
--- a/OpenSim/Framework/Servers/BaseOpenSimServer.cs
+++ b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
@@ -42,7 +42,7 @@ using OpenSim.Framework;
using OpenSim.Framework.Console;
using OpenSim.Framework.Servers;
using OpenSim.Framework.Servers.HttpServer;
-using OpenSim.Framework.Statistics;
+using OpenSim.Framework.Monitoring;
using Timer=System.Timers.Timer;
using OpenMetaverse;
diff --git a/OpenSim/Framework/Statistics/AssetStatsCollector.cs b/OpenSim/Framework/Statistics/AssetStatsCollector.cs
deleted file mode 100644
index 7082ef3..0000000
--- a/OpenSim/Framework/Statistics/AssetStatsCollector.cs
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * 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 System.Timers;
-
-namespace OpenSim.Framework.Statistics
-{
- ///
- /// Asset service statistics collection
- ///
- public class AssetStatsCollector : BaseStatsCollector
- {
- private Timer ageStatsTimer = new Timer(24 * 60 * 60 * 1000);
- private DateTime startTime = DateTime.Now;
-
- private long assetRequestsToday;
- private long assetRequestsNotFoundToday;
- private long assetRequestsYesterday;
- private long assetRequestsNotFoundYesterday;
-
- public long AssetRequestsToday { get { return assetRequestsToday; } }
- public long AssetRequestsNotFoundToday { get { return assetRequestsNotFoundToday; } }
- public long AssetRequestsYesterday { get { return assetRequestsYesterday; } }
- public long AssetRequestsNotFoundYesterday { get { return assetRequestsNotFoundYesterday; } }
-
- public AssetStatsCollector()
- {
- ageStatsTimer.Elapsed += new ElapsedEventHandler(OnAgeing);
- ageStatsTimer.Enabled = true;
- }
-
- private void OnAgeing(object source, ElapsedEventArgs e)
- {
- assetRequestsYesterday = assetRequestsToday;
-
- // There is a possibility that an asset request could occur between the execution of these
- // two statements. But we're better off without the synchronization overhead.
- assetRequestsToday = 0;
-
- assetRequestsNotFoundYesterday = assetRequestsNotFoundToday;
- assetRequestsNotFoundToday = 0;
- }
-
- ///
- /// Record that an asset request failed to find an asset
- ///
- public void AddNotFoundRequest()
- {
- assetRequestsNotFoundToday++;
- }
-
- ///
- /// Record that a request was made to the asset server
- ///
- public void AddRequest()
- {
- assetRequestsToday++;
- }
-
- ///
- /// Report back collected statistical information.
- ///
- ///
- override public string Report()
- {
- double elapsedHours = (DateTime.Now - startTime).TotalHours;
- if (elapsedHours <= 0) { elapsedHours = 1; } // prevent divide by zero
-
- long assetRequestsTodayPerHour = (long)Math.Round(AssetRequestsToday / elapsedHours);
- long assetRequestsYesterdayPerHour = (long)Math.Round(AssetRequestsYesterday / 24.0);
-
- return string.Format(
-@"Asset requests today : {0} ({1} per hour) of which {2} were not found
-Asset requests yesterday : {3} ({4} per hour) of which {5} were not found",
- AssetRequestsToday, assetRequestsTodayPerHour, AssetRequestsNotFoundToday,
- AssetRequestsYesterday, assetRequestsYesterdayPerHour, AssetRequestsNotFoundYesterday);
- }
- }
-}
diff --git a/OpenSim/Framework/Statistics/BaseStatsCollector.cs b/OpenSim/Framework/Statistics/BaseStatsCollector.cs
deleted file mode 100644
index 1fe086c..0000000
--- a/OpenSim/Framework/Statistics/BaseStatsCollector.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * 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 System.Diagnostics;
-using System.Text;
-using OpenMetaverse;
-using OpenMetaverse.StructuredData;
-
-
-namespace OpenSim.Framework.Statistics
-{
- ///
- /// Statistics which all collectors are interested in reporting
- ///
- public class BaseStatsCollector : IStatsCollector
- {
- public virtual string Report()
- {
- StringBuilder sb = new StringBuilder(Environment.NewLine);
- sb.Append("MEMORY STATISTICS");
- sb.Append(Environment.NewLine);
-
- sb.AppendFormat(
- "Allocated to OpenSim objects: {0} MB\n",
- Math.Round(GC.GetTotalMemory(false) / 1024.0 / 1024.0));
-
- sb.AppendFormat(
- "OpenSim object memory churn : {0} MB/s\n",
- Math.Round((MemoryWatchdog.AverageMemoryChurn * 1000) / 1024.0 / 1024, 3));
-
- sb.AppendFormat(
- "Process memory : {0} MB\n",
- Math.Round(Process.GetCurrentProcess().WorkingSet64 / 1024.0 / 1024.0));
-
- return sb.ToString();
- }
-
- public virtual string XReport(string uptime, string version)
- {
- return (string) Math.Round(GC.GetTotalMemory(false) / 1024.0 / 1024.0).ToString() ;
- }
- }
-}
diff --git a/OpenSim/Framework/Statistics/Interfaces/IPullStatsProvider.cs b/OpenSim/Framework/Statistics/Interfaces/IPullStatsProvider.cs
deleted file mode 100644
index 430e580..0000000
--- a/OpenSim/Framework/Statistics/Interfaces/IPullStatsProvider.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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.
- */
-
-namespace OpenSim.Framework.Statistics.Interfaces
-{
- ///
- /// Implemented by objects which allow statistical information to be pulled from them.
- ///
- public interface IPullStatsProvider
- {
- ///
- /// Provide statistical information. Only temporary one long string.
- ///
- ///
- string GetStats();
- }
-}
diff --git a/OpenSim/Framework/Statistics/Interfaces/IStatsCollector.cs b/OpenSim/Framework/Statistics/Interfaces/IStatsCollector.cs
deleted file mode 100644
index 477bbb3..0000000
--- a/OpenSim/Framework/Statistics/Interfaces/IStatsCollector.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * 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.
- */
-
-namespace OpenSim.Framework.Statistics
-{
- ///
- /// Implemented by classes which collect up non-viewer statistical information
- ///
- public interface IStatsCollector
- {
- ///
- /// Report back collected statistical information.
- ///
- ///
- string Report();
-
- ///
- /// Report back collected statistical information in json
- ///
- ///
- /// A
- ///
- string XReport(string uptime, string version);
- }
-}
diff --git a/OpenSim/Framework/Statistics/SimExtraStatsCollector.cs b/OpenSim/Framework/Statistics/SimExtraStatsCollector.cs
deleted file mode 100644
index a506e3b..0000000
--- a/OpenSim/Framework/Statistics/SimExtraStatsCollector.cs
+++ /dev/null
@@ -1,464 +0,0 @@
-/*
- * 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 System.Collections.Generic;
-using System.Text;
-
-using OpenMetaverse;
-using OpenSim.Framework.Statistics.Interfaces;
-using OpenMetaverse.StructuredData;
-
-namespace OpenSim.Framework.Statistics
-{
- ///
- /// Collects sim statistics which aren't already being collected for the linden viewer's statistics pane
- ///
- public class SimExtraStatsCollector : BaseStatsCollector
- {
- private long abnormalClientThreadTerminations;
-
-// private long assetsInCache;
-// private long texturesInCache;
-// private long assetCacheMemoryUsage;
-// private long textureCacheMemoryUsage;
-// private TimeSpan assetRequestTimeAfterCacheMiss;
-// private long blockedMissingTextureRequests;
-
-// private long assetServiceRequestFailures;
-// private long inventoryServiceRetrievalFailures;
-
- private volatile float timeDilation;
- private volatile float simFps;
- private volatile float physicsFps;
- private volatile float agentUpdates;
- private volatile float rootAgents;
- private volatile float childAgents;
- private volatile float totalPrims;
- private volatile float activePrims;
- private volatile float totalFrameTime;
- private volatile float netFrameTime;
- private volatile float physicsFrameTime;
- private volatile float otherFrameTime;
- private volatile float imageFrameTime;
- private volatile float inPacketsPerSecond;
- private volatile float outPacketsPerSecond;
- private volatile float unackedBytes;
- private volatile float agentFrameTime;
- private volatile float pendingDownloads;
- private volatile float pendingUploads;
- private volatile float activeScripts;
- private volatile float scriptLinesPerSecond;
-
- ///
- /// Number of times that a client thread terminated because of an exception
- ///
- public long AbnormalClientThreadTerminations { get { return abnormalClientThreadTerminations; } }
-
-// ///
-// /// These statistics are being collected by push rather than pull. Pull would be simpler, but I had the
-// /// notion of providing some flow statistics (which pull wouldn't give us). Though admittedly these
-// /// haven't yet been implemented...
-// ///
-// public long AssetsInCache { get { return assetsInCache; } }
-//
-// ///
-// /// Currently unused
-// ///
-// public long TexturesInCache { get { return texturesInCache; } }
-//
-// ///
-// /// Currently misleading since we can't currently subtract removed asset memory usage without a performance hit
-// ///
-// public long AssetCacheMemoryUsage { get { return assetCacheMemoryUsage; } }
-//
-// ///
-// /// Currently unused
-// ///
-// public long TextureCacheMemoryUsage { get { return textureCacheMemoryUsage; } }
-
- public float TimeDilation { get { return timeDilation; } }
- public float SimFps { get { return simFps; } }
- public float PhysicsFps { get { return physicsFps; } }
- public float AgentUpdates { get { return agentUpdates; } }
- public float RootAgents { get { return rootAgents; } }
- public float ChildAgents { get { return childAgents; } }
- public float TotalPrims { get { return totalPrims; } }
- public float ActivePrims { get { return activePrims; } }
- public float TotalFrameTime { get { return totalFrameTime; } }
- public float NetFrameTime { get { return netFrameTime; } }
- public float PhysicsFrameTime { get { return physicsFrameTime; } }
- public float OtherFrameTime { get { return otherFrameTime; } }
- public float ImageFrameTime { get { return imageFrameTime; } }
- public float InPacketsPerSecond { get { return inPacketsPerSecond; } }
- public float OutPacketsPerSecond { get { return outPacketsPerSecond; } }
- public float UnackedBytes { get { return unackedBytes; } }
- public float AgentFrameTime { get { return agentFrameTime; } }
- public float PendingDownloads { get { return pendingDownloads; } }
- public float PendingUploads { get { return pendingUploads; } }
- public float ActiveScripts { get { return activeScripts; } }
- public float ScriptLinesPerSecond { get { return scriptLinesPerSecond; } }
-
-// ///
-// /// This is the time it took for the last asset request made in response to a cache miss.
-// ///
-// public TimeSpan AssetRequestTimeAfterCacheMiss { get { return assetRequestTimeAfterCacheMiss; } }
-//
-// ///
-// /// Number of persistent requests for missing textures we have started blocking from clients. To some extent
-// /// this is just a temporary statistic to keep this problem in view - the root cause of this lies either
-// /// in a mishandling of the reply protocol, related to avatar appearance or may even originate in graphics
-// /// driver bugs on clients (though this seems less likely).
-// ///
-// public long BlockedMissingTextureRequests { get { return blockedMissingTextureRequests; } }
-//
-// ///
-// /// Record the number of times that an asset request has failed. Failures are effectively exceptions, such as
-// /// request timeouts. If an asset service replies that a particular asset cannot be found, this is not counted
-// /// as a failure
-// ///
-// public long AssetServiceRequestFailures { get { return assetServiceRequestFailures; } }
-
- ///
- /// Number of known failures to retrieve avatar inventory from the inventory service. This does not
- /// cover situations where the inventory service accepts the request but never returns any data, since
- /// we do not yet timeout this situation.
- ///
- /// Commented out because we do not cache inventory at this point
-// public long InventoryServiceRetrievalFailures { get { return inventoryServiceRetrievalFailures; } }
-
- ///
- /// Retrieve the total frame time (in ms) of the last frame
- ///
- //public float TotalFrameTime { get { return totalFrameTime; } }
-
- ///
- /// Retrieve the physics update component (in ms) of the last frame
- ///
- //public float PhysicsFrameTime { get { return physicsFrameTime; } }
-
- ///
- /// Retain a dictionary of all packet queues stats reporters
- ///
- private IDictionary packetQueueStatsCollectors
- = new Dictionary();
-
- public void AddAbnormalClientThreadTermination()
- {
- abnormalClientThreadTerminations++;
- }
-
-// public void AddAsset(AssetBase asset)
-// {
-// assetsInCache++;
-// //assetCacheMemoryUsage += asset.Data.Length;
-// }
-//
-// public void RemoveAsset(UUID uuid)
-// {
-// assetsInCache--;
-// }
-//
-// public void AddTexture(AssetBase image)
-// {
-// if (image.Data != null)
-// {
-// texturesInCache++;
-//
-// // This could have been a pull stat, though there was originally a nebulous idea to measure flow rates
-// textureCacheMemoryUsage += image.Data.Length;
-// }
-// }
-//
-// ///
-// /// Signal that the asset cache has been cleared.
-// ///
-// public void ClearAssetCacheStatistics()
-// {
-// assetsInCache = 0;
-// assetCacheMemoryUsage = 0;
-// texturesInCache = 0;
-// textureCacheMemoryUsage = 0;
-// }
-//
-// public void AddAssetRequestTimeAfterCacheMiss(TimeSpan ts)
-// {
-// assetRequestTimeAfterCacheMiss = ts;
-// }
-//
-// public void AddBlockedMissingTextureRequest()
-// {
-// blockedMissingTextureRequests++;
-// }
-//
-// public void AddAssetServiceRequestFailure()
-// {
-// assetServiceRequestFailures++;
-// }
-
-// public void AddInventoryServiceRetrievalFailure()
-// {
-// inventoryServiceRetrievalFailures++;
-// }
-
- ///
- /// Register as a packet queue stats provider
- ///
- /// An agent UUID
- ///
- public void RegisterPacketQueueStatsProvider(UUID uuid, IPullStatsProvider provider)
- {
- lock (packetQueueStatsCollectors)
- {
- // FIXME: If the region service is providing more than one region, then the child and root agent
- // queues are wrongly replacing each other here.
- packetQueueStatsCollectors[uuid] = new PacketQueueStatsCollector(provider);
- }
- }
-
- ///
- /// Deregister a packet queue stats provider
- ///
- /// An agent UUID
- public void DeregisterPacketQueueStatsProvider(UUID uuid)
- {
- lock (packetQueueStatsCollectors)
- {
- packetQueueStatsCollectors.Remove(uuid);
- }
- }
-
- ///
- /// This is the method on which the classic sim stats reporter (which collects stats for
- /// client purposes) sends information to listeners.
- ///
- ///
- public void ReceiveClassicSimStatsPacket(SimStats stats)
- {
- // FIXME: SimStats shouldn't allow an arbitrary stat packing order (which is inherited from the original
- // SimStatsPacket that was being used).
- timeDilation = stats.StatsBlock[0].StatValue;
- simFps = stats.StatsBlock[1].StatValue;
- physicsFps = stats.StatsBlock[2].StatValue;
- agentUpdates = stats.StatsBlock[3].StatValue;
- rootAgents = stats.StatsBlock[4].StatValue;
- childAgents = stats.StatsBlock[5].StatValue;
- totalPrims = stats.StatsBlock[6].StatValue;
- activePrims = stats.StatsBlock[7].StatValue;
- totalFrameTime = stats.StatsBlock[8].StatValue;
- netFrameTime = stats.StatsBlock[9].StatValue;
- physicsFrameTime = stats.StatsBlock[10].StatValue;
- otherFrameTime = stats.StatsBlock[11].StatValue;
- imageFrameTime = stats.StatsBlock[12].StatValue;
- inPacketsPerSecond = stats.StatsBlock[13].StatValue;
- outPacketsPerSecond = stats.StatsBlock[14].StatValue;
- unackedBytes = stats.StatsBlock[15].StatValue;
- agentFrameTime = stats.StatsBlock[16].StatValue;
- pendingDownloads = stats.StatsBlock[17].StatValue;
- pendingUploads = stats.StatsBlock[18].StatValue;
- activeScripts = stats.StatsBlock[19].StatValue;
- scriptLinesPerSecond = stats.StatsBlock[20].StatValue;
- }
-
- ///
- /// Report back collected statistical information.
- ///
- ///
- public override string Report()
- {
- StringBuilder sb = new StringBuilder(Environment.NewLine);
-// sb.Append("ASSET STATISTICS");
-// sb.Append(Environment.NewLine);
-
- /*
- sb.Append(
- string.Format(
-@"Asset cache contains {0,6} non-texture assets using {1,10} K
-Texture cache contains {2,6} texture assets using {3,10} K
-Latest asset request time after cache miss: {4}s
-Blocked client requests for missing textures: {5}
-Asset service request failures: {6}"+ Environment.NewLine,
- AssetsInCache, Math.Round(AssetCacheMemoryUsage / 1024.0),
- TexturesInCache, Math.Round(TextureCacheMemoryUsage / 1024.0),
- assetRequestTimeAfterCacheMiss.Milliseconds / 1000.0,
- BlockedMissingTextureRequests,
- AssetServiceRequestFailures));
- */
-
- /*
- sb.Append(
- string.Format(
-@"Asset cache contains {0,6} assets
-Latest asset request time after cache miss: {1}s
-Blocked client requests for missing textures: {2}
-Asset service request failures: {3}" + Environment.NewLine,
- AssetsInCache,
- assetRequestTimeAfterCacheMiss.Milliseconds / 1000.0,
- BlockedMissingTextureRequests,
- AssetServiceRequestFailures));
- */
-
- sb.Append(Environment.NewLine);
- sb.Append("CONNECTION STATISTICS");
- sb.Append(Environment.NewLine);
- sb.Append(
- string.Format(
- "Abnormal client thread terminations: {0}" + Environment.NewLine,
- abnormalClientThreadTerminations));
-
-// sb.Append(Environment.NewLine);
-// sb.Append("INVENTORY STATISTICS");
-// sb.Append(Environment.NewLine);
-// sb.Append(
-// string.Format(
-// "Initial inventory caching failures: {0}" + Environment.NewLine,
-// InventoryServiceRetrievalFailures));
-
- sb.Append(Environment.NewLine);
- sb.Append("FRAME STATISTICS");
- sb.Append(Environment.NewLine);
- sb.Append("Dilatn SimFPS PhyFPS AgntUp RootAg ChldAg Prims AtvPrm AtvScr ScrLPS");
- sb.Append(Environment.NewLine);
- sb.Append(
- string.Format(
- "{0,6:0.00} {1,6:0} {2,6:0.0} {3,6:0.0} {4,6:0} {5,6:0} {6,6:0} {7,6:0} {8,6:0} {9,6:0}",
- timeDilation, simFps, physicsFps, agentUpdates, rootAgents,
- childAgents, totalPrims, activePrims, activeScripts, scriptLinesPerSecond));
-
- sb.Append(Environment.NewLine);
- sb.Append(Environment.NewLine);
- // There is no script frame time currently because we don't yet collect it
- sb.Append("PktsIn PktOut PendDl PendUl UnackB TotlFt NetFt PhysFt OthrFt AgntFt ImgsFt");
- sb.Append(Environment.NewLine);
- sb.Append(
- string.Format(
- "{0,6:0} {1,6:0} {2,6:0} {3,6:0} {4,6:0} {5,6:0.0} {6,6:0.0} {7,6:0.0} {8,6:0.0} {9,6:0.0} {10,6:0.0}",
- inPacketsPerSecond, outPacketsPerSecond, pendingDownloads, pendingUploads, unackedBytes, totalFrameTime,
- netFrameTime, physicsFrameTime, otherFrameTime, agentFrameTime, imageFrameTime));
- sb.Append(Environment.NewLine);
-
- /*
- sb.Append(Environment.NewLine);
- sb.Append("PACKET QUEUE STATISTICS");
- sb.Append(Environment.NewLine);
- sb.Append("Agent UUID ");
- sb.Append(
- string.Format(
- " {0,7} {1,7} {2,7} {3,7} {4,7} {5,7} {6,7} {7,7} {8,7} {9,7}",
- "Send", "In", "Out", "Resend", "Land", "Wind", "Cloud", "Task", "Texture", "Asset"));
- sb.Append(Environment.NewLine);
-
- foreach (UUID key in packetQueueStatsCollectors.Keys)
- {
- sb.Append(string.Format("{0}: ", key));
- sb.Append(packetQueueStatsCollectors[key].Report());
- sb.Append(Environment.NewLine);
- }
- */
-
- sb.Append(base.Report());
-
- return sb.ToString();
- }
-
- ///
- /// Report back collected statistical information as json serialization.
- ///
- ///
- public override string XReport(string uptime, string version)
- {
- OSDMap args = new OSDMap(30);
-// args["AssetsInCache"] = OSD.FromString (String.Format ("{0:0.##}", AssetsInCache));
-// args["TimeAfterCacheMiss"] = OSD.FromString (String.Format ("{0:0.##}",
-// assetRequestTimeAfterCacheMiss.Milliseconds / 1000.0));
-// args["BlockedMissingTextureRequests"] = OSD.FromString (String.Format ("{0:0.##}",
-// BlockedMissingTextureRequests));
-// args["AssetServiceRequestFailures"] = OSD.FromString (String.Format ("{0:0.##}",
-// AssetServiceRequestFailures));
-// args["abnormalClientThreadTerminations"] = OSD.FromString (String.Format ("{0:0.##}",
-// abnormalClientThreadTerminations));
-// args["InventoryServiceRetrievalFailures"] = OSD.FromString (String.Format ("{0:0.##}",
-// InventoryServiceRetrievalFailures));
- args["Dilatn"] = OSD.FromString (String.Format ("{0:0.##}", timeDilation));
- args["SimFPS"] = OSD.FromString (String.Format ("{0:0.##}", simFps));
- args["PhyFPS"] = OSD.FromString (String.Format ("{0:0.##}", physicsFps));
- args["AgntUp"] = OSD.FromString (String.Format ("{0:0.##}", agentUpdates));
- args["RootAg"] = OSD.FromString (String.Format ("{0:0.##}", rootAgents));
- args["ChldAg"] = OSD.FromString (String.Format ("{0:0.##}", childAgents));
- args["Prims"] = OSD.FromString (String.Format ("{0:0.##}", totalPrims));
- args["AtvPrm"] = OSD.FromString (String.Format ("{0:0.##}", activePrims));
- args["AtvScr"] = OSD.FromString (String.Format ("{0:0.##}", activeScripts));
- args["ScrLPS"] = OSD.FromString (String.Format ("{0:0.##}", scriptLinesPerSecond));
- args["PktsIn"] = OSD.FromString (String.Format ("{0:0.##}", inPacketsPerSecond));
- args["PktOut"] = OSD.FromString (String.Format ("{0:0.##}", outPacketsPerSecond));
- args["PendDl"] = OSD.FromString (String.Format ("{0:0.##}", pendingDownloads));
- args["PendUl"] = OSD.FromString (String.Format ("{0:0.##}", pendingUploads));
- args["UnackB"] = OSD.FromString (String.Format ("{0:0.##}", unackedBytes));
- args["TotlFt"] = OSD.FromString (String.Format ("{0:0.##}", totalFrameTime));
- args["NetFt"] = OSD.FromString (String.Format ("{0:0.##}", netFrameTime));
- args["PhysFt"] = OSD.FromString (String.Format ("{0:0.##}", physicsFrameTime));
- args["OthrFt"] = OSD.FromString (String.Format ("{0:0.##}", otherFrameTime));
- args["AgntFt"] = OSD.FromString (String.Format ("{0:0.##}", agentFrameTime));
- args["ImgsFt"] = OSD.FromString (String.Format ("{0:0.##}", imageFrameTime));
- args["Memory"] = OSD.FromString (base.XReport (uptime, version));
- args["Uptime"] = OSD.FromString (uptime);
- args["Version"] = OSD.FromString (version);
-
- string strBuffer = "";
- strBuffer = OSDParser.SerializeJsonString(args);
-
- return strBuffer;
- }
- }
-
- ///
- /// Pull packet queue stats from packet queues and report
- ///
- public class PacketQueueStatsCollector : IStatsCollector
- {
- private IPullStatsProvider m_statsProvider;
-
- public PacketQueueStatsCollector(IPullStatsProvider provider)
- {
- m_statsProvider = provider;
- }
-
- ///
- /// Report back collected statistical information.
- ///
- ///
- public string Report()
- {
- return m_statsProvider.GetStats();
- }
-
- public string XReport(string uptime, string version)
- {
- return "";
- }
- }
-}
diff --git a/OpenSim/Framework/Statistics/StatsManager.cs b/OpenSim/Framework/Statistics/StatsManager.cs
deleted file mode 100644
index 436ce2f..0000000
--- a/OpenSim/Framework/Statistics/StatsManager.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * 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.
- */
-
-namespace OpenSim.Framework.Statistics
-{
- ///
- /// Singleton used to provide access to statistics reporters
- ///
- public class StatsManager
- {
- private static AssetStatsCollector assetStats;
- private static UserStatsCollector userStats;
- private static SimExtraStatsCollector simExtraStats = new SimExtraStatsCollector();
-
- public static AssetStatsCollector AssetStats { get { return assetStats; } }
- public static UserStatsCollector UserStats { get { return userStats; } }
- public static SimExtraStatsCollector SimExtraStats { get { return simExtraStats; } }
-
- ///
- /// Start collecting statistics related to assets.
- /// Should only be called once.
- ///
- public static AssetStatsCollector StartCollectingAssetStats()
- {
- assetStats = new AssetStatsCollector();
-
- return assetStats;
- }
-
- ///
- /// Start collecting statistics related to users.
- /// Should only be called once.
- ///
- public static UserStatsCollector StartCollectingUserStats()
- {
- userStats = new UserStatsCollector();
-
- return userStats;
- }
- }
-}
\ No newline at end of file
diff --git a/OpenSim/Framework/Statistics/UserStatsCollector.cs b/OpenSim/Framework/Statistics/UserStatsCollector.cs
deleted file mode 100644
index fd2a9bf..0000000
--- a/OpenSim/Framework/Statistics/UserStatsCollector.cs
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * 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.Timers;
-
-namespace OpenSim.Framework.Statistics
-{
- ///
- /// Collects user service statistics
- ///
- public class UserStatsCollector : BaseStatsCollector
- {
- private Timer ageStatsTimer = new Timer(24 * 60 * 60 * 1000);
-
- private int successfulLoginsToday;
- public int SuccessfulLoginsToday { get { return successfulLoginsToday; } }
-
- private int successfulLoginsYesterday;
- public int SuccessfulLoginsYesterday { get { return successfulLoginsYesterday; } }
-
- private int successfulLogins;
- public int SuccessfulLogins { get { return successfulLogins; } }
-
- private int logouts;
- public int Logouts { get { return logouts; } }
-
- public UserStatsCollector()
- {
- ageStatsTimer.Elapsed += new ElapsedEventHandler(OnAgeing);
- ageStatsTimer.Enabled = true;
- }
-
- private void OnAgeing(object source, ElapsedEventArgs e)
- {
- successfulLoginsYesterday = successfulLoginsToday;
-
- // There is a possibility that an asset request could occur between the execution of these
- // two statements. But we're better off without the synchronization overhead.
- successfulLoginsToday = 0;
- }
-
- ///
- /// Record a successful login
- ///
- public void AddSuccessfulLogin()
- {
- successfulLogins++;
- successfulLoginsToday++;
- }
-
- public void AddLogout()
- {
- logouts++;
- }
-
- ///
- /// Report back collected statistical information.
- ///
- ///
- override public string Report()
- {
- return string.Format(
-@"Successful logins total : {0}, today : {1}, yesterday : {2}
- Logouts total : {3}",
- SuccessfulLogins, SuccessfulLoginsToday, SuccessfulLoginsYesterday, Logouts);
- }
- }
-}
diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs
index f68974c..07a9756 100644
--- a/OpenSim/Region/Application/OpenSim.cs
+++ b/OpenSim/Region/Application/OpenSim.cs
@@ -40,7 +40,7 @@ using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Framework.Console;
using OpenSim.Framework.Servers;
-using OpenSim.Framework.Statistics;
+using OpenSim.Framework.Monitoring;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs
index 825c4c4..4084741 100644
--- a/OpenSim/Region/Application/OpenSimBase.cs
+++ b/OpenSim/Region/Application/OpenSimBase.cs
@@ -40,7 +40,7 @@ using OpenSim.Framework.Communications;
using OpenSim.Framework.Console;
using OpenSim.Framework.Servers;
using OpenSim.Framework.Servers.HttpServer;
-using OpenSim.Framework.Statistics;
+using OpenSim.Framework.Monitoring;
using OpenSim.Region.ClientStack;
using OpenSim.Region.CoreModules.ServiceConnectorsOut.UserAccounts;
using OpenSim.Region.Framework;
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index f7864b8..01ceeed 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -41,7 +41,7 @@ using OpenMetaverse.Messages.Linden;
using OpenMetaverse.StructuredData;
using OpenSim.Framework;
using OpenSim.Framework.Client;
-using OpenSim.Framework.Statistics;
+using OpenSim.Framework.Monitoring;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
using OpenSim.Services.Interfaces;
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
index 746eb90..55780d6 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
@@ -37,7 +37,7 @@ using log4net;
using Nini.Config;
using OpenMetaverse.Packets;
using OpenSim.Framework;
-using OpenSim.Framework.Statistics;
+using OpenSim.Framework.Monitoring;
using OpenSim.Region.Framework.Scenes;
using OpenMetaverse;
diff --git a/OpenSim/Region/CoreModules/Avatar/Commands/UserCommandsModule.cs b/OpenSim/Region/CoreModules/Avatar/Commands/UserCommandsModule.cs
index 4bcd2ac..764adf9 100644
--- a/OpenSim/Region/CoreModules/Avatar/Commands/UserCommandsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Commands/UserCommandsModule.cs
@@ -37,7 +37,7 @@ using Nini.Config;
using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Framework.Console;
-using OpenSim.Framework.Statistics;
+using OpenSim.Framework.Monitoring;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs
index 990dffb..11e0150 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs
@@ -31,7 +31,7 @@ using System.Collections.Generic;
using System.Reflection;
using Nini.Config;
using OpenSim.Framework;
-using OpenSim.Framework.Statistics;
+using OpenSim.Framework.Monitoring;
using OpenSim.Services.Connectors;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
diff --git a/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs b/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs
index e5cd3e2..09f6758 100644
--- a/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs
+++ b/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs
@@ -37,7 +37,7 @@ using Nini.Config;
using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Framework.Console;
-using OpenSim.Framework.Statistics;
+using OpenSim.Framework.Monitoring;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
diff --git a/OpenSim/Region/CoreModules/World/Region/RegionCommandsModule.cs b/OpenSim/Region/CoreModules/World/Region/RegionCommandsModule.cs
index 2838e0c..7d35473 100644
--- a/OpenSim/Region/CoreModules/World/Region/RegionCommandsModule.cs
+++ b/OpenSim/Region/CoreModules/World/Region/RegionCommandsModule.cs
@@ -37,7 +37,7 @@ using Nini.Config;
using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Framework.Console;
-using OpenSim.Framework.Statistics;
+using OpenSim.Framework.Monitoring;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
diff --git a/OpenSim/Region/Framework/Scenes/RegionStatsHandler.cs b/OpenSim/Region/Framework/Scenes/RegionStatsHandler.cs
index 1365831..c11174d 100644
--- a/OpenSim/Region/Framework/Scenes/RegionStatsHandler.cs
+++ b/OpenSim/Region/Framework/Scenes/RegionStatsHandler.cs
@@ -39,7 +39,7 @@ using OpenSim.Framework.Communications;
using OpenSim.Framework.Console;
using OpenSim.Framework.Servers;
using OpenSim.Framework.Servers.HttpServer;
-using OpenSim.Framework.Statistics;
+using OpenSim.Framework.Monitoring;
using OpenSim.Region.Framework;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
diff --git a/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs b/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs
index 742d42a..96317c3 100644
--- a/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs
+++ b/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs
@@ -30,7 +30,7 @@ using System.Collections.Generic;
using System.Timers;
using OpenMetaverse.Packets;
using OpenSim.Framework;
-using OpenSim.Framework.Statistics;
+using OpenSim.Framework.Monitoring;
using OpenSim.Region.Framework.Interfaces;
namespace OpenSim.Region.Framework.Scenes
diff --git a/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs b/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs
index ca9bd4a..5fe5948 100644
--- a/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs
+++ b/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs
@@ -35,7 +35,7 @@ using Nini.Config;
using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Framework.Console;
-using OpenSim.Framework.Statistics;
+using OpenSim.Framework.Monitoring;
using OpenSim.Region.ClientStack.LindenUDP;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
diff --git a/OpenSim/Region/OptionalModules/Avatar/Appearance/AppearanceInfoModule.cs b/OpenSim/Region/OptionalModules/Avatar/Appearance/AppearanceInfoModule.cs
index 6bb6729..d718a2f 100644
--- a/OpenSim/Region/OptionalModules/Avatar/Appearance/AppearanceInfoModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/Appearance/AppearanceInfoModule.cs
@@ -36,7 +36,7 @@ using Nini.Config;
using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Framework.Console;
-using OpenSim.Framework.Statistics;
+using OpenSim.Framework.Monitoring;
using OpenSim.Region.ClientStack.LindenUDP;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
diff --git a/OpenSim/Region/OptionalModules/Avatar/Attachments/AttachmentsCommandModule.cs b/OpenSim/Region/OptionalModules/Avatar/Attachments/AttachmentsCommandModule.cs
index 1b9e3ac..d68aabc 100644
--- a/OpenSim/Region/OptionalModules/Avatar/Attachments/AttachmentsCommandModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/Attachments/AttachmentsCommandModule.cs
@@ -36,7 +36,7 @@ using Nini.Config;
using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Framework.Console;
-using OpenSim.Framework.Statistics;
+using OpenSim.Framework.Monitoring;
using OpenSim.Region.ClientStack.LindenUDP;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
diff --git a/OpenSim/Region/OptionalModules/Avatar/Friends/FriendsCommandsModule.cs b/OpenSim/Region/OptionalModules/Avatar/Friends/FriendsCommandsModule.cs
index 2602050..4e84364 100644
--- a/OpenSim/Region/OptionalModules/Avatar/Friends/FriendsCommandsModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/Friends/FriendsCommandsModule.cs
@@ -37,7 +37,7 @@ using Nini.Config;
using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Framework.Console;
-using OpenSim.Framework.Statistics;
+using OpenSim.Framework.Monitoring;
using OpenSim.Region.ClientStack.LindenUDP;
using OpenSim.Region.CoreModules.Avatar.Friends;
using OpenSim.Region.Framework.Interfaces;
diff --git a/OpenSim/Region/UserStatistics/ActiveConnectionsAJAX.cs b/OpenSim/Region/UserStatistics/ActiveConnectionsAJAX.cs
index dcbd717..3243a9a 100644
--- a/OpenSim/Region/UserStatistics/ActiveConnectionsAJAX.cs
+++ b/OpenSim/Region/UserStatistics/ActiveConnectionsAJAX.cs
@@ -34,7 +34,7 @@ using Mono.Data.SqliteClient;
using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Region.Framework.Scenes;
-using OpenSim.Framework.Statistics;
+using OpenSim.Framework.Monitoring;
namespace OpenSim.Region.UserStatistics
{
diff --git a/OpenSim/Region/UserStatistics/Default_Report.cs b/OpenSim/Region/UserStatistics/Default_Report.cs
index 0e17630..cdc615c 100644
--- a/OpenSim/Region/UserStatistics/Default_Report.cs
+++ b/OpenSim/Region/UserStatistics/Default_Report.cs
@@ -33,7 +33,7 @@ using System.Text;
using Mono.Data.SqliteClient;
using OpenMetaverse;
using OpenSim.Region.Framework.Scenes;
-using OpenSim.Framework.Statistics;
+using OpenSim.Framework.Monitoring;
namespace OpenSim.Region.UserStatistics
diff --git a/OpenSim/Region/UserStatistics/LogLinesAJAX.cs b/OpenSim/Region/UserStatistics/LogLinesAJAX.cs
index 811baba..74de46b 100644
--- a/OpenSim/Region/UserStatistics/LogLinesAJAX.cs
+++ b/OpenSim/Region/UserStatistics/LogLinesAJAX.cs
@@ -34,7 +34,7 @@ using System.Text.RegularExpressions;
using Mono.Data.SqliteClient;
using OpenMetaverse;
using OpenSim.Region.Framework.Scenes;
-using OpenSim.Framework.Statistics;
+using OpenSim.Framework.Monitoring;
namespace OpenSim.Region.UserStatistics
{
diff --git a/OpenSim/Region/UserStatistics/SimStatsAJAX.cs b/OpenSim/Region/UserStatistics/SimStatsAJAX.cs
index 8c04e71..28051fb 100644
--- a/OpenSim/Region/UserStatistics/SimStatsAJAX.cs
+++ b/OpenSim/Region/UserStatistics/SimStatsAJAX.cs
@@ -33,7 +33,7 @@ using System.Text;
using Mono.Data.SqliteClient;
using OpenMetaverse;
using OpenSim.Region.Framework.Scenes;
-using OpenSim.Framework.Statistics;
+using OpenSim.Framework.Monitoring;
namespace OpenSim.Region.UserStatistics
{
diff --git a/prebuild.xml b/prebuild.xml
index e6f8c21..7a235e1 100644
--- a/prebuild.xml
+++ b/prebuild.xml
@@ -235,7 +235,7 @@
-
+
../../../bin/
@@ -437,7 +437,7 @@
-
+
@@ -602,9 +602,9 @@
+
-
@@ -636,13 +636,13 @@
+
-
+
+
-
-
@@ -688,10 +688,10 @@
+
-
@@ -1406,10 +1406,10 @@
+
-
@@ -1497,11 +1497,11 @@
+
+
-
-
@@ -1534,15 +1534,15 @@
-
-
+
+
-
+
@@ -1625,9 +1625,9 @@
+
-
@@ -1763,15 +1763,15 @@
+
-
+
-
-
+
@@ -2409,7 +2409,6 @@
-
@@ -2438,9 +2437,9 @@
+
-
@@ -2924,9 +2923,9 @@
+
-
@@ -2996,9 +2995,9 @@
+
-
@@ -3055,8 +3054,8 @@
+
-
@@ -3112,9 +3111,9 @@
+
-
@@ -3149,7 +3148,7 @@
-
+
--
cgit v1.1