aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Framework/Monitoring/StatsManager.cs64
1 files changed, 34 insertions, 30 deletions
diff --git a/OpenSim/Framework/Monitoring/StatsManager.cs b/OpenSim/Framework/Monitoring/StatsManager.cs
index af9f5ba..12d3a75 100644
--- a/OpenSim/Framework/Monitoring/StatsManager.cs
+++ b/OpenSim/Framework/Monitoring/StatsManager.cs
@@ -27,6 +27,7 @@
27 27
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using System.Linq;
30using System.Text; 31using System.Text;
31 32
32namespace OpenSim.Framework.Monitoring 33namespace OpenSim.Framework.Monitoring
@@ -68,13 +69,14 @@ namespace OpenSim.Framework.Monitoring
68 "General", 69 "General",
69 false, 70 false,
70 "show stats", 71 "show stats",
71 "show stats [list|all|<category>[.<container>]", 72 "show stats [list|all|(<category>[.<container>])+",
72 "Show statistical information for this server", 73 "Show statistical information for this server",
73 "If no final argument is specified then legacy statistics information is currently shown.\n" 74 "If no final argument is specified then legacy statistics information is currently shown.\n"
74 + "If list is specified then statistic categories are shown.\n" 75 + "'list' argument will show statistic categories.\n"
75 + "If all is specified then all registered statistics are shown.\n" 76 + "'all' will show all statistics.\n"
76 + "If a category name is specified then only statistics from that category are shown.\n" 77 + "A <category> name will show statistics from that category.\n"
77 + "If a category container is also specified then only statistics from that category in that container are shown.\n" 78 + "A <category>.<container> name will show statistics from that category in that container.\n"
79 + "More than one name can be given separated by spaces.\n"
78 + "THIS STATS FACILITY IS EXPERIMENTAL AND DOES NOT YET CONTAIN ALL STATS", 80 + "THIS STATS FACILITY IS EXPERIMENTAL AND DOES NOT YET CONTAIN ALL STATS",
79 HandleShowStatsCommand); 81 HandleShowStatsCommand);
80 } 82 }
@@ -85,45 +87,47 @@ namespace OpenSim.Framework.Monitoring
85 87
86 if (cmd.Length > 2) 88 if (cmd.Length > 2)
87 { 89 {
88 string name = cmd[2]; 90 foreach (string name in cmd.Skip(2))
89 string[] components = name.Split('.'); 91 {
92 string[] components = name.Split('.');
90 93
91 string categoryName = components[0]; 94 string categoryName = components[0];
92 string containerName = components.Length > 1 ? components[1] : null; 95 string containerName = components.Length > 1 ? components[1] : null;
93 96
94 if (categoryName == AllSubCommand) 97 if (categoryName == AllSubCommand)
95 { 98 {
96 OutputAllStatsToConsole(con); 99 OutputAllStatsToConsole(con);
97 } 100 }
98 else if (categoryName == ListSubCommand) 101 else if (categoryName == ListSubCommand)
99 {
100 con.Output("Statistic categories available are:");
101 foreach (string category in RegisteredStats.Keys)
102 con.OutputFormat(" {0}", category);
103 }
104 else
105 {
106 SortedDictionary<string, SortedDictionary<string, Stat>> category;
107 if (!RegisteredStats.TryGetValue(categoryName, out category))
108 { 102 {
109 con.OutputFormat("No such category as {0}", categoryName); 103 con.Output("Statistic categories available are:");
104 foreach (string category in RegisteredStats.Keys)
105 con.OutputFormat(" {0}", category);
110 } 106 }
111 else 107 else
112 { 108 {
113 if (String.IsNullOrEmpty(containerName)) 109 SortedDictionary<string, SortedDictionary<string, Stat>> category;
110 if (!RegisteredStats.TryGetValue(categoryName, out category))
114 { 111 {
115 OutputCategoryStatsToConsole(con, category); 112 con.OutputFormat("No such category as {0}", categoryName);
116 } 113 }
117 else 114 else
118 { 115 {
119 SortedDictionary<string, Stat> container; 116 if (String.IsNullOrEmpty(containerName))
120 if (category.TryGetValue(containerName, out container))
121 { 117 {
122 OutputContainerStatsToConsole(con, container); 118 OutputCategoryStatsToConsole(con, category);
123 } 119 }
124 else 120 else
125 { 121 {
126 con.OutputFormat("No such container {0} in category {1}", containerName, categoryName); 122 SortedDictionary<string, Stat> container;
123 if (category.TryGetValue(containerName, out container))
124 {
125 OutputContainerStatsToConsole(con, container);
126 }
127 else
128 {
129 con.OutputFormat("No such container {0} in category {1}", containerName, categoryName);
130 }
127 } 131 }
128 } 132 }
129 } 133 }