Thank you kindly, BlueWall, for a patch that:

Move json stats to non-published resource name
Remove well-known resource name for json stats, 
creating dynamic uris with private keys and add 
a user configurable resource name for region owner usage.
0.6.5-rc1
Charles Krinke 2009-05-02 16:28:30 +00:00
parent 47640aca22
commit 280d2cbf4a
6 changed files with 196 additions and 7 deletions

View File

@ -186,6 +186,8 @@ namespace OpenSim.ApplicationPlugins.CreateCommsManager
m_httpServer.AddStreamHandler(new OpenSim.SimStatusHandler()); m_httpServer.AddStreamHandler(new OpenSim.SimStatusHandler());
m_httpServer.AddStreamHandler(new OpenSim.XSimStatusHandler(m_openSim)); m_httpServer.AddStreamHandler(new OpenSim.XSimStatusHandler(m_openSim));
if(m_openSim.userStatsURI != String.Empty )
m_httpServer.AddStreamHandler(new OpenSim.UXSimStatusHandler(m_openSim));
} }
protected virtual void InitialiseHGStandaloneServices(LibraryRootFolder libraryRootFolder) protected virtual void InitialiseHGStandaloneServices(LibraryRootFolder libraryRootFolder)

View File

@ -211,6 +211,8 @@ namespace OpenSim.Framework
public int ProxyOffset = 0; public int ProxyOffset = 0;
public string RegionName = String.Empty; public string RegionName = String.Empty;
public string regionSecret = UUID.Random().ToString(); public string regionSecret = UUID.Random().ToString();
public string osSecret;
public UUID lastMapUUID = UUID.Zero; public UUID lastMapUUID = UUID.Zero;
public string lastMapRefresh = "0"; public string lastMapRefresh = "0";

View File

