diff options
Diffstat (limited to 'OpenSim/Framework')
-rw-r--r-- | OpenSim/Framework/Console/ConsoleUtil.cs | 4 | ||||
-rw-r--r-- | OpenSim/Framework/Monitoring/SimExtraStatsCollector.cs | 16 | ||||
-rw-r--r-- | OpenSim/Framework/Monitoring/StatsManager.cs | 204 | ||||
-rw-r--r-- | OpenSim/Framework/Monitoring/Watchdog.cs | 20 | ||||
-rw-r--r-- | OpenSim/Framework/RegionFlags.cs | 53 | ||||
-rw-r--r-- | OpenSim/Framework/Servers/BaseOpenSimServer.cs | 32 |
6 files changed, 273 insertions, 56 deletions
diff --git a/OpenSim/Framework/Console/ConsoleUtil.cs b/OpenSim/Framework/Console/ConsoleUtil.cs index 2612a50..a7cf0c0 100644 --- a/OpenSim/Framework/Console/ConsoleUtil.cs +++ b/OpenSim/Framework/Console/ConsoleUtil.cs | |||
@@ -34,7 +34,7 @@ using OpenMetaverse; | |||
34 | 34 | ||
35 | public class ConsoleUtil | 35 | public class ConsoleUtil |
36 | { | 36 | { |
37 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 37 | // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
38 | 38 | ||
39 | public const string MinRawConsoleVectorValue = "-~"; | 39 | public const string MinRawConsoleVectorValue = "-~"; |
40 | public const string MaxRawConsoleVectorValue = "~"; | 40 | public const string MaxRawConsoleVectorValue = "~"; |
@@ -107,7 +107,7 @@ public class ConsoleUtil | |||
107 | 107 | ||
108 | string semiDigestedConsoleVector = string.Join(VectorSeparator, semiDigestedComponents.ToArray()); | 108 | string semiDigestedConsoleVector = string.Join(VectorSeparator, semiDigestedComponents.ToArray()); |
109 | 109 | ||
110 | m_log.DebugFormat("[CONSOLE UTIL]: Parsing {0} into OpenMetaverse.Vector3", semiDigestedConsoleVector); | 110 | // m_log.DebugFormat("[CONSOLE UTIL]: Parsing {0} into OpenMetaverse.Vector3", semiDigestedConsoleVector); |
111 | 111 | ||
112 | return Vector3.TryParse(semiDigestedConsoleVector, out vector); | 112 | return Vector3.TryParse(semiDigestedConsoleVector, out vector); |
113 | } | 113 | } |
diff --git a/OpenSim/Framework/Monitoring/SimExtraStatsCollector.cs b/OpenSim/Framework/Monitoring/SimExtraStatsCollector.cs index 8ac9090..aa86202 100644 --- a/OpenSim/Framework/Monitoring/SimExtraStatsCollector.cs +++ b/OpenSim/Framework/Monitoring/SimExtraStatsCollector.cs | |||
@@ -359,13 +359,19 @@ Asset service request failures: {3}" + Environment.NewLine, | |||
359 | inPacketsPerSecond, outPacketsPerSecond, pendingDownloads, pendingUploads, unackedBytes, totalFrameTime, | 359 | inPacketsPerSecond, outPacketsPerSecond, pendingDownloads, pendingUploads, unackedBytes, totalFrameTime, |
360 | netFrameTime, physicsFrameTime, otherFrameTime, agentFrameTime, imageFrameTime)); | 360 | netFrameTime, physicsFrameTime, otherFrameTime, agentFrameTime, imageFrameTime)); |
361 | 361 | ||
362 | foreach (KeyValuePair<string, Stat> kvp in StatsManager.RegisteredStats) | 362 | Dictionary<string, Dictionary<string, Stat>> sceneStats; |
363 | { | ||
364 | Stat stat = kvp.Value; | ||
365 | 363 | ||
366 | if (stat.Category == "scene" && stat.Verbosity == StatVerbosity.Info) | 364 | if (StatsManager.TryGetStats("scene", out sceneStats)) |
365 | { | ||
366 | foreach (KeyValuePair<string, Dictionary<string, Stat>> kvp in sceneStats) | ||
367 | { | 367 | { |
368 | sb.AppendFormat("Slow frames ({0}): {1}\n", stat.Container, stat.Value); | 368 | foreach (Stat stat in kvp.Value.Values) |
369 | { | ||
370 | if (stat.Verbosity == StatVerbosity.Info) | ||
371 | { | ||
372 | sb.AppendFormat("{0} ({1}): {2}{3}\n", stat.Name, stat.Container, stat.Value, stat.UnitName); | ||
373 | } | ||
374 | } | ||
369 | } | 375 | } |
370 | } | 376 | } |
371 | 377 | ||
diff --git a/OpenSim/Framework/Monitoring/StatsManager.cs b/OpenSim/Framework/Monitoring/StatsManager.cs index b5dc24f..31989e5 100644 --- a/OpenSim/Framework/Monitoring/StatsManager.cs +++ b/OpenSim/Framework/Monitoring/StatsManager.cs | |||
@@ -35,13 +35,23 @@ namespace OpenSim.Framework.Monitoring | |||
35 | /// </summary> | 35 | /// </summary> |
36 | public class StatsManager | 36 | public class StatsManager |
37 | { | 37 | { |
38 | // Subcommand used to list other stats. | ||
39 | public const string AllSubCommand = "all"; | ||
40 | |||
41 | // Subcommand used to list other stats. | ||
42 | public const string ListSubCommand = "list"; | ||
43 | |||
44 | // All subcommands | ||
45 | public static HashSet<string> SubCommands = new HashSet<string> { AllSubCommand, ListSubCommand }; | ||
46 | |||
38 | /// <summary> | 47 | /// <summary> |
39 | /// Registered stats. | 48 | /// Registered stats categorized by category/container/shortname |
40 | /// </summary> | 49 | /// </summary> |
41 | /// <remarks> | 50 | /// <remarks> |
42 | /// Do not add or remove from this dictionary. | 51 | /// Do not add or remove directly from this dictionary. |
43 | /// </remarks> | 52 | /// </remarks> |
44 | public static Dictionary<string, Stat> RegisteredStats = new Dictionary<string, Stat>(); | 53 | public static Dictionary<string, Dictionary<string, Dictionary<string, Stat>>> RegisteredStats |
54 | = new Dictionary<string, Dictionary<string, Dictionary<string, Stat>>>(); | ||
45 | 55 | ||
46 | private static AssetStatsCollector assetStats; | 56 | private static AssetStatsCollector assetStats; |
47 | private static UserStatsCollector userStats; | 57 | private static UserStatsCollector userStats; |
@@ -51,6 +61,75 @@ namespace OpenSim.Framework.Monitoring | |||
51 | public static UserStatsCollector UserStats { get { return userStats; } } | 61 | public static UserStatsCollector UserStats { get { return userStats; } } |
52 | public static SimExtraStatsCollector SimExtraStats { get { return simExtraStats; } } | 62 | public static SimExtraStatsCollector SimExtraStats { get { return simExtraStats; } } |
53 | 63 | ||
64 | public static void RegisterConsoleCommands(ICommandConsole console) | ||
65 | { | ||
66 | console.Commands.AddCommand( | ||
67 | "General", | ||
68 | false, | ||
69 | "show stats", | ||
70 | "show stats [list|all|<category>]", | ||
71 | "Show statistical information for this server", | ||
72 | "If no final argument is specified then legacy statistics information is currently shown.\n" | ||
73 | + "If list is specified then statistic categories are shown.\n" | ||
74 | + "If all is specified then all registered statistics are shown.\n" | ||
75 | + "If a category name is specified then only statistics from that category are shown.\n" | ||
76 | + "THIS STATS FACILITY IS EXPERIMENTAL AND DOES NOT YET CONTAIN ALL STATS", | ||
77 | HandleShowStatsCommand); | ||
78 | } | ||
79 | |||
80 | public static void HandleShowStatsCommand(string module, string[] cmd) | ||
81 | { | ||
82 | ICommandConsole con = MainConsole.Instance; | ||
83 | |||
84 | if (cmd.Length > 2) | ||
85 | { | ||
86 | var categoryName = cmd[2]; | ||
87 | |||
88 | if (categoryName == AllSubCommand) | ||
89 | { | ||
90 | foreach (var category in RegisteredStats.Values) | ||
91 | { | ||
92 | OutputCategoryStatsToConsole(con, category); | ||
93 | } | ||
94 | } | ||
95 | else if (categoryName == ListSubCommand) | ||
96 | { | ||
97 | con.Output("Statistic categories available are:"); | ||
98 | foreach (string category in RegisteredStats.Keys) | ||
99 | con.OutputFormat(" {0}", category); | ||
100 | } | ||
101 | else | ||
102 | { | ||
103 | Dictionary<string, Dictionary<string, Stat>> category; | ||
104 | if (!RegisteredStats.TryGetValue(categoryName, out category)) | ||
105 | { | ||
106 | con.OutputFormat("No such category as {0}", categoryName); | ||
107 | } | ||
108 | else | ||
109 | { | ||
110 | OutputCategoryStatsToConsole(con, category); | ||
111 | } | ||
112 | } | ||
113 | } | ||
114 | else | ||
115 | { | ||
116 | // Legacy | ||
117 | con.Output(SimExtraStats.Report()); | ||
118 | } | ||
119 | } | ||
120 | |||
121 | private static void OutputCategoryStatsToConsole( | ||
122 | ICommandConsole con, Dictionary<string, Dictionary<string, Stat>> category) | ||
123 | { | ||
124 | foreach (var container in category.Values) | ||
125 | { | ||
126 | foreach (Stat stat in container.Values) | ||
127 | { | ||
128 | con.Output(stat.ToConsoleString()); | ||
129 | } | ||
130 | } | ||
131 | } | ||
132 | |||
54 | /// <summary> | 133 | /// <summary> |
55 | /// Start collecting statistics related to assets. | 134 | /// Start collecting statistics related to assets. |
56 | /// Should only be called once. | 135 | /// Should only be called once. |
@@ -73,43 +152,100 @@ namespace OpenSim.Framework.Monitoring | |||
73 | return userStats; | 152 | return userStats; |
74 | } | 153 | } |
75 | 154 | ||
155 | /// <summary> | ||
156 | /// Registers a statistic. | ||
157 | /// </summary> | ||
158 | /// <param name='stat'></param> | ||
159 | /// <returns></returns> | ||
76 | public static bool RegisterStat(Stat stat) | 160 | public static bool RegisterStat(Stat stat) |
77 | { | 161 | { |
162 | Dictionary<string, Dictionary<string, Stat>> category = null, newCategory; | ||
163 | Dictionary<string, Stat> container = null, newContainer; | ||
164 | |||
78 | lock (RegisteredStats) | 165 | lock (RegisteredStats) |
79 | { | 166 | { |
80 | if (RegisteredStats.ContainsKey(stat.UniqueName)) | 167 | // Stat name is not unique across category/container/shortname key. |
81 | { | 168 | // XXX: For now just return false. This is to avoid problems in regression tests where all tests |
82 | // XXX: For now just return false. This is to avoid problems in regression tests where all tests | 169 | // in a class are run in the same instance of the VM. |
83 | // in a class are run in the same instance of the VM. | 170 | if (TryGetStat(stat, out category, out container)) |
84 | return false; | 171 | return false; |
85 | 172 | ||
86 | // throw new Exception( | 173 | // We take a copy-on-write approach here of replacing dictionaries when keys are added or removed. |
87 | // "StatsManager already contains stat with ShortName {0} in Category {1}", stat.ShortName, stat.Category); | 174 | // This means that we don't need to lock or copy them on iteration, which will be a much more |
88 | } | 175 | // common operation after startup. |
176 | if (container != null) | ||
177 | newContainer = new Dictionary<string, Stat>(container); | ||
178 | else | ||
179 | newContainer = new Dictionary<string, Stat>(); | ||
89 | 180 | ||
90 | // We take a replace-on-write approach here so that we don't need to generate a new Dictionary | 181 | if (category != null) |
91 | Dictionary<string, Stat> newRegisteredStats = new Dictionary<string, Stat>(RegisteredStats); | 182 | newCategory = new Dictionary<string, Dictionary<string, Stat>>(category); |
92 | newRegisteredStats[stat.UniqueName] = stat; | 183 | else |
93 | RegisteredStats = newRegisteredStats; | 184 | newCategory = new Dictionary<string, Dictionary<string, Stat>>(); |
185 | |||
186 | newContainer[stat.ShortName] = stat; | ||
187 | newCategory[stat.Container] = newContainer; | ||
188 | RegisteredStats[stat.Category] = newCategory; | ||
94 | } | 189 | } |
95 | 190 | ||
96 | return true; | 191 | return true; |
97 | } | 192 | } |
98 | 193 | ||
194 | /// <summary> | ||
195 | /// Deregister a statistic | ||
196 | /// </summary>> | ||
197 | /// <param name='stat'></param> | ||
198 | /// <returns></returns | ||
99 | public static bool DeregisterStat(Stat stat) | 199 | public static bool DeregisterStat(Stat stat) |
100 | { | 200 | { |
201 | Dictionary<string, Dictionary<string, Stat>> category = null, newCategory; | ||
202 | Dictionary<string, Stat> container = null, newContainer; | ||
203 | |||
101 | lock (RegisteredStats) | 204 | lock (RegisteredStats) |
102 | { | 205 | { |
103 | if (!RegisteredStats.ContainsKey(stat.UniqueName)) | 206 | if (!TryGetStat(stat, out category, out container)) |
104 | return false; | 207 | return false; |
105 | 208 | ||
106 | Dictionary<string, Stat> newRegisteredStats = new Dictionary<string, Stat>(RegisteredStats); | 209 | newContainer = new Dictionary<string, Stat>(container); |
107 | newRegisteredStats.Remove(stat.UniqueName); | 210 | newContainer.Remove(stat.UniqueName); |
108 | RegisteredStats = newRegisteredStats; | 211 | |
212 | newCategory = new Dictionary<string, Dictionary<string, Stat>>(category); | ||
213 | newCategory.Remove(stat.Container); | ||
214 | |||
215 | newCategory[stat.Container] = newContainer; | ||
216 | RegisteredStats[stat.Category] = newCategory; | ||
109 | 217 | ||
110 | return true; | 218 | return true; |
111 | } | 219 | } |
112 | } | 220 | } |
221 | |||
222 | public static bool TryGetStats(string category, out Dictionary<string, Dictionary<string, Stat>> stats) | ||
223 | { | ||
224 | return RegisteredStats.TryGetValue(category, out stats); | ||
225 | } | ||
226 | |||
227 | public static bool TryGetStat( | ||
228 | Stat stat, | ||
229 | out Dictionary<string, Dictionary<string, Stat>> category, | ||
230 | out Dictionary<string, Stat> container) | ||
231 | { | ||
232 | category = null; | ||
233 | container = null; | ||
234 | |||
235 | lock (RegisteredStats) | ||
236 | { | ||
237 | if (RegisteredStats.TryGetValue(stat.Category, out category)) | ||
238 | { | ||
239 | if (category.TryGetValue(stat.Container, out container)) | ||
240 | { | ||
241 | if (container.ContainsKey(stat.ShortName)) | ||
242 | return true; | ||
243 | } | ||
244 | } | ||
245 | } | ||
246 | |||
247 | return false; | ||
248 | } | ||
113 | } | 249 | } |
114 | 250 | ||
115 | /// <summary> | 251 | /// <summary> |
@@ -157,9 +293,26 @@ namespace OpenSim.Framework.Monitoring | |||
157 | 293 | ||
158 | public virtual double Value { get; set; } | 294 | public virtual double Value { get; set; } |
159 | 295 | ||
296 | /// <summary> | ||
297 | /// Constructor | ||
298 | /// </summary> | ||
299 | /// <param name='shortName'>Short name for the stat. Must not contain spaces. e.g. "LongFrames"</param> | ||
300 | /// <param name='name'>Human readable name for the stat. e.g. "Long frames"</param> | ||
301 | /// <param name='unitName'> | ||
302 | /// Unit name for the stat. Should be preceeded by a space if the unit name isn't normally appeneded immediately to the value. | ||
303 | /// e.g. " frames" | ||
304 | /// </param> | ||
305 | /// <param name='category'>Category under which this stat should appear, e.g. "scene". Do not capitalize.</param> | ||
306 | /// <param name='container'>Entity to which this stat relates. e.g. scene name if this is a per scene stat.</param> | ||
307 | /// <param name='verbosity'>Verbosity of stat. Controls whether it will appear in short stat display or only full display.</param> | ||
308 | /// <param name='description'>Description of stat</param> | ||
160 | public Stat( | 309 | public Stat( |
161 | string shortName, string name, string unitName, string category, string container, StatVerbosity verbosity, string description) | 310 | string shortName, string name, string unitName, string category, string container, StatVerbosity verbosity, string description) |
162 | { | 311 | { |
312 | if (StatsManager.SubCommands.Contains(category)) | ||
313 | throw new Exception( | ||
314 | string.Format("Stat cannot be in category '{0}' since this is reserved for a subcommand", category)); | ||
315 | |||
163 | ShortName = shortName; | 316 | ShortName = shortName; |
164 | Name = name; | 317 | Name = name; |
165 | UnitName = unitName; | 318 | UnitName = unitName; |
@@ -175,6 +328,12 @@ namespace OpenSim.Framework.Monitoring | |||
175 | { | 328 | { |
176 | return string.Format("{0}+{1}+{2}", container, category, shortName); | 329 | return string.Format("{0}+{1}+{2}", container, category, shortName); |
177 | } | 330 | } |
331 | |||
332 | public virtual string ToConsoleString() | ||
333 | { | ||
334 | return string.Format( | ||
335 | "{0}.{1}.{2} : {3}{4}", Category, Container, ShortName, Value, UnitName); | ||
336 | } | ||
178 | } | 337 | } |
179 | 338 | ||
180 | public class PercentageStat : Stat | 339 | public class PercentageStat : Stat |
@@ -192,7 +351,7 @@ namespace OpenSim.Framework.Monitoring | |||
192 | if (c == 0) | 351 | if (c == 0) |
193 | return 0; | 352 | return 0; |
194 | 353 | ||
195 | return (double)Antecedent / c; | 354 | return (double)Antecedent / c * 100; |
196 | } | 355 | } |
197 | 356 | ||
198 | set | 357 | set |
@@ -203,8 +362,13 @@ namespace OpenSim.Framework.Monitoring | |||
203 | 362 | ||
204 | public PercentageStat( | 363 | public PercentageStat( |
205 | string shortName, string name, string category, string container, StatVerbosity verbosity, string description) | 364 | string shortName, string name, string category, string container, StatVerbosity verbosity, string description) |
206 | : base(shortName, name, " %", category, container, verbosity, description) | 365 | : base(shortName, name, "%", category, container, verbosity, description) {} |
366 | |||
367 | public override string ToConsoleString() | ||
207 | { | 368 | { |
369 | return string.Format( | ||
370 | "{0}.{1}.{2} : {3:0.##}{4} ({5}/{6})", | ||
371 | Category, Container, ShortName, Value, UnitName, Antecedent, Consequent); | ||
208 | } | 372 | } |
209 | } | 373 | } |
210 | } \ No newline at end of file | 374 | } \ No newline at end of file |
diff --git a/OpenSim/Framework/Monitoring/Watchdog.cs b/OpenSim/Framework/Monitoring/Watchdog.cs index eaddb8c..28d6d5c 100644 --- a/OpenSim/Framework/Monitoring/Watchdog.cs +++ b/OpenSim/Framework/Monitoring/Watchdog.cs | |||
@@ -231,7 +231,25 @@ namespace OpenSim.Framework.Monitoring | |||
231 | private static bool RemoveThread(int threadID) | 231 | private static bool RemoveThread(int threadID) |
232 | { | 232 | { |
233 | lock (m_threads) | 233 | lock (m_threads) |
234 | return m_threads.Remove(threadID); | 234 | { |
235 | ThreadWatchdogInfo twi; | ||
236 | if (m_threads.TryGetValue(threadID, out twi)) | ||
237 | { | ||
238 | m_log.DebugFormat( | ||
239 | "[WATCHDOG]: Removing thread {0}, ID {1}", twi.Thread.Name, twi.Thread.ManagedThreadId); | ||
240 | |||
241 | m_threads.Remove(threadID); | ||
242 | |||
243 | return true; | ||
244 | } | ||
245 | else | ||
246 | { | ||
247 | m_log.WarnFormat( | ||
248 | "[WATCHDOG]: Requested to remove thread with ID {0} but this is not being monitored", threadID); | ||
249 | |||
250 | return false; | ||
251 | } | ||
252 | } | ||
235 | } | 253 | } |
236 | 254 | ||
237 | public static bool AbortThread(int threadID) | 255 | public static bool AbortThread(int threadID) |
diff --git a/OpenSim/Framework/RegionFlags.cs b/OpenSim/Framework/RegionFlags.cs new file mode 100644 index 0000000..a3089b0 --- /dev/null +++ b/OpenSim/Framework/RegionFlags.cs | |||
@@ -0,0 +1,53 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSimulator Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using System; | ||
29 | |||
30 | namespace OpenSim.Framework | ||
31 | { | ||
32 | /// <summary> | ||
33 | /// Region flags used internally by OpenSimulator to store installation specific information about regions. | ||
34 | /// </summary> | ||
35 | /// <remarks> | ||
36 | /// Don't confuse with OpenMetaverse.RegionFlags which are client facing flags (i.e. they go over the wire). | ||
37 | /// Returned by IGridService.GetRegionFlags() | ||
38 | /// </remarks> | ||
39 | [Flags] | ||
40 | public enum RegionFlags : int | ||
41 | { | ||
42 | DefaultRegion = 1, // Used for new Rez. Random if multiple defined | ||
43 | FallbackRegion = 2, // Regions we redirect to when the destination is down | ||
44 | RegionOnline = 4, // Set when a region comes online, unset when it unregisters and DeleteOnUnregister is false | ||
45 | NoDirectLogin = 8, // Region unavailable for direct logins (by name) | ||
46 | Persistent = 16, // Don't remove on unregister | ||
47 | LockedOut = 32, // Don't allow registration | ||
48 | NoMove = 64, // Don't allow moving this region | ||
49 | Reservation = 128, // This is an inactive reservation | ||
50 | Authenticate = 256, // Require authentication | ||
51 | Hyperlink = 512 // Record represents a HG link | ||
52 | } | ||
53 | } \ No newline at end of file | ||
diff --git a/OpenSim/Framework/Servers/BaseOpenSimServer.cs b/OpenSim/Framework/Servers/BaseOpenSimServer.cs index cf19002..a8f3a9e 100644 --- a/OpenSim/Framework/Servers/BaseOpenSimServer.cs +++ b/OpenSim/Framework/Servers/BaseOpenSimServer.cs | |||
@@ -96,11 +96,6 @@ namespace OpenSim.Framework.Servers | |||
96 | get { return m_httpServer; } | 96 | get { return m_httpServer; } |
97 | } | 97 | } |
98 | 98 | ||
99 | /// <summary> | ||
100 | /// Holds the non-viewer statistics collection object for this service/server | ||
101 | /// </summary> | ||
102 | protected IStatsCollector m_stats; | ||
103 | |||
104 | public BaseOpenSimServer() | 99 | public BaseOpenSimServer() |
105 | { | 100 | { |
106 | m_startuptime = DateTime.Now; | 101 | m_startuptime = DateTime.Now; |
@@ -177,10 +172,6 @@ namespace OpenSim.Framework.Servers | |||
177 | "show info", | 172 | "show info", |
178 | "Show general information about the server", HandleShow); | 173 | "Show general information about the server", HandleShow); |
179 | 174 | ||
180 | m_console.Commands.AddCommand("General", false, "show stats", | ||
181 | "show stats", | ||
182 | "Show statistics", HandleShow); | ||
183 | |||
184 | m_console.Commands.AddCommand("General", false, "show threads", | 175 | m_console.Commands.AddCommand("General", false, "show threads", |
185 | "show threads", | 176 | "show threads", |
186 | "Show thread status", HandleShow); | 177 | "Show thread status", HandleShow); |
@@ -226,12 +217,7 @@ namespace OpenSim.Framework.Servers | |||
226 | { | 217 | { |
227 | StringBuilder sb = new StringBuilder("DIAGNOSTICS\n\n"); | 218 | StringBuilder sb = new StringBuilder("DIAGNOSTICS\n\n"); |
228 | sb.Append(GetUptimeReport()); | 219 | sb.Append(GetUptimeReport()); |
229 | 220 | sb.Append(StatsManager.SimExtraStats.Report()); | |
230 | if (m_stats != null) | ||
231 | { | ||
232 | sb.Append(m_stats.Report()); | ||
233 | } | ||
234 | |||
235 | sb.Append(Environment.NewLine); | 221 | sb.Append(Environment.NewLine); |
236 | sb.Append(GetThreadsReport()); | 222 | sb.Append(GetThreadsReport()); |
237 | 223 | ||
@@ -382,10 +368,6 @@ namespace OpenSim.Framework.Servers | |||
382 | { | 368 | { |
383 | Notice("set log level [level] - change the console logging level only. For example, off or debug."); | 369 | Notice("set log level [level] - change the console logging level only. For example, off or debug."); |
384 | Notice("show info - show server information (e.g. startup path)."); | 370 | Notice("show info - show server information (e.g. startup path)."); |
385 | |||
386 | if (m_stats != null) | ||
387 | Notice("show stats - show statistical information for this server"); | ||
388 | |||
389 | Notice("show threads - list tracked threads"); | 371 | Notice("show threads - list tracked threads"); |
390 | Notice("show uptime - show server startup time and uptime."); | 372 | Notice("show uptime - show server startup time and uptime."); |
391 | Notice("show version - show server version."); | 373 | Notice("show version - show server version."); |
@@ -409,11 +391,6 @@ namespace OpenSim.Framework.Servers | |||
409 | ShowInfo(); | 391 | ShowInfo(); |
410 | break; | 392 | break; |
411 | 393 | ||
412 | case "stats": | ||
413 | if (m_stats != null) | ||
414 | Notice(m_stats.Report()); | ||
415 | break; | ||
416 | |||
417 | case "threads": | 394 | case "threads": |
418 | Notice(GetThreadsReport()); | 395 | Notice(GetThreadsReport()); |
419 | break; | 396 | break; |
@@ -604,8 +581,7 @@ namespace OpenSim.Framework.Servers | |||
604 | 581 | ||
605 | public string osSecret { | 582 | public string osSecret { |
606 | // Secret uuid for the simulator | 583 | // Secret uuid for the simulator |
607 | get { return m_osSecret; } | 584 | get { return m_osSecret; } |
608 | |||
609 | } | 585 | } |
610 | 586 | ||
611 | public string StatReport(IOSHttpRequest httpRequest) | 587 | public string StatReport(IOSHttpRequest httpRequest) |
@@ -613,11 +589,11 @@ namespace OpenSim.Framework.Servers | |||
613 | // If we catch a request for "callback", wrap the response in the value for jsonp | 589 | // If we catch a request for "callback", wrap the response in the value for jsonp |
614 | if (httpRequest.Query.ContainsKey("callback")) | 590 | if (httpRequest.Query.ContainsKey("callback")) |
615 | { | 591 | { |
616 | return httpRequest.Query["callback"].ToString() + "(" + m_stats.XReport((DateTime.Now - m_startuptime).ToString() , m_version) + ");"; | 592 | return httpRequest.Query["callback"].ToString() + "(" + StatsManager.SimExtraStats.XReport((DateTime.Now - m_startuptime).ToString() , m_version) + ");"; |
617 | } | 593 | } |
618 | else | 594 | else |
619 | { | 595 | { |
620 | return m_stats.XReport((DateTime.Now - m_startuptime).ToString() , m_version); | 596 | return StatsManager.SimExtraStats.XReport((DateTime.Now - m_startuptime).ToString() , m_version); |
621 | } | 597 | } |
622 | } | 598 | } |
623 | 599 | ||