From 0f501629618fe1655b7ba653802056b5c32dbae6 Mon Sep 17 00:00:00 2001 From: Justin Clarke Casey Date: Wed, 14 May 2008 21:53:40 +0000 Subject: [PATCH] * 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 --- .../Framework/Servers/BaseOpenSimServer.cs | 19 ++++++++- .../Statistics/AssetStatsCollector.cs | 2 +- .../Statistics/Interfaces/IStatsCollector.cs | 41 +++++++++++++++++++ .../Statistics/SimExtraStatsCollector.cs | 4 +- OpenSim/Framework/Statistics/StatsManager.cs | 12 ++++-- .../Statistics/UserStatsCollector.cs | 2 +- OpenSim/Grid/AssetServer/Main.cs | 13 +----- OpenSim/Grid/UserServer/Main.cs | 9 +--- OpenSim/Region/Application/OpenSimMain.cs | 2 +- .../Region/Application/OpenSimMainConsole.cs | 15 +------ prebuild.xml | 1 + 11 files changed, 79 insertions(+), 41 deletions(-) create mode 100644 OpenSim/Framework/Statistics/Interfaces/IStatsCollector.cs diff --git a/OpenSim/Framework/Servers/BaseOpenSimServer.cs b/OpenSim/Framework/Servers/BaseOpenSimServer.cs index 344309d950..811a0db8a8 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 afc42d22ed..bd36c3fbc7 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 0000000000..768cd2227e --- /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 4e69d17f33..2beb3a0bc4 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 10251a5356..3c97dde09f 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 80cd46efe8..f0f041733b 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); diff --git a/OpenSim/Grid/AssetServer/Main.cs b/OpenSim/Grid/AssetServer/Main.cs index 77e462826a..1b1f9c7f2b 100644 --- a/OpenSim/Grid/AssetServer/Main.cs +++ b/OpenSim/Grid/AssetServer/Main.cs @@ -98,7 +98,7 @@ namespace OpenSim.Grid.AssetServer m_log.Info("[ASSET]: Starting HTTP process"); m_httpServer = new BaseHttpServer(m_config.HttpPort); - StatsManager.StartCollectingAssetStats(); + m_stats = StatsManager.StartCollectingAssetStats(); AddHttpHandlers(); @@ -179,16 +179,7 @@ namespace OpenSim.Grid.AssetServer base.RunCmd(cmd, cmdparams); switch (cmd) - { - case "help": - m_console.Notice("stats - statistical information for this server"); - - break; - - case "stats": - m_console.Notice("STATS", Environment.NewLine + StatsManager.AssetStats.Report()); - break; - + { case "shutdown": m_console.Close(); Environment.Exit(0); diff --git a/OpenSim/Grid/UserServer/Main.cs b/OpenSim/Grid/UserServer/Main.cs index 7cd243172a..00b7f7612e 100644 --- a/OpenSim/Grid/UserServer/Main.cs +++ b/OpenSim/Grid/UserServer/Main.cs @@ -88,7 +88,7 @@ namespace OpenSim.Grid.UserServer { Cfg = new UserConfig("USER SERVER", (Path.Combine(Util.configDir(), "UserServer_Config.xml"))); - StatsManager.StartCollectingUserStats(); + m_stats = StatsManager.StartCollectingUserStats(); m_log.Info("[REGION]: Establishing data connection"); m_userManager = new UserManager(); @@ -219,16 +219,11 @@ namespace OpenSim.Grid.UserServer { case "help": m_console.Notice("create user - create a new user"); - m_console.Notice("stats - statistical information for this server"); break; case "create": do_create(cmdparams[0]); - break; - - case "stats": - m_console.Notice(StatsManager.UserStats.Report()); - break; + break; case "test-inventory": // RestObjectPosterResponse> requester = new RestObjectPosterResponse>(); diff --git a/OpenSim/Region/Application/OpenSimMain.cs b/OpenSim/Region/Application/OpenSimMain.cs index bae7819b36..e7386ff45a 100644 --- a/OpenSim/Region/Application/OpenSimMain.cs +++ b/OpenSim/Region/Application/OpenSimMain.cs @@ -391,7 +391,7 @@ namespace OpenSim { printAvailableVersionInformation(); - StatsManager.StartCollectingSimExtraStats(); + m_stats = StatsManager.StartCollectingSimExtraStats(); // Do baseclass startup sequence: OpenSim.Region.ClientStack.RegionApplicationBase.StartUp // TerrainManager, StorageManager, HTTP Server diff --git a/OpenSim/Region/Application/OpenSimMainConsole.cs b/OpenSim/Region/Application/OpenSimMainConsole.cs index 39f2b7bd3c..2381f572ef 100644 --- a/OpenSim/Region/Application/OpenSimMainConsole.cs +++ b/OpenSim/Region/Application/OpenSimMainConsole.cs @@ -252,8 +252,7 @@ namespace OpenSim m_console.Notice("set-time [x] - set the current scene time phase"); m_console.Notice("show assets - show state of asset cache."); m_console.Notice("show users - show info about connected users."); - m_console.Notice("show modules - shows info about loaded modules."); - m_console.Notice("show stats - statistical information for this server"); + m_console.Notice("show modules - shows info about loaded modules."); m_console.Notice("show version - show the running build version."); m_console.Notice("threads - list threads"); m_console.Notice("config set section field value - set a config value"); @@ -595,18 +594,6 @@ namespace OpenSim scene.RegionInfo.RegionLocY); }); break; - - case "stats": - if (StatsManager.SimExtraStats != null) - { - m_console.Notice( - "STATS", Environment.NewLine + StatsManager.SimExtraStats.Report()); - } - else - { - m_console.Notice("Extra sim statistics collection has not been enabled"); - } - break; case "version": if (!string.IsNullOrEmpty(buildVersion)) diff --git a/prebuild.xml b/prebuild.xml index 530b3fbe3d..65c3452d49 100644 --- a/prebuild.xml +++ b/prebuild.xml @@ -451,6 +451,7 @@ +