@ -79,6 +79,11 @@ namespace OpenSim.Framework.Servers
protected string m_version; protected string m_version;
protected string m_pidFile = String.Empty; protected string m_pidFile = String.Empty;
/// <summary>
/// Random uuid for private data
/// </summary>
protected string m_osSecret = String.Empty;
protected BaseHttpServer m_httpServer; protected BaseHttpServer m_httpServer;
public BaseHttpServer HttpServer public BaseHttpServer HttpServer
@ -95,6 +100,9 @@ namespace OpenSim.Framework.Servers
{ {
m_startuptime = DateTime.Now; m_startuptime = DateTime.Now;
m_version = VersionInfo.Version; m_version = VersionInfo.Version;
// Random uuid for private data
m_osSecret = UUID.Random().ToString();
m_periodicDiagnosticsTimer.Elapsed += new ElapsedEventHandler(LogDiagnostics); m_periodicDiagnosticsTimer.Elapsed += new ElapsedEventHandler(LogDiagnostics);
m_periodicDiagnosticsTimer.Enabled = true; m_periodicDiagnosticsTimer.Enabled = true;
@ -458,12 +466,18 @@ namespace OpenSim.Framework.Servers
{ {
} }
} }
public string osSecret {
// Secret uuid for the simulator
get { return m_osSecret; }
}
public string StatReport(OSHttpRequest httpRequest) public string StatReport(OSHttpRequest httpRequest)
{ {
return m_stats.XReport((DateTime.Now - m_startuptime).ToString() , m_version ); return m_stats.XReport((DateTime.Now - m_startuptime).ToString() , m_version );
} }
protected void RemovePIDFile() protected void RemovePIDFile()
{ {
if (m_pidFile != String.Empty) if (m_pidFile != String.Empty)

View File

@ -65,6 +65,8 @@ namespace OpenSim
protected string proxyUrl; protected string proxyUrl;
protected int proxyOffset = 0; protected int proxyOffset = 0;
public string userStatsURI = String.Empty;
protected bool m_autoCreateClientStack = true; protected bool m_autoCreateClientStack = true;
@ -189,6 +191,9 @@ namespace OpenSim
string pidFile = startupConfig.GetString("PIDFile", String.Empty); string pidFile = startupConfig.GetString("PIDFile", String.Empty);
if (pidFile != String.Empty) if (pidFile != String.Empty)
CreatePIDFile(pidFile); CreatePIDFile(pidFile);
userStatsURI = startupConfig.GetString("Stats_URI", String.Empty);
} }
base.StartupSpecific(); base.StartupSpecific();
@ -508,7 +513,9 @@ namespace OpenSim
// set initial ServerURI // set initial ServerURI
regionInfo.ServerURI = "http://" + regionInfo.ExternalHostName + ":" + regionInfo.InternalEndPoint.Port; regionInfo.ServerURI = "http://" + regionInfo.ExternalHostName + ":" + regionInfo.InternalEndPoint.Port;
regionInfo.HttpPort = m_httpServerPort; regionInfo.HttpPort = m_httpServerPort;
regionInfo.osSecret = m_osSecret;
if ((proxyUrl.Length > 0) && (portadd_flag)) if ((proxyUrl.Length > 0) && (portadd_flag))
{ {
// set proxy url to RegionInfo // set proxy url to RegionInfo
@ -543,7 +550,10 @@ namespace OpenSim
scene.LoadPrimsFromStorage(regionInfo.originRegionID); scene.LoadPrimsFromStorage(regionInfo.originRegionID);
scene.StartTimer(); scene.StartTimer();
// TODO : Try setting resource for region xstats here on scene
scene.CommsManager.HttpServer.AddStreamHandler( new Region.Framework.Scenes.RegionStatsHandler(regionInfo));
// moved these here as the terrain texture has to be created after the modules are initialized // moved these here as the terrain texture has to be created after the modules are initialized
// and has to happen before the region is registered with the grid. // and has to happen before the region is registered with the grid.
scene.CreateTerrainTexture(false); scene.CreateTerrainTexture(false);
@ -813,16 +823,18 @@ namespace OpenSim
} }
/// <summary> /// <summary>
/// Handler to supply the current extended status of this sim /// Handler to supply the current extended status of this sim
/// Sends the statistical data in a json serialization
/// </summary> /// </summary>
/// Sends the statistical data in a json serialization
public class XSimStatusHandler : IStreamedRequestHandler public class XSimStatusHandler : IStreamedRequestHandler
{ {
OpenSimBase m_opensim; OpenSimBase m_opensim;
string osXStatsURI = String.Empty;
public XSimStatusHandler(OpenSimBase sim) public XSimStatusHandler(OpenSimBase sim)
{ {
m_opensim = sim; m_opensim = sim;
osXStatsURI = Util.SHA1Hash(sim.osSecret);
} }
public byte[] Handle(string path, Stream request, public byte[] Handle(string path, Stream request,
@ -842,11 +854,50 @@ namespace OpenSim
} }
public string Path public string Path
{ {
get { return "/simstatusx/"; } // This is for the OpenSim instance and is the osSecret hashed
get { return "/" + osXStatsURI + "/"; }
} }
} }
/// <summary>
/// Handler to supply the current extended status of this sim
/// Sends the statistical data in a json serialization
/// </summary>
public class UXSimStatusHandler : IStreamedRequestHandler
{
OpenSimBase m_opensim;
string osUXStatsURI = String.Empty;
public UXSimStatusHandler(OpenSimBase sim)
{
m_opensim = sim;
osUXStatsURI = sim.userStatsURI;
}
public byte[] Handle(string path, Stream request,
OSHttpRequest httpRequest, OSHttpResponse httpResponse)
{
return Encoding.UTF8.GetBytes(m_opensim.StatReport(httpRequest));
}
public string ContentType
{
get { return "text/plain"; }
}
public string HttpMethod
{
get { return "GET"; }
}
public string Path
{
// This is for the OpenSim instance and is the osSecret hashed
get { return "/" + osUXStatsURI + "/"; }
}
}
#endregion #endregion
@ -906,6 +957,7 @@ namespace OpenSim
} }
} }
public class OpenSimConfigSource public class OpenSimConfigSource
{ {
public IConfigSource Source; public IConfigSource Source;

View File

@ -0,0 +1,115 @@
/*
* 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.
*/
using System;
using System.IO;
using System.Net;
using System.Reflection;
using System.Text;
using log4net;
using Nini.Config;
using OpenMetaverse;
using OpenMetaverse.StructuredData;
using OpenSim.Framework;
using OpenSim.Framework.Communications;
using OpenSim.Framework.Communications.Services;
using OpenSim.Framework.Communications.Cache;
using OpenSim.Framework.Console;
using OpenSim.Framework.Servers;
using OpenSim.Framework.Servers.Interfaces;
using OpenSim.Framework.Statistics;
using OpenSim.Region.Framework;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
namespace OpenSim.Region.Framework.Scenes
{
public class RegionStatsHandler : IStreamedRequestHandler
{
private string osRXStatsURI = String.Empty;
private string osXStatsURI = String.Empty;
private string osSecret = String.Empty;
private OpenSim.Framework.RegionInfo regionInfo;
public string localZone = TimeZone.CurrentTimeZone.StandardName;
public TimeSpan utcOffset = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now);
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public RegionStatsHandler(OpenSim.Framework.RegionInfo region_info )
{
regionInfo = region_info;
osRXStatsURI = Util.SHA1Hash(regionInfo.regionSecret);
osXStatsURI = Util.SHA1Hash(regionInfo.osSecret);
}
public byte[] Handle(string path, Stream request, OSHttpRequest httpRequest, OSHttpResponse httpResponse)
{
return Encoding.UTF8.GetBytes(Report());
}
public string ContentType
{
get { return "text/plain"; }
}
public string HttpMethod
{
get { return "GET"; }
}
public string Path
{
// This is for the region and is the regionSecret hashed
get { return "/" + osRXStatsURI + "/"; }
}
private string Report()
{
OSDMap args = new OSDMap(30);
int time = Util.ToUnixTime( DateTime.Now );
args["OSStatsURI"] = OSD.FromString("http://" + regionInfo.ExternalHostName + ":" + regionInfo.HttpPort + "/" + osXStatsURI + "/");
args["TimeZoneName"] = OSD.FromString(localZone);
args["TimeZoneOffs"] = OSD.FromReal(utcOffset.TotalHours);
args["UxTime"] = OSD.FromInteger(Util.ToUnixTime(DateTime.Now));
args["Memory"] = OSD.FromReal(Math.Round(GC.GetTotalMemory(false) / 1024.0 / 1024.0));
args["Version"] = OSD.FromString(VersionInfo.Version);
string strBuffer = "";
strBuffer = OSDParser.SerializeJsonString(args);
return strBuffer;
}
}
}

View File

@ -255,6 +255,10 @@
; enableprejump = true ; enableprejump = true
; Simulator Stats URI
; Enable JSON simulator data by setting a URI name (case sensitive)
; Stats_URI = "jsonSimStats"
[SMTP] [SMTP]
enabled=false enabled=false