From dc5711ad6221f087b6250179ac9a6a389581058c Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 20 Nov 2012 04:10:03 +0000
Subject: minor: If logging full incoming HTTP data, don't deceptively print
... at the end of the body.
---
OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
(limited to 'OpenSim/Framework/Servers')
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
index 410a76a..66d80cf 100644
--- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
+++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
@@ -719,8 +719,11 @@ namespace OpenSim.Framework.Servers.HttpServer
if (DebugLevel == 5)
{
const int sampleLength = 80;
- char[] sampleChars = new char[sampleLength];
+ char[] sampleChars = new char[sampleLength + 3];
reader.Read(sampleChars, 0, sampleLength);
+ sampleChars[80] = '.';
+ sampleChars[81] = '.';
+ sampleChars[82] = '.';
output = new string(sampleChars);
}
else
@@ -728,7 +731,7 @@ namespace OpenSim.Framework.Servers.HttpServer
output = reader.ReadToEnd();
}
- m_log.DebugFormat("[BASE HTTP SERVER]: {0}...", output.Replace("\n", @"\n"));
+ m_log.DebugFormat("[BASE HTTP SERVER]: {0}", output.Replace("\n", @"\n"));
}
}
--
cgit v1.1
From 74a20a62eee8c565a9410d6896754242eb602abc Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 22 Nov 2012 03:43:21 +0000
Subject: refactor: Factor out copy/pasted server uptime report code
---
OpenSim/Framework/Servers/BaseOpenSimServer.cs | 29 ++-----------
OpenSim/Framework/Servers/ServerBase.cs | 58 ++++++++++++++++++++++++++
2 files changed, 62 insertions(+), 25 deletions(-)
create mode 100644 OpenSim/Framework/Servers/ServerBase.cs
(limited to 'OpenSim/Framework/Servers')
diff --git a/OpenSim/Framework/Servers/BaseOpenSimServer.cs b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
index 5b2d7dc..6346279 100644
--- a/OpenSim/Framework/Servers/BaseOpenSimServer.cs
+++ b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
@@ -38,6 +38,8 @@ using log4net;
using log4net.Appender;
using log4net.Core;
using log4net.Repository;
+using OpenMetaverse;
+using OpenMetaverse.StructuredData;
using OpenSim.Framework;
using OpenSim.Framework.Console;
using OpenSim.Framework.Monitoring;
@@ -45,16 +47,12 @@ using OpenSim.Framework.Servers;
using OpenSim.Framework.Servers.HttpServer;
using Timer=System.Timers.Timer;
-using OpenMetaverse;
-using OpenMetaverse.StructuredData;
-
-
namespace OpenSim.Framework.Servers
{
///
/// Common base for the main OpenSimServers (user, grid, inventory, region, etc)
///
- public abstract class BaseOpenSimServer
+ public abstract class BaseOpenSimServer : ServerBase
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
@@ -69,11 +67,6 @@ namespace OpenSim.Framework.Servers
protected IAppender m_logFileAppender = null;
///
- /// Time at which this server was started
- ///
- protected DateTime m_startuptime;
-
- ///
/// Record the initial startup directory for info purposes
///
protected string m_startupDirectory = Environment.CurrentDirectory;
@@ -96,9 +89,8 @@ namespace OpenSim.Framework.Servers
get { return m_httpServer; }
}
- public BaseOpenSimServer()
+ public BaseOpenSimServer() : base()
{
- m_startuptime = DateTime.Now;
m_version = VersionInfo.Version;
// Random uuid for private data
@@ -284,19 +276,6 @@ namespace OpenSim.Framework.Servers
}
///
- /// Return a report about the uptime of this server
- ///
- ///
- protected string GetUptimeReport()
- {
- StringBuilder sb = new StringBuilder(String.Format("Time now is {0}\n", DateTime.Now));
- sb.Append(String.Format("Server has been running since {0}, {1}\n", m_startuptime.DayOfWeek, m_startuptime));
- sb.Append(String.Format("That is an elapsed time of {0}\n", DateTime.Now - m_startuptime));
-
- return sb.ToString();
- }
-
- ///
/// Performs initialisation of the scene, such as loading configuration from disk.
///
public virtual void Startup()
diff --git a/OpenSim/Framework/Servers/ServerBase.cs b/OpenSim/Framework/Servers/ServerBase.cs
new file mode 100644
index 0000000..d19234b
--- /dev/null
+++ b/OpenSim/Framework/Servers/ServerBase.cs
@@ -0,0 +1,58 @@
+/*
+ * 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.Text;
+
+namespace OpenSim.Framework.Servers
+{
+ public class ServerBase
+ {
+ ///
+ /// Time at which this server was started
+ ///
+ protected DateTime m_startuptime;
+
+ public ServerBase()
+ {
+ m_startuptime = DateTime.Now;
+ }
+
+ ///
+ /// Return a report about the uptime of this server
+ ///
+ ///
+ protected string GetUptimeReport()
+ {
+ StringBuilder sb = new StringBuilder(String.Format("Time now is {0}\n", DateTime.Now));
+ sb.Append(String.Format("Server has been running since {0}, {1}\n", m_startuptime.DayOfWeek, m_startuptime));
+ sb.Append(String.Format("That is an elapsed time of {0}\n", DateTime.Now - m_startuptime));
+
+ return sb.ToString();
+ }
+ }
+}
\ No newline at end of file
--
cgit v1.1
From 5c48d7a378ff066f59b9cee02f2803ebe1616481 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 22 Nov 2012 04:05:09 +0000
Subject: factor out common HandleShow code for "show uptime"
---
OpenSim/Framework/Servers/BaseOpenSimServer.cs | 39 +++-----------------
OpenSim/Framework/Servers/ServerBase.cs | 50 ++++++++++++++++++++++++++
2 files changed, 55 insertions(+), 34 deletions(-)
(limited to 'OpenSim/Framework/Servers')
diff --git a/OpenSim/Framework/Servers/BaseOpenSimServer.cs b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
index 6346279..4f9ac08 100644
--- a/OpenSim/Framework/Servers/BaseOpenSimServer.cs
+++ b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
@@ -62,7 +62,6 @@ namespace OpenSim.Framework.Servers
///
private Timer m_periodicDiagnosticsTimer = new Timer(60 * 60 * 1000);
- protected CommandConsole m_console;
protected OpenSimAppender m_consoleAppender;
protected IAppender m_logFileAppender = null;
@@ -139,7 +138,8 @@ namespace OpenSim.Framework.Servers
}
else
{
- m_consoleAppender.Console = m_console;
+ // FIXME: This should be done through an interface rather than casting.
+ m_consoleAppender.Console = (ConsoleBase)m_console;
// If there is no threshold set then the threshold is effectively everything.
if (null == m_consoleAppender.Threshold)
@@ -367,8 +367,10 @@ namespace OpenSim.Framework.Servers
}
}
- public virtual void HandleShow(string module, string[] cmd)
+ public override void HandleShow(string module, string[] cmd)
{
+ base.HandleShow(module, cmd);
+
List args = new List(cmd);
args.RemoveAt(0);
@@ -385,10 +387,6 @@ namespace OpenSim.Framework.Servers
Notice(GetThreadsReport());
break;
- case "uptime":
- Notice(GetUptimeReport());
- break;
-
case "version":
Notice(GetVersionText());
break;
@@ -430,33 +428,6 @@ namespace OpenSim.Framework.Servers
}
///
- /// Console output is only possible if a console has been established.
- /// That is something that cannot be determined within this class. So
- /// all attempts to use the console MUST be verified.
- ///
- ///
- protected void Notice(string msg)
- {
- if (m_console != null)
- {
- m_console.Output(msg);
- }
- }
-
- ///
- /// Console output is only possible if a console has been established.
- /// That is something that cannot be determined within this class. So
- /// all attempts to use the console MUST be verified.
- ///
- ///
- ///
- protected void Notice(string format, params string[] components)
- {
- if (m_console != null)
- m_console.OutputFormat(format, components);
- }
-
- ///
/// Enhance the version string with extra information if it's available.
///
protected void EnhanceVersionInformation()
diff --git a/OpenSim/Framework/Servers/ServerBase.cs b/OpenSim/Framework/Servers/ServerBase.cs
index d19234b..afe1f73 100644
--- a/OpenSim/Framework/Servers/ServerBase.cs
+++ b/OpenSim/Framework/Servers/ServerBase.cs
@@ -26,13 +26,20 @@
*/
using System;
+using System.Collections.Generic;
using System.Text;
+using OpenSim.Framework.Console;
namespace OpenSim.Framework.Servers
{
public class ServerBase
{
///
+ /// Console to be used for any command line output. Can be null, in which case there should be no output.
+ ///
+ protected ICommandConsole m_console;
+
+ ///
/// Time at which this server was started
///
protected DateTime m_startuptime;
@@ -42,6 +49,22 @@ namespace OpenSim.Framework.Servers
m_startuptime = DateTime.Now;
}
+ public virtual void HandleShow(string module, string[] cmd)
+ {
+ List args = new List(cmd);
+
+ args.RemoveAt(0);
+
+ string[] showParams = args.ToArray();
+
+ switch (showParams[0])
+ {
+ case "uptime":
+ Notice(GetUptimeReport());
+ break;
+ }
+ }
+
///
/// Return a report about the uptime of this server
///
@@ -54,5 +77,32 @@ namespace OpenSim.Framework.Servers
return sb.ToString();
}
+
+ ///
+ /// Console output is only possible if a console has been established.
+ /// That is something that cannot be determined within this class. So
+ /// all attempts to use the console MUST be verified.
+ ///
+ ///
+ protected void Notice(string msg)
+ {
+ if (m_console != null)
+ {
+ m_console.Output(msg);
+ }
+ }
+
+ ///
+ /// Console output is only possible if a console has been established.
+ /// That is something that cannot be determined within this class. So
+ /// all attempts to use the console MUST be verified.
+ ///
+ ///
+ ///
+ protected void Notice(string format, params string[] components)
+ {
+ if (m_console != null)
+ m_console.OutputFormat(format, components);
+ }
}
}
\ No newline at end of file
--
cgit v1.1
From cf03d6ea9223e71c27ca91633a30abcf1368ec58 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 22 Nov 2012 04:11:03 +0000
Subject: Factor out common registration of "show uptime" command
---
OpenSim/Framework/Servers/BaseOpenSimServer.cs | 130 ++++++++++++-------------
OpenSim/Framework/Servers/ServerBase.cs | 12 +++
2 files changed, 76 insertions(+), 66 deletions(-)
(limited to 'OpenSim/Framework/Servers')
diff --git a/OpenSim/Framework/Servers/BaseOpenSimServer.cs b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
index 4f9ac08..019b68b 100644
--- a/OpenSim/Framework/Servers/BaseOpenSimServer.cs
+++ b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
@@ -118,78 +118,76 @@ namespace OpenSim.Framework.Servers
///
protected virtual void StartupSpecific()
{
- if (m_console != null)
- {
- ILoggerRepository repository = LogManager.GetRepository();
- IAppender[] appenders = repository.GetAppenders();
+ if (m_console == null)
+ return;
- foreach (IAppender appender in appenders)
- {
- if (appender.Name == "Console")
- {
- m_consoleAppender = (OpenSimAppender)appender;
- break;
- }
- }
+ ILoggerRepository repository = LogManager.GetRepository();
+ IAppender[] appenders = repository.GetAppenders();
- if (null == m_consoleAppender)
- {
- Notice("No appender named Console found (see the log4net config file for this executable)!");
- }
- else
+ foreach (IAppender appender in appenders)
+ {
+ if (appender.Name == "Console")
{
- // FIXME: This should be done through an interface rather than casting.
- m_consoleAppender.Console = (ConsoleBase)m_console;
-
- // If there is no threshold set then the threshold is effectively everything.
- if (null == m_consoleAppender.Threshold)
- m_consoleAppender.Threshold = Level.All;
-
- Notice(String.Format("Console log level is {0}", m_consoleAppender.Threshold));
+ m_consoleAppender = (OpenSimAppender)appender;
+ break;
}
+ }
+
+ if (null == m_consoleAppender)
+ {
+ Notice("No appender named Console found (see the log4net config file for this executable)!");
+ }
+ else
+ {
+ // FIXME: This should be done through an interface rather than casting.
+ m_consoleAppender.Console = (ConsoleBase)m_console;
- m_console.Commands.AddCommand("General", false, "quit",
- "quit",
- "Quit the application", HandleQuit);
-
- m_console.Commands.AddCommand("General", false, "shutdown",
- "shutdown",
- "Quit the application", HandleQuit);
-
- m_console.Commands.AddCommand("General", false, "set log level",
- "set log level ",
- "Set the console logging level", HandleLogLevel);
-
- m_console.Commands.AddCommand("General", false, "show info",
- "show info",
- "Show general information about the server", HandleShow);
-
- m_console.Commands.AddCommand("General", false, "show threads",
- "show threads",
- "Show thread status", HandleShow);
-
- m_console.Commands.AddCommand("General", false, "show uptime",
- "show uptime",
- "Show server uptime", HandleShow);
-
- m_console.Commands.AddCommand("General", false, "show version",
- "show version",
- "Show server version", HandleShow);
-
- m_console.Commands.AddCommand("General", false, "threads abort",
- "threads abort ",
- "Abort a managed thread. Use \"show threads\" to find possible threads.", HandleThreadsAbort);
-
- m_console.Commands.AddCommand("General", false, "threads show",
- "threads show",
- "Show thread status. Synonym for \"show threads\"",
- (string module, string[] args) => Notice(GetThreadsReport()));
-
- m_console.Commands.AddCommand("General", false, "force gc",
- "force gc",
- "Manually invoke runtime garbage collection. For debugging purposes",
- HandleForceGc);
+ // If there is no threshold set then the threshold is effectively everything.
+ if (null == m_consoleAppender.Threshold)
+ m_consoleAppender.Threshold = Level.All;
+
+ Notice(String.Format("Console log level is {0}", m_consoleAppender.Threshold));
}
+
+ RegisterCommonCommands();
+
+ m_console.Commands.AddCommand("General", false, "quit",
+ "quit",
+ "Quit the application", HandleQuit);
+
+ m_console.Commands.AddCommand("General", false, "shutdown",
+ "shutdown",
+ "Quit the application", HandleQuit);
+
+ m_console.Commands.AddCommand("General", false, "set log level",
+ "set log level ",
+ "Set the console logging level", HandleLogLevel);
+
+ m_console.Commands.AddCommand("General", false, "show info",
+ "show info",
+ "Show general information about the server", HandleShow);
+
+ m_console.Commands.AddCommand("General", false, "show threads",
+ "show threads",
+ "Show thread status", HandleShow);
+
+ m_console.Commands.AddCommand("General", false, "show version",
+ "show version",
+ "Show server version", HandleShow);
+
+ m_console.Commands.AddCommand("General", false, "threads abort",
+ "threads abort ",
+ "Abort a managed thread. Use \"show threads\" to find possible threads.", HandleThreadsAbort);
+
+ m_console.Commands.AddCommand("General", false, "threads show",
+ "threads show",
+ "Show thread status. Synonym for \"show threads\"",
+ (string module, string[] args) => Notice(GetThreadsReport()));
+
+ m_console.Commands.AddCommand("General", false, "force gc",
+ "force gc",
+ "Manually invoke runtime garbage collection. For debugging purposes",
+ HandleForceGc);
}
private void HandleForceGc(string module, string[] args)
diff --git a/OpenSim/Framework/Servers/ServerBase.cs b/OpenSim/Framework/Servers/ServerBase.cs
index afe1f73..0835aad 100644
--- a/OpenSim/Framework/Servers/ServerBase.cs
+++ b/OpenSim/Framework/Servers/ServerBase.cs
@@ -49,6 +49,18 @@ namespace OpenSim.Framework.Servers
m_startuptime = DateTime.Now;
}
+ ///
+ /// Register common commands once m_console has been set if it is going to be set
+ ///
+ public void RegisterCommonCommands()
+ {
+ if (m_console == null)
+ return;
+
+ m_console.Commands.AddCommand(
+ "General", false, "show uptime", "show uptime", "Show server uptime", HandleShow);
+ }
+
public virtual void HandleShow(string module, string[] cmd)
{
List args = new List(cmd);
--
cgit v1.1
From 45d1e6ab09309e21f96979548b5d1b4904800f65 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 22 Nov 2012 04:45:53 +0000
Subject: Make "show info" command available across all servers
This helpfully lists version information, startup location and console log level
---
OpenSim/Framework/Servers/BaseOpenSimServer.cs | 178 +-----------------------
OpenSim/Framework/Servers/ServerBase.cs | 184 ++++++++++++++++++++++++-
2 files changed, 183 insertions(+), 179 deletions(-)
(limited to 'OpenSim/Framework/Servers')
diff --git a/OpenSim/Framework/Servers/BaseOpenSimServer.cs b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
index 019b68b..9560171 100644
--- a/OpenSim/Framework/Servers/BaseOpenSimServer.cs
+++ b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
@@ -62,19 +62,6 @@ namespace OpenSim.Framework.Servers
///
private Timer m_periodicDiagnosticsTimer = new Timer(60 * 60 * 1000);
- protected OpenSimAppender m_consoleAppender;
- protected IAppender m_logFileAppender = null;
-
- ///
- /// Record the initial startup directory for info purposes
- ///
- protected string m_startupDirectory = Environment.CurrentDirectory;
-
- ///
- /// Server version information. Usually VersionInfo + information about git commit, operating system, etc.
- ///
- protected string m_version;
-
protected string m_pidFile = String.Empty;
///
@@ -90,27 +77,11 @@ namespace OpenSim.Framework.Servers
public BaseOpenSimServer() : base()
{
- m_version = VersionInfo.Version;
-
// Random uuid for private data
m_osSecret = UUID.Random().ToString();
m_periodicDiagnosticsTimer.Elapsed += new ElapsedEventHandler(LogDiagnostics);
m_periodicDiagnosticsTimer.Enabled = true;
-
- // This thread will go on to become the console listening thread
- Thread.CurrentThread.Name = "ConsoleThread";
-
- ILoggerRepository repository = LogManager.GetRepository();
- IAppender[] appenders = repository.GetAppenders();
-
- foreach (IAppender appender in appenders)
- {
- if (appender.Name == "LogFileAppender")
- {
- m_logFileAppender = appender;
- }
- }
}
///
@@ -121,34 +92,6 @@ namespace OpenSim.Framework.Servers
if (m_console == null)
return;
- ILoggerRepository repository = LogManager.GetRepository();
- IAppender[] appenders = repository.GetAppenders();
-
- foreach (IAppender appender in appenders)
- {
- if (appender.Name == "Console")
- {
- m_consoleAppender = (OpenSimAppender)appender;
- break;
- }
- }
-
- if (null == m_consoleAppender)
- {
- Notice("No appender named Console found (see the log4net config file for this executable)!");
- }
- else
- {
- // FIXME: This should be done through an interface rather than casting.
- m_consoleAppender.Console = (ConsoleBase)m_console;
-
- // If there is no threshold set then the threshold is effectively everything.
- if (null == m_consoleAppender.Threshold)
- m_consoleAppender.Threshold = Level.All;
-
- Notice(String.Format("Console log level is {0}", m_consoleAppender.Threshold));
- }
-
RegisterCommonCommands();
m_console.Commands.AddCommand("General", false, "quit",
@@ -163,10 +106,6 @@ namespace OpenSim.Framework.Servers
"set log level ",
"Set the console logging level", HandleLogLevel);
- m_console.Commands.AddCommand("General", false, "show info",
- "show info",
- "Show general information about the server", HandleShow);
-
m_console.Commands.AddCommand("General", false, "show threads",
"show threads",
"Show thread status", HandleShow);
@@ -279,8 +218,6 @@ namespace OpenSim.Framework.Servers
public virtual void Startup()
{
m_log.Info("[STARTUP]: Beginning startup processing");
-
- EnhanceVersionInformation();
m_log.Info("[STARTUP]: OpenSimulator version: " + m_version + Environment.NewLine);
// clr version potentially is more confusing than helpful, since it doesn't tell us if we're running under Mono/MS .NET and
@@ -377,10 +314,6 @@ namespace OpenSim.Framework.Servers
switch (showParams[0])
{
- case "info":
- ShowInfo();
- break;
-
case "threads":
Notice(GetThreadsReport());
break;
@@ -410,116 +343,7 @@ namespace OpenSim.Framework.Servers
MainConsole.Instance.OutputFormat("Aborted thread with id {0}", threadId);
else
MainConsole.Instance.OutputFormat("ERROR - Thread with id {0} not found in managed threads", threadId);
- }
-
- protected void ShowInfo()
- {
- Notice(GetVersionText());
- Notice("Startup directory: " + m_startupDirectory);
- if (null != m_consoleAppender)
- Notice(String.Format("Console log level: {0}", m_consoleAppender.Threshold));
- }
-
- protected string GetVersionText()
- {
- return String.Format("Version: {0} (interface version {1})", m_version, VersionInfo.MajorInterfaceVersion);
- }
-
- ///
- /// Enhance the version string with extra information if it's available.
- ///
- protected void EnhanceVersionInformation()
- {
- string buildVersion = string.Empty;
-
- // The subversion information is deprecated and will be removed at a later date
- // Add subversion revision information if available
- // Try file "svn_revision" in the current directory first, then the .svn info.
- // This allows to make the revision available in simulators not running from the source tree.
- // FIXME: Making an assumption about the directory we're currently in - we do this all over the place
- // elsewhere as well
- string gitDir = "../.git/";
- string gitRefPointerPath = gitDir + "HEAD";
-
- string svnRevisionFileName = "svn_revision";
- string svnFileName = ".svn/entries";
- string manualVersionFileName = ".version";
- string inputLine;
- int strcmp;
-
- if (File.Exists(manualVersionFileName))
- {
- using (StreamReader CommitFile = File.OpenText(manualVersionFileName))
- buildVersion = CommitFile.ReadLine();
-
- m_version += buildVersion ?? "";
- }
- else if (File.Exists(gitRefPointerPath))
- {
-// m_log.DebugFormat("[OPENSIM]: Found {0}", gitRefPointerPath);
-
- string rawPointer = "";
-
- using (StreamReader pointerFile = File.OpenText(gitRefPointerPath))
- rawPointer = pointerFile.ReadLine();
-
-// m_log.DebugFormat("[OPENSIM]: rawPointer [{0}]", rawPointer);
-
- Match m = Regex.Match(rawPointer, "^ref: (.+)$");
-
- if (m.Success)
- {
-// m_log.DebugFormat("[OPENSIM]: Matched [{0}]", m.Groups[1].Value);
-
- string gitRef = m.Groups[1].Value;
- string gitRefPath = gitDir + gitRef;
- if (File.Exists(gitRefPath))
- {
-// m_log.DebugFormat("[OPENSIM]: Found gitRefPath [{0}]", gitRefPath);
-
- using (StreamReader refFile = File.OpenText(gitRefPath))
- {
- string gitHash = refFile.ReadLine();
- m_version += gitHash.Substring(0, 7);
- }
- }
- }
- }
- else
- {
- // Remove the else logic when subversion mirror is no longer used
- if (File.Exists(svnRevisionFileName))
- {
- StreamReader RevisionFile = File.OpenText(svnRevisionFileName);
- buildVersion = RevisionFile.ReadLine();
- buildVersion.Trim();
- RevisionFile.Close();
- }
-
- if (string.IsNullOrEmpty(buildVersion) && File.Exists(svnFileName))
- {
- StreamReader EntriesFile = File.OpenText(svnFileName);
- inputLine = EntriesFile.ReadLine();
- while (inputLine != null)
- {
- // using the dir svn revision at the top of entries file
- strcmp = String.Compare(inputLine, "dir");
- if (strcmp == 0)
- {
- buildVersion = EntriesFile.ReadLine();
- break;
- }
- else
- {
- inputLine = EntriesFile.ReadLine();
- }
- }
- EntriesFile.Close();
- }
-
- m_version += string.IsNullOrEmpty(buildVersion) ? " " : ("." + buildVersion + " ").Substring(0, 6);
- }
- }
+ }
protected void CreatePIDFile(string path)
{
diff --git a/OpenSim/Framework/Servers/ServerBase.cs b/OpenSim/Framework/Servers/ServerBase.cs
index 0835aad..129b5fa 100644
--- a/OpenSim/Framework/Servers/ServerBase.cs
+++ b/OpenSim/Framework/Servers/ServerBase.cs
@@ -27,26 +27,90 @@
using System;
using System.Collections.Generic;
+using System.IO;
+using System.Reflection;
using System.Text;
+using System.Text.RegularExpressions;
+using log4net;
+using log4net.Appender;
+using log4net.Core;
+using log4net.Repository;
+using Nini.Config;
using OpenSim.Framework.Console;
namespace OpenSim.Framework.Servers
{
public class ServerBase
{
+ private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+
///
/// Console to be used for any command line output. Can be null, in which case there should be no output.
///
protected ICommandConsole m_console;
+ protected OpenSimAppender m_consoleAppender;
+ protected FileAppender m_logFileAppender;
+
+ protected DateTime m_startuptime;
+ protected string m_startupDirectory = Environment.CurrentDirectory;
+
///
- /// Time at which this server was started
+ /// Server version information. Usually VersionInfo + information about git commit, operating system, etc.
///
- protected DateTime m_startuptime;
+ protected string m_version;
public ServerBase()
{
m_startuptime = DateTime.Now;
+ m_version = VersionInfo.Version;
+ EnhanceVersionInformation();
+ }
+
+ public void RegisterCommonAppenders(IConfig startupConfig)
+ {
+ ILoggerRepository repository = LogManager.GetRepository();
+ IAppender[] appenders = repository.GetAppenders();
+
+ foreach (IAppender appender in appenders)
+ {
+ if (appender.Name == "Console")
+ {
+ m_consoleAppender = (OpenSimAppender)appender;
+ }
+ else if (appender.Name == "LogFileAppender")
+ {
+ m_logFileAppender = (FileAppender)appender;
+ }
+ }
+
+ if (null == m_consoleAppender)
+ {
+ Notice("No appender named Console found (see the log4net config file for this executable)!");
+ }
+ else
+ {
+ // FIXME: This should be done through an interface rather than casting.
+ m_consoleAppender.Console = (ConsoleBase)m_console;
+
+ // If there is no threshold set then the threshold is effectively everything.
+ if (null == m_consoleAppender.Threshold)
+ m_consoleAppender.Threshold = Level.All;
+
+ Notice(String.Format("Console log level is {0}", m_consoleAppender.Threshold));
+ }
+
+ if (m_logFileAppender != null && startupConfig != null)
+ {
+ string cfgFileName = startupConfig.GetString("LogFile", null);
+ if (cfgFileName != null)
+ {
+ m_logFileAppender.File = cfgFileName;
+ m_logFileAppender.ActivateOptions();
+ }
+
+ m_log.InfoFormat("[LOGGING]: Logging started to file {0}", m_logFileAppender.File);
+ }
}
///
@@ -58,6 +122,9 @@ namespace OpenSim.Framework.Servers
return;
m_console.Commands.AddCommand(
+ "General", false, "show info", "show info", "Show general information about the server", HandleShow);
+
+ m_console.Commands.AddCommand(
"General", false, "show uptime", "show uptime", "Show server uptime", HandleShow);
}
@@ -71,6 +138,10 @@ namespace OpenSim.Framework.Servers
switch (showParams[0])
{
+ case "info":
+ ShowInfo();
+ break;
+
case "uptime":
Notice(GetUptimeReport());
break;
@@ -90,6 +161,115 @@ namespace OpenSim.Framework.Servers
return sb.ToString();
}
+ protected void ShowInfo()
+ {
+ Notice(GetVersionText());
+ Notice("Startup directory: " + m_startupDirectory);
+ if (null != m_consoleAppender)
+ Notice(String.Format("Console log level: {0}", m_consoleAppender.Threshold));
+ }
+
+ ///
+ /// Enhance the version string with extra information if it's available.
+ ///
+ protected void EnhanceVersionInformation()
+ {
+ string buildVersion = string.Empty;
+
+ // The subversion information is deprecated and will be removed at a later date
+ // Add subversion revision information if available
+ // Try file "svn_revision" in the current directory first, then the .svn info.
+ // This allows to make the revision available in simulators not running from the source tree.
+ // FIXME: Making an assumption about the directory we're currently in - we do this all over the place
+ // elsewhere as well
+ string gitDir = "../.git/";
+ string gitRefPointerPath = gitDir + "HEAD";
+
+ string svnRevisionFileName = "svn_revision";
+ string svnFileName = ".svn/entries";
+ string manualVersionFileName = ".version";
+ string inputLine;
+ int strcmp;
+
+ if (File.Exists(manualVersionFileName))
+ {
+ using (StreamReader CommitFile = File.OpenText(manualVersionFileName))
+ buildVersion = CommitFile.ReadLine();
+
+ m_version += buildVersion ?? "";
+ }
+ else if (File.Exists(gitRefPointerPath))
+ {
+// m_log.DebugFormat("[OPENSIM]: Found {0}", gitRefPointerPath);
+
+ string rawPointer = "";
+
+ using (StreamReader pointerFile = File.OpenText(gitRefPointerPath))
+ rawPointer = pointerFile.ReadLine();
+
+// m_log.DebugFormat("[OPENSIM]: rawPointer [{0}]", rawPointer);
+
+ Match m = Regex.Match(rawPointer, "^ref: (.+)$");
+
+ if (m.Success)
+ {
+// m_log.DebugFormat("[OPENSIM]: Matched [{0}]", m.Groups[1].Value);
+
+ string gitRef = m.Groups[1].Value;
+ string gitRefPath = gitDir + gitRef;
+ if (File.Exists(gitRefPath))
+ {
+// m_log.DebugFormat("[OPENSIM]: Found gitRefPath [{0}]", gitRefPath);
+
+ using (StreamReader refFile = File.OpenText(gitRefPath))
+ {
+ string gitHash = refFile.ReadLine();
+ m_version += gitHash.Substring(0, 7);
+ }
+ }
+ }
+ }
+ else
+ {
+ // Remove the else logic when subversion mirror is no longer used
+ if (File.Exists(svnRevisionFileName))
+ {
+ StreamReader RevisionFile = File.OpenText(svnRevisionFileName);
+ buildVersion = RevisionFile.ReadLine();
+ buildVersion.Trim();
+ RevisionFile.Close();
+ }
+
+ if (string.IsNullOrEmpty(buildVersion) && File.Exists(svnFileName))
+ {
+ StreamReader EntriesFile = File.OpenText(svnFileName);
+ inputLine = EntriesFile.ReadLine();
+ while (inputLine != null)
+ {
+ // using the dir svn revision at the top of entries file
+ strcmp = String.Compare(inputLine, "dir");
+ if (strcmp == 0)
+ {
+ buildVersion = EntriesFile.ReadLine();
+ break;
+ }
+ else
+ {
+ inputLine = EntriesFile.ReadLine();
+ }
+ }
+ EntriesFile.Close();
+ }
+
+ m_version += string.IsNullOrEmpty(buildVersion) ? " " : ("." + buildVersion + " ").Substring(0, 6);
+ }
+ }
+
+ protected string GetVersionText()
+ {
+ return String.Format("Version: {0} (interface version {1})", m_version, VersionInfo.MajorInterfaceVersion);
+ }
+
///
/// Console output is only possible if a console has been established.
/// That is something that cannot be determined within this class. So
--
cgit v1.1
From 4c4379b50f22a40f6178e37259afc2689a0f2dd1 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 22 Nov 2012 04:50:09 +0000
Subject: Make "set log level" command available across all servers
---
OpenSim/Framework/Servers/BaseOpenSimServer.cs | 31 --------------------------
OpenSim/Framework/Servers/ServerBase.cs | 31 ++++++++++++++++++++++++++
2 files changed, 31 insertions(+), 31 deletions(-)
(limited to 'OpenSim/Framework/Servers')
diff --git a/OpenSim/Framework/Servers/BaseOpenSimServer.cs b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
index 9560171..5e898ef 100644
--- a/OpenSim/Framework/Servers/BaseOpenSimServer.cs
+++ b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
@@ -102,10 +102,6 @@ namespace OpenSim.Framework.Servers
"shutdown",
"Quit the application", HandleQuit);
- m_console.Commands.AddCommand("General", false, "set log level",
- "set log level ",
- "Set the console logging level", HandleLogLevel);
-
m_console.Commands.AddCommand("General", false, "show threads",
"show threads",
"Show thread status", HandleShow);
@@ -254,33 +250,6 @@ namespace OpenSim.Framework.Servers
Shutdown();
}
- private void HandleLogLevel(string module, string[] cmd)
- {
- if (null == m_consoleAppender)
- {
- Notice("No appender named Console found (see the log4net config file for this executable)!");
- return;
- }
-
- if (cmd.Length > 3)
- {
- string rawLevel = cmd[3];
-
- ILoggerRepository repository = LogManager.GetRepository();
- Level consoleLevel = repository.LevelMap[rawLevel];
-
- if (consoleLevel != null)
- m_consoleAppender.Threshold = consoleLevel;
- else
- Notice(
- String.Format(
- "{0} is not a valid logging level. Valid logging levels are ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF",
- rawLevel));
- }
-
- Notice(String.Format("Console log level is {0}", m_consoleAppender.Threshold));
- }
-
///
/// Show help information
///
diff --git a/OpenSim/Framework/Servers/ServerBase.cs b/OpenSim/Framework/Servers/ServerBase.cs
index 129b5fa..feffe6d 100644
--- a/OpenSim/Framework/Servers/ServerBase.cs
+++ b/OpenSim/Framework/Servers/ServerBase.cs
@@ -126,6 +126,10 @@ namespace OpenSim.Framework.Servers
m_console.Commands.AddCommand(
"General", false, "show uptime", "show uptime", "Show server uptime", HandleShow);
+
+ m_console.Commands.AddCommand(
+ "General", false, "set log level", "set log level ", "Set the console logging level",
+ HandleLogLevel);
}
public virtual void HandleShow(string module, string[] cmd)
@@ -148,6 +152,33 @@ namespace OpenSim.Framework.Servers
}
}
+ private void HandleLogLevel(string module, string[] cmd)
+ {
+ if (null == m_consoleAppender)
+ {
+ Notice("No appender named Console found (see the log4net config file for this executable)!");
+ return;
+ }
+
+ if (cmd.Length > 3)
+ {
+ string rawLevel = cmd[3];
+
+ ILoggerRepository repository = LogManager.GetRepository();
+ Level consoleLevel = repository.LevelMap[rawLevel];
+
+ if (consoleLevel != null)
+ m_consoleAppender.Threshold = consoleLevel;
+ else
+ Notice(
+ String.Format(
+ "{0} is not a valid logging level. Valid logging levels are ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF",
+ rawLevel));
+ }
+
+ Notice(String.Format("Console log level is {0}", m_consoleAppender.Threshold));
+ }
+
///
/// Return a report about the uptime of this server
///
--
cgit v1.1
From 34ff96a1196e8680fe3bbb60b870ab149979dd90 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 22 Nov 2012 04:52:29 +0000
Subject: Remove unused BaseOpenSimServer.ShowHelp()
---
OpenSim/Framework/Servers/BaseOpenSimServer.cs | 21 ---------------------
1 file changed, 21 deletions(-)
(limited to 'OpenSim/Framework/Servers')
diff --git a/OpenSim/Framework/Servers/BaseOpenSimServer.cs b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
index 5e898ef..8bdda29 100644
--- a/OpenSim/Framework/Servers/BaseOpenSimServer.cs
+++ b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
@@ -250,27 +250,6 @@ namespace OpenSim.Framework.Servers
Shutdown();
}
- ///
- /// Show help information
- ///
- ///
- protected virtual void ShowHelp(string[] helpArgs)
- {
- Notice("");
-
- if (helpArgs.Length == 0)
- {
- Notice("set log level [level] - change the console logging level only. For example, off or debug.");
- Notice("show info - show server information (e.g. startup path).");
- Notice("show threads - list tracked threads");
- Notice("show uptime - show server startup time and uptime.");
- Notice("show version - show server version.");
- Notice("");
-
- return;
- }
- }
-
public override void HandleShow(string module, string[] cmd)
{
base.HandleShow(module, cmd);
--
cgit v1.1
From 42e87a6582c5880caf7bdee49450e6f27ddf82bf Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 22 Nov 2012 04:57:45 +0000
Subject: Add "get log level" command - this returns the current server session
console logging level.
This supersedes getting information by calling "set log level" without a 4th argument, which is confusing.
---
OpenSim/Framework/Servers/ServerBase.cs | 50 ++++++++++++++++++++-------------
1 file changed, 31 insertions(+), 19 deletions(-)
(limited to 'OpenSim/Framework/Servers')
diff --git a/OpenSim/Framework/Servers/ServerBase.cs b/OpenSim/Framework/Servers/ServerBase.cs
index feffe6d..9973a2d 100644
--- a/OpenSim/Framework/Servers/ServerBase.cs
+++ b/OpenSim/Framework/Servers/ServerBase.cs
@@ -128,8 +128,12 @@ namespace OpenSim.Framework.Servers
"General", false, "show uptime", "show uptime", "Show server uptime", HandleShow);
m_console.Commands.AddCommand(
- "General", false, "set log level", "set log level ", "Set the console logging level",
- HandleLogLevel);
+ "General", false, "get log level", "get log level", "Get the current console logging level",
+ (mod, cmd) => ShowLogLevel());
+
+ m_console.Commands.AddCommand(
+ "General", false, "set log level", "set log level ",
+ "Set the console logging level for this session.", HandleSetLogLevel);
}
public virtual void HandleShow(string module, string[] cmd)
@@ -152,30 +156,38 @@ namespace OpenSim.Framework.Servers
}
}
- private void HandleLogLevel(string module, string[] cmd)
+ private void HandleSetLogLevel(string module, string[] cmd)
{
- if (null == m_consoleAppender)
+ if (cmd.Length != 4)
{
- Notice("No appender named Console found (see the log4net config file for this executable)!");
+ Notice("Usage: set log level ");
return;
}
-
- if (cmd.Length > 3)
+
+ if (null == m_consoleAppender)
{
- string rawLevel = cmd[3];
-
- ILoggerRepository repository = LogManager.GetRepository();
- Level consoleLevel = repository.LevelMap[rawLevel];
-
- if (consoleLevel != null)
- m_consoleAppender.Threshold = consoleLevel;
- else
- Notice(
- String.Format(
- "{0} is not a valid logging level. Valid logging levels are ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF",
- rawLevel));
+ Notice("No appender named Console found (see the log4net config file for this executable)!");
+ return;
}
+ string rawLevel = cmd[3];
+
+ ILoggerRepository repository = LogManager.GetRepository();
+ Level consoleLevel = repository.LevelMap[rawLevel];
+
+ if (consoleLevel != null)
+ m_consoleAppender.Threshold = consoleLevel;
+ else
+ Notice(
+ String.Format(
+ "{0} is not a valid logging level. Valid logging levels are ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF",
+ rawLevel));
+
+ ShowLogLevel();
+ }
+
+ private void ShowLogLevel()
+ {
Notice(String.Format("Console log level is {0}", m_consoleAppender.Threshold));
}
--
cgit v1.1
From 8269d2b893af47ad44e66a7918d472086adaddbb Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 22 Nov 2012 05:14:08 +0000
Subject: Factor out common pid file creation and removal code.
Log path at which pid file is created or reason for failure to create.
---
OpenSim/Framework/Servers/BaseOpenSimServer.cs | 36 +-----------------
OpenSim/Framework/Servers/ServerBase.cs | 51 +++++++++++++++++++++++---
2 files changed, 47 insertions(+), 40 deletions(-)
(limited to 'OpenSim/Framework/Servers')
diff --git a/OpenSim/Framework/Servers/BaseOpenSimServer.cs b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
index 8bdda29..89d3507 100644
--- a/OpenSim/Framework/Servers/BaseOpenSimServer.cs
+++ b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
@@ -61,8 +61,6 @@ namespace OpenSim.Framework.Servers
/// server.
///
private Timer m_periodicDiagnosticsTimer = new Timer(60 * 60 * 1000);
-
- protected string m_pidFile = String.Empty;
///
/// Random uuid for private data
@@ -293,23 +291,6 @@ namespace OpenSim.Framework.Servers
MainConsole.Instance.OutputFormat("ERROR - Thread with id {0} not found in managed threads", threadId);
}
- protected void CreatePIDFile(string path)
- {
- try
- {
- string pidstring = System.Diagnostics.Process.GetCurrentProcess().Id.ToString();
- FileStream fs = File.Create(path);
-
- Byte[] buf = Encoding.ASCII.GetBytes(pidstring);
- fs.Write(buf, 0, buf.Length);
- fs.Close();
- m_pidFile = path;
- }
- catch (Exception)
- {
- }
- }
-
public string osSecret {
// Secret uuid for the simulator
get { return m_osSecret; }
@@ -327,20 +308,5 @@ namespace OpenSim.Framework.Servers
return StatsManager.SimExtraStats.XReport((DateTime.Now - m_startuptime).ToString() , m_version);
}
}
-
- protected void RemovePIDFile()
- {
- if (m_pidFile != String.Empty)
- {
- try
- {
- File.Delete(m_pidFile);
- m_pidFile = String.Empty;
- }
- catch (Exception)
- {
- }
- }
- }
}
-}
+}
\ No newline at end of file
diff --git a/OpenSim/Framework/Servers/ServerBase.cs b/OpenSim/Framework/Servers/ServerBase.cs
index 9973a2d..645b43a 100644
--- a/OpenSim/Framework/Servers/ServerBase.cs
+++ b/OpenSim/Framework/Servers/ServerBase.cs
@@ -55,6 +55,8 @@ namespace OpenSim.Framework.Servers
protected DateTime m_startuptime;
protected string m_startupDirectory = Environment.CurrentDirectory;
+ protected string m_pidFile = String.Empty;
+
///
/// Server version information. Usually VersionInfo + information about git commit, operating system, etc.
///
@@ -67,6 +69,45 @@ namespace OpenSim.Framework.Servers
EnhanceVersionInformation();
}
+ protected void CreatePIDFile(string path)
+ {
+ try
+ {
+ string pidstring = System.Diagnostics.Process.GetCurrentProcess().Id.ToString();
+
+ using (FileStream fs = File.Create(path))
+ {
+ Byte[] buf = Encoding.ASCII.GetBytes(pidstring);
+ fs.Write(buf, 0, buf.Length);
+ }
+
+ m_pidFile = path;
+
+ m_log.InfoFormat("[SERVER BASE]: Created pid file {0}", m_pidFile);
+ }
+ catch (Exception e)
+ {
+ m_log.Warn(string.Format("[SERVER BASE]: Could not create PID file at {0} ", path), e);
+ }
+ }
+
+ protected void RemovePIDFile()
+ {
+ if (m_pidFile != String.Empty)
+ {
+ try
+ {
+ File.Delete(m_pidFile);
+ }
+ catch (Exception e)
+ {
+ m_log.Error(string.Format("[SERVER BASE]: Error whilst removing {0} ", m_pidFile), e);
+ }
+
+ m_pidFile = String.Empty;
+ }
+ }
+
public void RegisterCommonAppenders(IConfig startupConfig)
{
ILoggerRepository repository = LogManager.GetRepository();
@@ -109,7 +150,7 @@ namespace OpenSim.Framework.Servers
m_logFileAppender.ActivateOptions();
}
- m_log.InfoFormat("[LOGGING]: Logging started to file {0}", m_logFileAppender.File);
+ m_log.InfoFormat("[SERVER BASE]: Logging started to file {0}", m_logFileAppender.File);
}
}
@@ -243,26 +284,26 @@ namespace OpenSim.Framework.Servers
}
else if (File.Exists(gitRefPointerPath))
{
-// m_log.DebugFormat("[OPENSIM]: Found {0}", gitRefPointerPath);
+// m_log.DebugFormat("[SERVER BASE]: Found {0}", gitRefPointerPath);
string rawPointer = "";
using (StreamReader pointerFile = File.OpenText(gitRefPointerPath))
rawPointer = pointerFile.ReadLine();
-// m_log.DebugFormat("[OPENSIM]: rawPointer [{0}]", rawPointer);
+// m_log.DebugFormat("[SERVER BASE]: rawPointer [{0}]", rawPointer);
Match m = Regex.Match(rawPointer, "^ref: (.+)$");
if (m.Success)
{
-// m_log.DebugFormat("[OPENSIM]: Matched [{0}]", m.Groups[1].Value);
+// m_log.DebugFormat("[SERVER BASE]: Matched [{0}]", m.Groups[1].Value);
string gitRef = m.Groups[1].Value;
string gitRefPath = gitDir + gitRef;
if (File.Exists(gitRefPath))
{
-// m_log.DebugFormat("[OPENSIM]: Found gitRefPath [{0}]", gitRefPath);
+// m_log.DebugFormat("[SERVER BASE]: Found gitRefPath [{0}]", gitRefPath);
using (StreamReader refFile = File.OpenText(gitRefPath))
{
--
cgit v1.1
From 9fcf3f1a3f3457debf0f59ba7659492b44172b99 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 22 Nov 2012 05:48:41 +0000
Subject: Make "config show/set/get/save" console commands available on all
servers
---
OpenSim/Framework/Servers/ServerBase.cs | 140 +++++++++++++++++++++++++++++++-
1 file changed, 137 insertions(+), 3 deletions(-)
(limited to 'OpenSim/Framework/Servers')
diff --git a/OpenSim/Framework/Servers/ServerBase.cs b/OpenSim/Framework/Servers/ServerBase.cs
index 645b43a..27cfc9b 100644
--- a/OpenSim/Framework/Servers/ServerBase.cs
+++ b/OpenSim/Framework/Servers/ServerBase.cs
@@ -44,6 +44,8 @@ namespace OpenSim.Framework.Servers
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+ public IConfigSource Config { get; protected set; }
+
///
/// Console to be used for any command line output. Can be null, in which case there should be no output.
///
@@ -175,6 +177,30 @@ namespace OpenSim.Framework.Servers
m_console.Commands.AddCommand(
"General", false, "set log level", "set log level ",
"Set the console logging level for this session.", HandleSetLogLevel);
+
+ m_console.Commands.AddCommand(
+ "General", false, "config set",
+ "config set ",
+ "Set a config option. In most cases this is not useful since changed parameters are not dynamically reloaded. Neither do changed parameters persist - you will have to change a config file manually and restart.", HandleConfig);
+
+ m_console.Commands.AddCommand(
+ "General", false, "config get",
+ "config get [] []",
+ "Synonym for config show",
+ HandleConfig);
+
+ m_console.Commands.AddCommand(
+ "General", false, "config show",
+ "config show [] []",
+ "Show config information",
+ "If neither section nor field are specified, then the whole current configuration is printed." + Environment.NewLine
+ + "If a section is given but not a field, then all fields in that section are printed.",
+ HandleConfig);
+
+ m_console.Commands.AddCommand(
+ "General", false, "config save",
+ "config save ",
+ "Save current configuration to a file at the given path", HandleConfig);
}
public virtual void HandleShow(string module, string[] cmd)
@@ -197,6 +223,115 @@ namespace OpenSim.Framework.Servers
}
}
+ ///
+ /// Change and load configuration file data.
+ ///
+ ///
+ ///
+ private void HandleConfig(string module, string[] cmd)
+ {
+ List args = new List(cmd);
+ args.RemoveAt(0);
+ string[] cmdparams = args.ToArray();
+
+ if (cmdparams.Length > 0)
+ {
+ string firstParam = cmdparams[0].ToLower();
+
+ switch (firstParam)
+ {
+ case "set":
+ if (cmdparams.Length < 4)
+ {
+ Notice("Syntax: config set ");
+ Notice("Example: config set ScriptEngine.DotNetEngine NumberOfScriptThreads 5");
+ }
+ else
+ {
+ IConfig c;
+ IConfigSource source = new IniConfigSource();
+ c = source.AddConfig(cmdparams[1]);
+ if (c != null)
+ {
+ string _value = String.Join(" ", cmdparams, 3, cmdparams.Length - 3);
+ c.Set(cmdparams[2], _value);
+ Config.Merge(source);
+
+ Notice("In section [{0}], set {1} = {2}", c.Name, cmdparams[2], _value);
+ }
+ }
+ break;
+
+ case "get":
+ case "show":
+ if (cmdparams.Length == 1)
+ {
+ foreach (IConfig config in Config.Configs)
+ {
+ Notice("[{0}]", config.Name);
+ string[] keys = config.GetKeys();
+ foreach (string key in keys)
+ Notice(" {0} = {1}", key, config.GetString(key));
+ }
+ }
+ else if (cmdparams.Length == 2 || cmdparams.Length == 3)
+ {
+ IConfig config = Config.Configs[cmdparams[1]];
+ if (config == null)
+ {
+ Notice("Section \"{0}\" does not exist.",cmdparams[1]);
+ break;
+ }
+ else
+ {
+ if (cmdparams.Length == 2)
+ {
+ Notice("[{0}]", config.Name);
+ foreach (string key in config.GetKeys())
+ Notice(" {0} = {1}", key, config.GetString(key));
+ }
+ else
+ {
+ Notice(
+ "config get {0} {1} : {2}",
+ cmdparams[1], cmdparams[2], config.GetString(cmdparams[2]));
+ }
+ }
+ }
+ else
+ {
+ Notice("Syntax: config {0} [] []", firstParam);
+ Notice("Example: config {0} ScriptEngine.DotNetEngine NumberOfScriptThreads", firstParam);
+ }
+
+ break;
+
+ case "save":
+ if (cmdparams.Length < 2)
+ {
+ Notice("Syntax: config save ");
+ return;
+ }
+
+ string path = cmdparams[1];
+ Notice("Saving configuration file: {0}", path);
+
+ if (Config is IniConfigSource)
+ {
+ IniConfigSource iniCon = (IniConfigSource)Config;
+ iniCon.Save(path);
+ }
+ else if (Config is XmlConfigSource)
+ {
+ XmlConfigSource xmlCon = (XmlConfigSource)Config;
+ xmlCon.Save(path);
+ }
+
+ break;
+ }
+ }
+ }
+
private void HandleSetLogLevel(string module, string[] cmd)
{
if (cmd.Length != 4)
@@ -220,9 +355,8 @@ namespace OpenSim.Framework.Servers
m_consoleAppender.Threshold = consoleLevel;
else
Notice(
- String.Format(
- "{0} is not a valid logging level. Valid logging levels are ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF",
- rawLevel));
+ "{0} is not a valid logging level. Valid logging levels are ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF",
+ rawLevel);
ShowLogLevel();
}
--
cgit v1.1
From 3ce00e97cc6a7801738e72af8b8033fd81d09d12 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 22 Nov 2012 05:57:20 +0000
Subject: Factor out command script code.
This also allows comments in command scripts (lines starting with ;, # or //) to be used across all servers
---
OpenSim/Framework/Servers/ServerBase.cs | 52 +++++++++++++++++++++++++++++++--
1 file changed, 50 insertions(+), 2 deletions(-)
(limited to 'OpenSim/Framework/Servers')
diff --git a/OpenSim/Framework/Servers/ServerBase.cs b/OpenSim/Framework/Servers/ServerBase.cs
index 27cfc9b..c182a3a 100644
--- a/OpenSim/Framework/Servers/ServerBase.cs
+++ b/OpenSim/Framework/Servers/ServerBase.cs
@@ -201,6 +201,11 @@ namespace OpenSim.Framework.Servers
"General", false, "config save",
"config save ",
"Save current configuration to a file at the given path", HandleConfig);
+
+ m_console.Commands.AddCommand(
+ "General", false, "command-script",
+ "command-script