From 086fd70a5fdfd9b3a0e56201596f6d6bb20f391e Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 20 Jun 2013 00:00:39 +0100
Subject: Make it possible to specify display of stats in a particular
'container' by separating category and container with a period.
e.g. "show stats server.network"
I failed to realize this had already been implemented without the period in the show stats command (as the command help had not been updated).
However, I would prefer the . approach as it will allow specifying multiple stats, easier wildcarding, etc.
This commit also prevents any stat from having a period in its short name.
---
OpenSim/Framework/Monitoring/Stats/Stat.cs | 8 ++++++++
OpenSim/Framework/Monitoring/StatsManager.cs | 12 +++++++++---
2 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/OpenSim/Framework/Monitoring/Stats/Stat.cs b/OpenSim/Framework/Monitoring/Stats/Stat.cs
index 85d1a78..c57ee0c 100644
--- a/OpenSim/Framework/Monitoring/Stats/Stat.cs
+++ b/OpenSim/Framework/Monitoring/Stats/Stat.cs
@@ -42,6 +42,8 @@ namespace OpenSim.Framework.Monitoring
{
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+ public static readonly char[] DisallowedShortNameCharacters = { '.' };
+
///
/// Category of this stat (e.g. cache, scene, etc).
///
@@ -166,6 +168,12 @@ namespace OpenSim.Framework.Monitoring
throw new Exception(
string.Format("Stat cannot be in category '{0}' since this is reserved for a subcommand", category));
+ foreach (char c in DisallowedShortNameCharacters)
+ {
+ if (shortName.IndexOf(c) != -1)
+ throw new Exception(string.Format("Stat name {0} cannot contain character {1}", shortName, c));
+ }
+
ShortName = shortName;
Name = name;
Description = description;
diff --git a/OpenSim/Framework/Monitoring/StatsManager.cs b/OpenSim/Framework/Monitoring/StatsManager.cs
index 3aee984..af9f5ba 100644
--- a/OpenSim/Framework/Monitoring/StatsManager.cs
+++ b/OpenSim/Framework/Monitoring/StatsManager.cs
@@ -68,12 +68,13 @@ namespace OpenSim.Framework.Monitoring
"General",
false,
"show stats",
- "show stats [list|all|]",
+ "show stats [list|all|[.]",
"Show statistical information for this server",
"If no final argument is specified then legacy statistics information is currently shown.\n"
+ "If list is specified then statistic categories are shown.\n"
+ "If all is specified then all registered statistics are shown.\n"
+ "If a category name is specified then only statistics from that category are shown.\n"
+ + "If a category container is also specified then only statistics from that category in that container are shown.\n"
+ "THIS STATS FACILITY IS EXPERIMENTAL AND DOES NOT YET CONTAIN ALL STATS",
HandleShowStatsCommand);
}
@@ -84,8 +85,11 @@ namespace OpenSim.Framework.Monitoring
if (cmd.Length > 2)
{
- var categoryName = cmd[2];
- var containerName = cmd.Length > 3 ? cmd[3] : String.Empty;
+ string name = cmd[2];
+ string[] components = name.Split('.');
+
+ string categoryName = components[0];
+ string containerName = components.Length > 1 ? components[1] : null;
if (categoryName == AllSubCommand)
{
@@ -107,7 +111,9 @@ namespace OpenSim.Framework.Monitoring
else
{
if (String.IsNullOrEmpty(containerName))
+ {
OutputCategoryStatsToConsole(con, category);
+ }
else
{
SortedDictionary container;
--
cgit v1.1