Add the experimental ability to dump stats (result of command "show stats all") to file OpenSimStats.log every 5 seconds.

This can currently only be activated with the console command "debug stats record start".
Off by default.
Records to file OpenSimStats.log for simulator and RobustStats.log for ROBUST
TeleportWork
Justin Clark-Casey (justincc) 2013-08-06 18:29:33 +01:00
parent ac198068ab
commit 4c2f6de8e4
5 changed files with 139 additions and 13 deletions

View File

@ -81,6 +81,8 @@ namespace OpenSim.Framework.Monitoring
+ "More than one name can be given separated by spaces.\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);
StatsLogger.RegisterConsoleCommands(console);
} }
public static void HandleShowStatsCommand(string module, string[] cmd) public static void HandleShowStatsCommand(string module, string[] cmd)
@ -145,29 +147,55 @@ namespace OpenSim.Framework.Monitoring
} }
} }
public static List<string> GetAllStatsReports()
{
List<string> reports = new List<string>();
foreach (var category in RegisteredStats.Values)
reports.AddRange(GetCategoryStatsReports(category));
return reports;
}
private static void OutputAllStatsToConsole(ICommandConsole con) private static void OutputAllStatsToConsole(ICommandConsole con)
{ {
foreach (var category in RegisteredStats.Values) foreach (string report in GetAllStatsReports())
{ con.Output(report);
OutputCategoryStatsToConsole(con, category);
} }
private static List<string> GetCategoryStatsReports(
SortedDictionary<string, SortedDictionary<string, Stat>> category)
{
List<string> reports = new List<string>();
foreach (var container in category.Values)
reports.AddRange(GetContainerStatsReports(container));
return reports;
} }
private static void OutputCategoryStatsToConsole( private static void OutputCategoryStatsToConsole(
ICommandConsole con, SortedDictionary<string, SortedDictionary<string, Stat>> category) ICommandConsole con, SortedDictionary<string, SortedDictionary<string, Stat>> category)
{ {
foreach (var container in category.Values) foreach (string report in GetCategoryStatsReports(category))
{ con.Output(report);
OutputContainerStatsToConsole(con, container);
}
} }
private static void OutputContainerStatsToConsole( ICommandConsole con, SortedDictionary<string, Stat> container) private static List<string> GetContainerStatsReports(SortedDictionary<string, Stat> container)
{ {
List<string> reports = new List<string>();
foreach (Stat stat in container.Values) foreach (Stat stat in container.Values)
{ reports.Add(stat.ToConsoleString());
con.Output(stat.ToConsoleString());
return reports;
} }
private static void OutputContainerStatsToConsole(
ICommandConsole con, SortedDictionary<string, Stat> container)
{
foreach (string report in GetContainerStatsReports(container))
con.Output(report);
} }
// Creates an OSDMap of the format: // Creates an OSDMap of the format:

View File

@ -11,22 +11,56 @@
</appSettings> </appSettings>
<log4net> <log4net>
<appender name="Console" type="OpenSim.Framework.Console.OpenSimAppender, OpenSim.Framework.Console"> <appender name="Console" type="OpenSim.Framework.Console.OpenSimAppender, OpenSim.Framework.Console">
<filter type="log4net.Filter.LoggerMatchFilter">
<loggerToMatch value="special"/>
<acceptOnMatch value="false"/>
</filter>
<layout type="log4net.Layout.PatternLayout"> <layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{HH:mm:ss} - %message%newline" /> <conversionPattern value="%date{HH:mm:ss} - %message" />
<!-- console log with milliseconds. Useful for debugging -->
<!-- <conversionPattern value="%date{HH:mm:ss.fff} - %message" /> -->
</layout> </layout>
</appender> </appender>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender"> <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<file value="OpenSim.32BitLaunch.log" /> <file value="OpenSim.32BitLaunch.log" />
<appendToFile value="true" /> <appendToFile value="true" />
<filter type="log4net.Filter.LoggerMatchFilter">
<loggerToMatch value="special"/>
<acceptOnMatch value="false"/>
</filter>
<layout type="log4net.Layout.PatternLayout"> <layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level - %logger %message%newline" /> <conversionPattern value="%date %-5level - %logger %message%newline" />
</layout> </layout>
</appender> </appender>
<appender name="StatsLogFileAppender" type="log4net.Appender.FileAppender">
<file value="OpenSimStats.log"/>
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date - %message%newline" />
</layout>
</appender>
<root> <root>
<level value="DEBUG" /> <level value="DEBUG" />
<appender-ref ref="Console" /> <appender-ref ref="Console" />
<appender-ref ref="LogFileAppender" /> <appender-ref ref="LogFileAppender" />
</root> </root>
<!-- Independently control logging level for XEngine -->
<logger name="OpenSim.Region.ScriptEngine.XEngine">
<level value="INFO"/>
</logger>
<!-- Independently control logging level for per region module loading -->
<logger name="OpenSim.ApplicationPlugins.RegionModulesController.RegionModulesControllerPlugin">
<level value="INFO"/>
</logger>
<!-- used for stats recording -->
<logger name="special.StatsLogger">
<appender-ref ref="StatsLogFileAppender"/>
</logger>
</log4net> </log4net>
</configuration> </configuration>

View File

