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/ServerBase.cs | 58 +++++++++++++++++++++++++++++++++
1 file changed, 58 insertions(+)
create mode 100644 OpenSim/Framework/Servers/ServerBase.cs
(limited to 'OpenSim/Framework/Servers/ServerBase.cs')
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/ServerBase.cs | 50 +++++++++++++++++++++++++++++++++
1 file changed, 50 insertions(+)
(limited to 'OpenSim/Framework/Servers/ServerBase.cs')
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/ServerBase.cs | 12 ++++++++++++
1 file changed, 12 insertions(+)
(limited to 'OpenSim/Framework/Servers/ServerBase.cs')
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/ServerBase.cs | 184 +++++++++++++++++++++++++++++++-
1 file changed, 182 insertions(+), 2 deletions(-)
(limited to 'OpenSim/Framework/Servers/ServerBase.cs')
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/ServerBase.cs | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
(limited to 'OpenSim/Framework/Servers/ServerBase.cs')
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 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/ServerBase.cs')
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/ServerBase.cs | 51 +++++++++++++++++++++++++++++----
1 file changed, 46 insertions(+), 5 deletions(-)
(limited to 'OpenSim/Framework/Servers/ServerBase.cs')
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/ServerBase.cs')
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/ServerBase.cs')
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