diff --git a/OpenSim/ApplicationPlugins/CreateCommsManager/CreateCommsManagerPlugin.cs b/OpenSim/ApplicationPlugins/CreateCommsManager/CreateCommsManagerPlugin.cs index 3985f425b4..a0c592e398 100644 --- a/OpenSim/ApplicationPlugins/CreateCommsManager/CreateCommsManagerPlugin.cs +++ b/OpenSim/ApplicationPlugins/CreateCommsManager/CreateCommsManagerPlugin.cs @@ -205,6 +205,8 @@ namespace OpenSim.ApplicationPlugins.CreateCommsManager = new CommunicationsOGS1(m_openSim.NetServersInfo, m_httpServer, m_openSim.AssetCache, libraryRootFolder); m_httpServer.AddStreamHandler(new OpenSim.SimStatusHandler()); + m_httpServer.AddStreamHandler(new OpenSim.XSimStatusHandler(m_openSim)); + } protected virtual void InitialiseHGStandaloneServices(LibraryRootFolder libraryRootFolder) @@ -240,6 +242,7 @@ namespace OpenSim.ApplicationPlugins.CreateCommsManager HGServices = ((HGCommunicationsGridMode) m_commsManager).HGServices; m_httpServer.AddStreamHandler(new OpenSim.SimStatusHandler()); + m_httpServer.AddStreamHandler(new OpenSim.XSimStatusHandler(m_openSim)); } private void CreateGridInfoService() @@ -250,4 +253,4 @@ namespace OpenSim.ApplicationPlugins.CreateCommsManager m_httpServer.AddStreamHandler(new RestStreamHandler("GET", "/get_grid_info", m_gridInfoService.RestGetGridInfoMethod)); } } -} \ No newline at end of file +} diff --git a/OpenSim/Framework/Servers/BaseOpenSimServer.cs b/OpenSim/Framework/Servers/BaseOpenSimServer.cs index 9794a100c1..f22a6e88ff 100644 --- a/OpenSim/Framework/Servers/BaseOpenSimServer.cs +++ b/OpenSim/Framework/Servers/BaseOpenSimServer.cs @@ -40,6 +40,10 @@ using OpenSim.Framework.Console; using OpenSim.Framework.Statistics; using Timer=System.Timers.Timer; +using OpenMetaverse; +using OpenMetaverse.StructuredData; + + namespace OpenSim.Framework.Servers { /// @@ -454,6 +458,10 @@ namespace OpenSim.Framework.Servers } } + + public string StatReport() { + return m_stats.XReport(); + } protected void RemovePIDFile() { diff --git a/OpenSim/Framework/Statistics/BaseStatsCollector.cs b/OpenSim/Framework/Statistics/BaseStatsCollector.cs index 1e59983e49..a5ce8aa8f8 100644 --- a/OpenSim/Framework/Statistics/BaseStatsCollector.cs +++ b/OpenSim/Framework/Statistics/BaseStatsCollector.cs @@ -28,6 +28,10 @@ using System; using System.Text; +using OpenMetaverse; +using OpenMetaverse.StructuredData; + + namespace OpenSim.Framework.Statistics { /// @@ -47,5 +51,10 @@ namespace OpenSim.Framework.Statistics return sb.ToString(); } + + public virtual string XReport() + { + return (string) Math.Round(GC.GetTotalMemory(false) / 1024.0 / 1024.0).ToString() ; + } } } diff --git a/OpenSim/Framework/Statistics/Interfaces/IStatsCollector.cs b/OpenSim/Framework/Statistics/Interfaces/IStatsCollector.cs index e468fb2d25..48f28eedaf 100644 --- a/OpenSim/Framework/Statistics/Interfaces/IStatsCollector.cs +++ b/OpenSim/Framework/Statistics/Interfaces/IStatsCollector.cs @@ -37,5 +37,13 @@ namespace OpenSim.Framework.Statistics /// /// string Report(); + + /// + /// Report back collected statistical information in json + /// + /// + /// A + /// + string XReport(); } } diff --git a/OpenSim/Framework/Statistics/SimExtraStatsCollector.cs b/OpenSim/Framework/Statistics/SimExtraStatsCollector.cs index d6e26e4261..8b8b52af8c 100644 --- a/OpenSim/Framework/Statistics/SimExtraStatsCollector.cs +++ b/OpenSim/Framework/Statistics/SimExtraStatsCollector.cs @@ -31,6 +31,9 @@ using System.Text; using OpenMetaverse; using OpenSim.Framework.Statistics.Interfaces; +using OpenMetaverse; +using OpenMetaverse.StructuredData; + namespace OpenSim.Framework.Statistics { /// @@ -380,6 +383,53 @@ Asset service request failures: {3}" + Environment.NewLine, return sb.ToString(); } + + + /// + /// Report back collected statistical information. + /// + /// + public override string XReport() + { + OSDMap args = new OSDMap(28); + args["AssetsInCache"] = OSD.FromReal(AssetsInCache); + args["TimeAfterCacheMiss"] = OSD.FromReal(assetRequestTimeAfterCacheMiss.Milliseconds / 1000.0); + args["BlockedMissingTextureRequests"] = OSD.FromReal(BlockedMissingTextureRequests); + args["AssetServiceRequestFailures"] = OSD.FromReal(AssetServiceRequestFailures); + args["abnormalClientThreadTerminations"] = OSD.FromReal(abnormalClientThreadTerminations); + args["InventoryServiceRetrievalFailures"] = OSD.FromReal(InventoryServiceRetrievalFailures); + args["Dilatn"] = OSD.FromReal(timeDilation); + args["SimFPS"] = OSD.FromReal(simFps); + args["PhyFPS"] = OSD.FromReal(physicsFps); + args["AgntUp"] = OSD.FromReal(agentUpdates); + args["RootAg"] = OSD.FromReal(rootAgents); + args["ChldAg"] = OSD.FromReal(childAgents); + args["Prims"] = OSD.FromReal(totalPrims); + args["AtvPrm"] = OSD.FromReal(activePrims); + args["AtvScr"] = OSD.FromReal(activeScripts); + args["ScrLPS"] = OSD.FromReal(scriptLinesPerSecond); + args["PktsIn"] = OSD.FromReal(inPacketsPerSecond); + args["PktOut"] = OSD.FromReal(outPacketsPerSecond); + args["PendDl"] = OSD.FromReal(pendingDownloads); + args["PendUl"] = OSD.FromReal(pendingUploads); + args["UnackB"] = OSD.FromReal(unackedBytes); + args["TotlFt"] = OSD.FromReal(totalFrameTime); + args["NetFt"] = OSD.FromReal(netFrameTime); + args["PhysFt"] = OSD.FromReal(physicsFrameTime); + args["OthrFt"] = OSD.FromReal(otherFrameTime); + args["AgntFt"] = OSD.FromReal(agentFrameTime); + args["ImgsFt"] = OSD.FromReal(imageFrameTime); + args["Memory"] = OSD.FromString(base.XReport()); + + string strBuffer = ""; + byte[] buffer = new byte[1]; + + strBuffer = OSDParser.SerializeJsonString(args); + UTF8Encoding str = new UTF8Encoding(); + buffer = str.GetBytes(strBuffer); + + return strBuffer; + } } /// @@ -402,5 +452,10 @@ Asset service request failures: {3}" + Environment.NewLine, { return m_statsProvider.GetStats(); } + + public string XReport() + { + return ""; + } } } diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs index 7aa9f99860..18abcadbc0 100644 --- a/OpenSim/Region/Application/OpenSimBase.cs +++ b/OpenSim/Region/Application/OpenSimBase.cs @@ -807,6 +807,43 @@ namespace OpenSim } } + /// + /// Handler to supply the current extended status of this sim + /// + /// Currently prints the same a "show stats" plus the uptime of the sim + public class XSimStatusHandler : IStreamedRequestHandler + { + OpenSimBase m_opensim; + + public XSimStatusHandler(OpenSimBase sim) + // public XSimStatusHandler(BaseOpenSimServer sim) + { + m_opensim = sim; + } + + public byte[] Handle(string path, Stream request, + OSHttpRequest httpRequest, OSHttpResponse httpResponse) + { + return Encoding.UTF8.GetBytes(m_opensim.StatReport()); + } + + public string ContentType + { + get { return "text/plain"; } + } + + public string HttpMethod + { + get { return "GET"; } + } + + public string Path + { + get { return "/simstatusx/"; } + } + } + + #endregion /// diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index ab1816f2b0..6ac0acd235 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -10290,5 +10290,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP LLPacketHandler handler = (LLPacketHandler) m_PacketHandler; return handler.PacketQueue.GetStats(); } + + public string XReport() + { + return ""; + } } } diff --git a/prebuild.xml b/prebuild.xml index 21f8e5b721..72cfb7604d 100644 --- a/prebuild.xml +++ b/prebuild.xml @@ -146,6 +146,7 @@ + @@ -3287,3 +3288,4 @@ +