@ -11,6 +11,10 @@
</appSettings> </appSettings>
<log4net> <log4net>
<appender name="Console" type="OpenSim.Framework.Console.OpenSimAppender, OpenSim.Framework.Console"> <appender name="Console" type="OpenSim.Framework.Console.OpenSimAppender, OpenSim.Framework.Console">
<filter type="log4net.Filter.LoggerMatchFilter">
<loggerToMatch value="special"/>
<acceptOnMatch value="false"/>
</filter>
<layout type="log4net.Layout.PatternLayout"> <layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{HH:mm:ss} - %message" /> <conversionPattern value="%date{HH:mm:ss} - %message" />
<!-- console log with milliseconds. Useful for debugging --> <!-- console log with milliseconds. Useful for debugging -->
@ -21,11 +25,23 @@
<appender name="LogFileAppender" type="log4net.Appender.FileAppender"> <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<file value="OpenSim.log" /> <file value="OpenSim.log" />
<appendToFile value="true" /> <appendToFile value="true" />
<filter type="log4net.Filter.LoggerMatchFilter">
<loggerToMatch value="special"/>
<acceptOnMatch value="false"/>
</filter>
<layout type="log4net.Layout.PatternLayout"> <layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level - %logger %message%newline" /> <conversionPattern value="%date %-5level - %logger %message%newline" />
</layout> </layout>
</appender> </appender>
<appender name="StatsLogFileAppender" type="log4net.Appender.FileAppender">
<file value="OpenSimStats.log"/>
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date - %message%newline" />
</layout>
</appender>
<root> <root>
<level value="DEBUG" /> <level value="DEBUG" />
<appender-ref ref="Console" /> <appender-ref ref="Console" />
@ -42,5 +58,10 @@
<level value="INFO"/> <level value="INFO"/>
</logger> </logger>
<!-- used for stats recording -->
<logger name="special.StatsLogger">
<appender-ref ref="StatsLogFileAppender"/>
</logger>
</log4net> </log4net>
</configuration> </configuration>

View File

@ -11,22 +11,44 @@
</appSettings> </appSettings>
<log4net> <log4net>
<appender name="Console" type="OpenSim.Framework.Console.OpenSimAppender, OpenSim.Framework.Console"> <appender name="Console" type="OpenSim.Framework.Console.OpenSimAppender, OpenSim.Framework.Console">
<filter type="log4net.Filter.LoggerMatchFilter">
<loggerToMatch value="special"/>
<acceptOnMatch value="false"/>
</filter>
<layout type="log4net.Layout.PatternLayout"> <layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{HH:mm:ss} - %message%newline" /> <conversionPattern value="%date{HH:mm:ss} - %message%newline" />
</layout> </layout>
</appender> </appender>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender"> <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<file value="Robust.32BitLaunch.log" /> <file value="Robust.32BitLaunch.log" />
<appendToFile value="true" /> <appendToFile value="true" />
<filter type="log4net.Filter.LoggerMatchFilter">
<loggerToMatch value="special"/>
<acceptOnMatch value="false"/>
</filter>
<layout type="log4net.Layout.PatternLayout"> <layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level - %logger %message%newline" /> <conversionPattern value="%date %-5level - %logger %message%newline" />
</layout> </layout>
</appender> </appender>
<appender name="StatsLogFileAppender" type="log4net.Appender.FileAppender">
<file value="RobustStats.log"/>
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date - %message%newline" />
</layout>
</appender>
<root> <root>
<level value="DEBUG" /> <level value="DEBUG" />
<appender-ref ref="Console" /> <appender-ref ref="Console" />
<appender-ref ref="LogFileAppender" /> <appender-ref ref="LogFileAppender" />
</root> </root>
<!-- used for stats recording -->
<logger name="special.StatsLogger">
<appender-ref ref="StatsLogFileAppender"/>
</logger>
</log4net> </log4net>
</configuration> </configuration>

View File

@ -11,6 +11,10 @@
</appSettings> </appSettings>
<log4net> <log4net>
<appender name="Console" type="OpenSim.Framework.Console.OpenSimAppender, OpenSim.Framework.Console"> <appender name="Console" type="OpenSim.Framework.Console.OpenSimAppender, OpenSim.Framework.Console">
<filter type="log4net.Filter.LoggerMatchFilter">
<loggerToMatch value="special"/>
<acceptOnMatch value="false"/>
</filter>
<layout type="log4net.Layout.PatternLayout"> <layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{HH:mm:ss} - %message%newline" /> <conversionPattern value="%date{HH:mm:ss} - %message%newline" />
</layout> </layout>
@ -19,15 +23,32 @@
<appender name="LogFileAppender" type="log4net.Appender.FileAppender"> <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<file value="Robust.log" /> <file value="Robust.log" />
<appendToFile value="true" /> <appendToFile value="true" />
<filter type="log4net.Filter.LoggerMatchFilter">
<loggerToMatch value="special"/>
<acceptOnMatch value="false"/>
</filter>
<layout type="log4net.Layout.PatternLayout"> <layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level - %logger %message%newline" /> <conversionPattern value="%date %-5level - %logger %message%newline" />
</layout> </layout>
</appender> </appender>
<appender name="StatsLogFileAppender" type="log4net.Appender.FileAppender">
<file value="RobustStats.log"/>
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date - %message%newline" />
</layout>
</appender>
<root> <root>
<level value="DEBUG" /> <level value="DEBUG" />
<appender-ref ref="Console" /> <appender-ref ref="Console" />
<appender-ref ref="LogFileAppender" /> <appender-ref ref="LogFileAppender" />
</root> </root>
<!-- used for stats recording -->
<logger name="special.StatsLogger">
<appender-ref ref="StatsLogFileAppender"/>
</logger>
</log4net> </log4net>
</configuration> </configuration>