From 0f501629618fe1655b7ba653802056b5c32dbae6 Mon Sep 17 00:00:00 2001 From: Justin Clarke Casey Date: Wed, 14 May 2008 21:53:40 +0000 Subject: * Refactor additional stats collection common code into base opensim server * If extra stats not sent to the viewer are available on an opensim server, they are now uniformly accessible using the 'show stats' command --- OpenSim/Framework/Servers/BaseOpenSimServer.cs | 19 +++++++++- .../Framework/Statistics/AssetStatsCollector.cs | 2 +- .../Statistics/Interfaces/IStatsCollector.cs | 41 ++++++++++++++++++++++ .../Framework/Statistics/SimExtraStatsCollector.cs | 4 +-- OpenSim/Framework/Statistics/StatsManager.cs | 12 +++++-- OpenSim/Framework/Statistics/UserStatsCollector.cs | 2 +- 6 files changed, 72 insertions(+), 8 deletions(-) create mode 100644 OpenSim/Framework/Statistics/Interfaces/IStatsCollector.cs (limited to 'OpenSim/Framework') diff --git a/OpenSim/Framework/Servers/BaseOpenSimServer.cs b/OpenSim/Framework/Servers/BaseOpenSimServer.cs index 344309d..811a0db 100644 --- a/OpenSim/Framework/Servers/BaseOpenSimServer.cs +++ b/OpenSim/Framework/Servers/BaseOpenSimServer.cs @@ -27,6 +27,7 @@ using System; using OpenSim.Framework.Console; +using OpenSim.Framework.Statistics; namespace OpenSim.Framework.Servers { @@ -44,6 +45,11 @@ namespace OpenSim.Framework.Servers get { return m_httpServer; } } + /// + /// Holds the non-viewer statistics collection object for this service/server + /// + protected IStatsCollector m_stats; + public BaseOpenSimServer() { m_startuptime = DateTime.Now; @@ -72,6 +78,10 @@ namespace OpenSim.Framework.Servers { case "help": Notice("quit - equivalent to shutdown."); + + if (m_stats != null) + Notice("show stats - statistical information for this server"); + Notice("show uptime - show server startup and uptime."); Notice("shutdown - shutdown the server.\n"); break; @@ -97,7 +107,14 @@ namespace OpenSim.Framework.Servers public virtual void Show(string ShowWhat) { switch (ShowWhat) - { + { + case "stats": + if (m_stats != null) + { + Notice(m_stats.Report()); + } + break; + case "uptime": Notice("Server has been running since " + m_startuptime.DayOfWeek + ", " + m_startuptime.ToString()); Notice("That is an elapsed time of " + (DateTime.Now - m_startuptime).ToString()); diff --git a/OpenSim/Framework/Statistics/AssetStatsCollector.cs b/OpenSim/Framework/Statistics/AssetStatsCollector.cs index afc42d2..bd36c3f 100644 --- a/OpenSim/Framework/Statistics/AssetStatsCollector.cs +++ b/OpenSim/Framework/Statistics/AssetStatsCollector.cs @@ -33,7 +33,7 @@ namespace OpenSim.Framework.Statistics /// /// Asset service statistics collection /// - public class AssetStatsCollector + public class AssetStatsCollector : IStatsCollector { private Timer ageStatsTimer = new Timer(24 * 60 * 60 * 1000); private DateTime startTime = DateTime.Now; diff --git a/OpenSim/Framework/Statistics/Interfaces/IStatsCollector.cs b/OpenSim/Framework/Statistics/Interfaces/IStatsCollector.cs new file mode 100644 index 0000000..768cd22 --- /dev/null +++ b/OpenSim/Framework/Statistics/Interfaces/IStatsCollector.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 OpenSim 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(); + } +} diff --git a/OpenSim/Framework/Statistics/SimExtraStatsCollector.cs b/OpenSim/Framework/Statistics/SimExtraStatsCollector.cs index 4e69d17..2beb3a0 100644 --- a/OpenSim/Framework/Statistics/SimExtraStatsCollector.cs +++ b/OpenSim/Framework/Statistics/SimExtraStatsCollector.cs @@ -36,7 +36,7 @@ namespace OpenSim.Framework.Statistics /// /// Collects sim statistics which aren't already being collected for the linden viewer's statistics pane /// - public class SimExtraStatsCollector + public class SimExtraStatsCollector : IStatsCollector { private long assetsInCache; private long texturesInCache; @@ -135,7 +135,7 @@ Texture cache contains {2,6} textures using {3,10:0.000}K" + Environment.NewLine /// /// Pull packet queue stats from packet queues and report /// - public class PacketQueueStatsCollector + public class PacketQueueStatsCollector : IStatsCollector { private IPullStatsProvider m_statsProvider; diff --git a/OpenSim/Framework/Statistics/StatsManager.cs b/OpenSim/Framework/Statistics/StatsManager.cs index 10251a5..3c97dde 100644 --- a/OpenSim/Framework/Statistics/StatsManager.cs +++ b/OpenSim/Framework/Statistics/StatsManager.cs @@ -46,27 +46,33 @@ namespace OpenSim.Framework.Statistics /// Start collecting statistics related to assets. /// Should only be called once. /// - public static void StartCollectingAssetStats() + public static AssetStatsCollector StartCollectingAssetStats() { assetStats = new AssetStatsCollector(); + + return assetStats; } /// /// Start collecting statistics related to users. /// Should only be called once. /// - public static void StartCollectingUserStats() + public static UserStatsCollector StartCollectingUserStats() { userStats = new UserStatsCollector(); + + return userStats; } /// /// Start collecting extra sim statistics apart from those collected for the client. /// Should only be called once. /// - public static void StartCollectingSimExtraStats() + public static SimExtraStatsCollector StartCollectingSimExtraStats() { simExtraStats = new SimExtraStatsCollector(); + + return simExtraStats; } } } diff --git a/OpenSim/Framework/Statistics/UserStatsCollector.cs b/OpenSim/Framework/Statistics/UserStatsCollector.cs index 80cd46e..f0f0417 100644 --- a/OpenSim/Framework/Statistics/UserStatsCollector.cs +++ b/OpenSim/Framework/Statistics/UserStatsCollector.cs @@ -32,7 +32,7 @@ namespace OpenSim.Framework.Statistics /// /// Collects user service statistics /// - public class UserStatsCollector + public class UserStatsCollector : IStatsCollector { private Timer ageStatsTimer = new Timer(24 * 60 * 60 * 1000); -- cgit v1.1