Allow more than one stat category to be specified in "show stats"

e.g. "show stats httpserver.9000 server.network"
cpu-performance
Justin Clark-Casey (justincc) 2013-06-20 00:45:56 +01:00
parent 5b1a9f84fd
commit 05790ba1cf
1 changed files with 34 additions and 30 deletions

View File

@ -27,6 +27,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Text; using System.Text;
namespace OpenSim.Framework.Monitoring namespace OpenSim.Framework.Monitoring
@ -68,13 +69,14 @@ namespace OpenSim.Framework.Monitoring
"General", "General",
false, false,
"show stats", "show stats",
"show stats [list|all|<category>[.<container>]", "show stats [list|all|(<category>[.<container>])+",
"Show statistical information for this server", "Show statistical information for this server",
"If no final argument is specified then legacy statistics information is currently shown.\n" "If no final argument is specified then legacy statistics information is currently shown.\n"
+ "If list is specified then statistic categories are shown.\n" + "'list' argument will show statistic categories.\n"
+ "If all is specified then all registered statistics are shown.\n" + "'all' will show all statistics.\n"
+ "If a category name is specified then only statistics from that category are shown.\n" + "A <category> name will show statistics from that category.\n"
+ "If a category container is also specified then only statistics from that category in that container are shown.\n" + "A <category>.<container> name will show statistics from that category in that container.\n"
+ "More than one name can be given separated by spaces.\n"
+ "THIS STATS FACILITY IS EXPERIMENTAL AND DOES NOT YET CONTAIN ALL STATS", + "THIS STATS FACILITY IS EXPERIMENTAL AND DOES NOT YET CONTAIN ALL STATS",
HandleShowStatsCommand); HandleShowStatsCommand);
} }
@ -85,45 +87,47 @@ namespace OpenSim.Framework.Monitoring
if (cmd.Length > 2) if (cmd.Length > 2)
{ {
string name = cmd[2]; foreach (string name in cmd.Skip(2))
string[] components = name.Split('.'); {
string[] components = name.Split('.');
string categoryName = components[0]; string categoryName = components[0];
string containerName = components.Length > 1 ? components[1] : null; string containerName = components.Length > 1 ? components[1] : null;
if (categoryName == AllSubCommand) if (categoryName == AllSubCommand)
{
OutputAllStatsToConsole(con);
}
else if (categoryName == ListSubCommand)
{
con.Output("Statistic categories available are:");
foreach (string category in RegisteredStats.Keys)
con.OutputFormat(" {0}", category);
}
else
{
SortedDictionary<string, SortedDictionary<string, Stat>> category;
if (!RegisteredStats.TryGetValue(categoryName, out category))
{ {
con.OutputFormat("No such category as {0}", categoryName); OutputAllStatsToConsole(con);
}
else if (categoryName == ListSubCommand)
{
con.Output("Statistic categories available are:");
foreach (string category in RegisteredStats.Keys)
con.OutputFormat(" {0}", category);
} }
else else
{ {
if (String.IsNullOrEmpty(containerName)) SortedDictionary<string, SortedDictionary<string, Stat>> category;
if (!RegisteredStats.TryGetValue(categoryName, out category))
{ {
OutputCategoryStatsToConsole(con, category); con.OutputFormat("No such category as {0}", categoryName);
} }
else else
{ {
SortedDictionary<string, Stat> container; if (String.IsNullOrEmpty(containerName))
if (category.TryGetValue(containerName, out container))
{ {
OutputContainerStatsToConsole(con, container); OutputCategoryStatsToConsole(con, category);
} }
else else
{ {
con.OutputFormat("No such container {0} in category {1}", containerName, categoryName); SortedDictionary<string, Stat> container;
if (category.TryGetValue(containerName, out container))
{
OutputContainerStatsToConsole(con, container);
}
else
{
con.OutputFormat("No such container {0} in category {1}", containerName, categoryName);
}
} }
} }
} }