diff options
author | Justin Clark-Casey (justincc) | 2012-12-12 23:13:34 +0000 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2012-12-12 23:13:34 +0000 |
commit | 047270bdc83d029486215a418fada27b225dbab0 (patch) | |
tree | 8bb1b091b67d322a56ae1d25bb5511a23369c03a /OpenSim | |
parent | Add asset id to "show script" and "show scripts" command output to make it ea... (diff) | |
download | opensim-SC-047270bdc83d029486215a418fada27b225dbab0.zip opensim-SC-047270bdc83d029486215a418fada27b225dbab0.tar.gz opensim-SC-047270bdc83d029486215a418fada27b225dbab0.tar.bz2 opensim-SC-047270bdc83d029486215a418fada27b225dbab0.tar.xz |
Add "debug script log" command to allow setting a numeric debug level on individual IScriptInstances for debugging purposes.
Current, state changes and event fires can be logged for individual scripts.
See command help for more details.
Diffstat (limited to 'OpenSim')
-rw-r--r-- | OpenSim/Framework/Console/ConsoleUtil.cs | 28 | ||||
-rw-r--r-- | OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs | 12 | ||||
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs | 37 | ||||
-rw-r--r-- | OpenSim/Region/ScriptEngine/XEngine/XEngine.cs | 53 |
4 files changed, 113 insertions, 17 deletions
diff --git a/OpenSim/Framework/Console/ConsoleUtil.cs b/OpenSim/Framework/Console/ConsoleUtil.cs index 16a63e0..dff956a 100644 --- a/OpenSim/Framework/Console/ConsoleUtil.cs +++ b/OpenSim/Framework/Console/ConsoleUtil.cs | |||
@@ -97,7 +97,7 @@ namespace OpenSim.Framework.Console | |||
97 | if (!UUID.TryParse(rawUuid, out uuid)) | 97 | if (!UUID.TryParse(rawUuid, out uuid)) |
98 | { | 98 | { |
99 | if (console != null) | 99 | if (console != null) |
100 | console.OutputFormat("{0} is not a valid uuid", rawUuid); | 100 | console.OutputFormat("ERROR: {0} is not a valid uuid", rawUuid); |
101 | 101 | ||
102 | return false; | 102 | return false; |
103 | } | 103 | } |
@@ -110,7 +110,7 @@ namespace OpenSim.Framework.Console | |||
110 | if (!uint.TryParse(rawLocalId, out localId)) | 110 | if (!uint.TryParse(rawLocalId, out localId)) |
111 | { | 111 | { |
112 | if (console != null) | 112 | if (console != null) |
113 | console.OutputFormat("{0} is not a valid local id", localId); | 113 | console.OutputFormat("ERROR: {0} is not a valid local id", localId); |
114 | 114 | ||
115 | return false; | 115 | return false; |
116 | } | 116 | } |
@@ -118,7 +118,7 @@ namespace OpenSim.Framework.Console | |||
118 | if (localId == 0) | 118 | if (localId == 0) |
119 | { | 119 | { |
120 | if (console != null) | 120 | if (console != null) |
121 | console.OutputFormat("{0} is not a valid local id - it must be greater than 0", localId); | 121 | console.OutputFormat("ERROR: {0} is not a valid local id - it must be greater than 0", localId); |
122 | 122 | ||
123 | return false; | 123 | return false; |
124 | } | 124 | } |
@@ -150,10 +150,30 @@ namespace OpenSim.Framework.Console | |||
150 | } | 150 | } |
151 | 151 | ||
152 | if (console != null) | 152 | if (console != null) |
153 | console.OutputFormat("{0} is not a valid UUID or local id", rawId); | 153 | console.OutputFormat("ERROR: {0} is not a valid UUID or local id", rawId); |
154 | 154 | ||
155 | return false; | 155 | return false; |
156 | } | 156 | } |
157 | |||
158 | /// <summary> | ||
159 | /// Convert a minimum vector input from the console to an OpenMetaverse.Vector3 | ||
160 | /// </summary> | ||
161 | /// <param name='console'>Can be null if no console is available.</param> | ||
162 | /// <param name='rawConsoleVector'>/param> | ||
163 | /// <param name='vector'></param> | ||
164 | /// <returns></returns> | ||
165 | public static bool TryParseConsoleInt(ICommandConsole console, string rawConsoleInt, out int i) | ||
166 | { | ||
167 | if (!int.TryParse(rawConsoleInt, out i)) | ||
168 | { | ||
169 | if (console != null) | ||
170 | console.OutputFormat("ERROR: {0} is not a valid integer", rawConsoleInt); | ||
171 | |||
172 | return false; | ||
173 | } | ||
174 | |||
175 | return true; | ||
176 | } | ||
157 | 177 | ||
158 | /// <summary> | 178 | /// <summary> |
159 | /// Convert a minimum vector input from the console to an OpenMetaverse.Vector3 | 179 | /// Convert a minimum vector input from the console to an OpenMetaverse.Vector3 |
diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs index 0cef550..00a99c3 100644 --- a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs +++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs | |||
@@ -59,6 +59,18 @@ namespace OpenSim.Region.ScriptEngine.Interfaces | |||
59 | public interface IScriptInstance | 59 | public interface IScriptInstance |
60 | { | 60 | { |
61 | /// <summary> | 61 | /// <summary> |
62 | /// Debug level for this script instance. | ||
63 | /// </summary> | ||
64 | /// <remarks> | ||
65 | /// Level == 0, no extra data is logged. | ||
66 | /// Level >= 1, state changes are logged. | ||
67 | /// Level >= 2, event firing is logged. | ||
68 | /// <value> | ||
69 | /// The debug level. | ||
70 | /// </value> | ||
71 | int DebugLevel { get; set; } | ||
72 | |||
73 | /// <summary> | ||
62 | /// Is the script currently running? | 74 | /// Is the script currently running? |
63 | /// </summary> | 75 | /// </summary> |
64 | bool Running { get; set; } | 76 | bool Running { get; set; } |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs index 5ad6eeb..435e9dc 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs | |||
@@ -93,6 +93,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
93 | private UUID m_CurrentStateHash; | 93 | private UUID m_CurrentStateHash; |
94 | private UUID m_RegionID; | 94 | private UUID m_RegionID; |
95 | 95 | ||
96 | public int DebugLevel { get; set; } | ||
97 | |||
96 | public Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> LineMap { get; set; } | 98 | public Dictionary<KeyValuePair<int, int>, KeyValuePair<int, int>> LineMap { get; set; } |
97 | 99 | ||
98 | private Dictionary<string,IScriptApi> m_Apis = new Dictionary<string,IScriptApi>(); | 100 | private Dictionary<string,IScriptApi> m_Apis = new Dictionary<string,IScriptApi>(); |
@@ -703,21 +705,42 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
703 | if (data.EventName == "collision") | 705 | if (data.EventName == "collision") |
704 | m_CollisionInQueue = false; | 706 | m_CollisionInQueue = false; |
705 | } | 707 | } |
706 | 708 | ||
707 | // m_log.DebugFormat("[XEngine]: Processing event {0} for {1}", data.EventName, this); | 709 | SceneObjectPart part = Engine.World.GetSceneObjectPart(LocalID); |
710 | |||
711 | if (DebugLevel >= 2) | ||
712 | m_log.DebugFormat( | ||
713 | "[SCRIPT INSTANCE]: Processing event {0} for {1}/{2}({3})/{4}({5}) @ {6}/{7}", | ||
714 | data.EventName, | ||
715 | ScriptName, | ||
716 | part.Name, | ||
717 | part.LocalId, | ||
718 | part.ParentGroup.Name, | ||
719 | part.ParentGroup.UUID, | ||
720 | part.AbsolutePosition, | ||
721 | part.ParentGroup.Scene.Name); | ||
708 | 722 | ||
709 | m_DetectParams = data.DetectParams; | 723 | m_DetectParams = data.DetectParams; |
710 | 724 | ||
711 | if (data.EventName == "state") // Hardcoded state change | 725 | if (data.EventName == "state") // Hardcoded state change |
712 | { | 726 | { |
713 | // m_log.DebugFormat("[Script] Script {0}.{1} state set to {2}", | ||
714 | // PrimName, ScriptName, data.Params[0].ToString()); | ||
715 | State = data.Params[0].ToString(); | 727 | State = data.Params[0].ToString(); |
728 | |||
729 | if (DebugLevel >= 1) | ||
730 | m_log.DebugFormat( | ||
731 | "[SCRIPT INSTANCE]: Changing state to {0} for {1}/{2}({3})/{4}({5}) @ {6}/{7}", | ||
732 | State, | ||
733 | ScriptName, | ||
734 | part.Name, | ||
735 | part.LocalId, | ||
736 | part.ParentGroup.Name, | ||
737 | part.ParentGroup.UUID, | ||
738 | part.AbsolutePosition, | ||
739 | part.ParentGroup.Scene.Name); | ||
740 | |||
716 | AsyncCommandManager.RemoveScript(Engine, | 741 | AsyncCommandManager.RemoveScript(Engine, |
717 | LocalID, ItemID); | 742 | LocalID, ItemID); |
718 | 743 | ||
719 | SceneObjectPart part = Engine.World.GetSceneObjectPart( | ||
720 | LocalID); | ||
721 | if (part != null) | 744 | if (part != null) |
722 | { | 745 | { |
723 | part.SetScriptEvents(ItemID, | 746 | part.SetScriptEvents(ItemID, |
@@ -729,8 +752,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
729 | if (Engine.World.PipeEventsForScript(LocalID) || | 752 | if (Engine.World.PipeEventsForScript(LocalID) || |
730 | data.EventName == "control") // Don't freeze avies! | 753 | data.EventName == "control") // Don't freeze avies! |
731 | { | 754 | { |
732 | SceneObjectPart part = Engine.World.GetSceneObjectPart( | ||
733 | LocalID); | ||
734 | // m_log.DebugFormat("[Script] Delivered event {2} in state {3} to {0}.{1}", | 755 | // m_log.DebugFormat("[Script] Delivered event {2} in state {3} to {0}.{1}", |
735 | // PrimName, ScriptName, data.EventName, State); | 756 | // PrimName, ScriptName, data.EventName, State); |
736 | 757 | ||
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs index 986f658..828f2fb 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs | |||
@@ -304,7 +304,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
304 | 304 | ||
305 | MainConsole.Instance.Commands.AddCommand( | 305 | MainConsole.Instance.Commands.AddCommand( |
306 | "Scripts", false, "scripts show", "scripts show [<script-item-uuid>]", "Show script information", | 306 | "Scripts", false, "scripts show", "scripts show [<script-item-uuid>]", "Show script information", |
307 | "Show information on all scripts known to the script engine." | 307 | "Show information on all scripts known to the script engine.\n" |
308 | + "If a <script-item-uuid> is given then only information on that script will be shown.", | 308 | + "If a <script-item-uuid> is given then only information on that script will be shown.", |
309 | HandleShowScripts); | 309 | HandleShowScripts); |
310 | 310 | ||
@@ -323,22 +323,30 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
323 | MainConsole.Instance.Commands.AddCommand( | 323 | MainConsole.Instance.Commands.AddCommand( |
324 | "Scripts", false, "scripts resume", "scripts resume [<script-item-uuid>]", "Resumes all suspended scripts", | 324 | "Scripts", false, "scripts resume", "scripts resume [<script-item-uuid>]", "Resumes all suspended scripts", |
325 | "Resumes all currently suspended scripts.\n" | 325 | "Resumes all currently suspended scripts.\n" |
326 | + "Resumed scripts will process all events accumulated whilst suspended." | 326 | + "Resumed scripts will process all events accumulated whilst suspended.\n" |
327 | + "If a <script-item-uuid> is given then only that script will be resumed. Otherwise, all suitable scripts are resumed.", | 327 | + "If a <script-item-uuid> is given then only that script will be resumed. Otherwise, all suitable scripts are resumed.", |
328 | (module, cmdparams) => HandleScriptsAction(cmdparams, HandleResumeScript)); | 328 | (module, cmdparams) => HandleScriptsAction(cmdparams, HandleResumeScript)); |
329 | 329 | ||
330 | MainConsole.Instance.Commands.AddCommand( | 330 | MainConsole.Instance.Commands.AddCommand( |
331 | "Scripts", false, "scripts stop", "scripts stop [<script-item-uuid>]", "Stops all running scripts", | 331 | "Scripts", false, "scripts stop", "scripts stop [<script-item-uuid>]", "Stops all running scripts", |
332 | "Stops all running scripts." | 332 | "Stops all running scripts.\n" |
333 | + "If a <script-item-uuid> is given then only that script will be stopped. Otherwise, all suitable scripts are stopped.", | 333 | + "If a <script-item-uuid> is given then only that script will be stopped. Otherwise, all suitable scripts are stopped.", |
334 | (module, cmdparams) => HandleScriptsAction(cmdparams, HandleStopScript)); | 334 | (module, cmdparams) => HandleScriptsAction(cmdparams, HandleStopScript)); |
335 | 335 | ||
336 | MainConsole.Instance.Commands.AddCommand( | 336 | MainConsole.Instance.Commands.AddCommand( |
337 | "Scripts", false, "scripts start", "scripts start [<script-item-uuid>]", "Starts all stopped scripts", | 337 | "Scripts", false, "scripts start", "scripts start [<script-item-uuid>]", "Starts all stopped scripts", |
338 | "Starts all stopped scripts." | 338 | "Starts all stopped scripts.\n" |
339 | + "If a <script-item-uuid> is given then only that script will be started. Otherwise, all suitable scripts are started.", | 339 | + "If a <script-item-uuid> is given then only that script will be started. Otherwise, all suitable scripts are started.", |
340 | (module, cmdparams) => HandleScriptsAction(cmdparams, HandleStartScript)); | 340 | (module, cmdparams) => HandleScriptsAction(cmdparams, HandleStartScript)); |
341 | 341 | ||
342 | MainConsole.Instance.Commands.AddCommand( | ||
343 | "Scripts", false, "debug script log", "debug scripts log <item-id> <log-level>", "Extra debug logging for a script", | ||
344 | "Activates or deactivates extra debug logging for the given script.\n" | ||
345 | + "Level == 0, deactivate extra debug logging.\n" | ||
346 | + "Level >= 1, log state changes.\n" | ||
347 | + "Level >= 2, log event invocations.\n", | ||
348 | HandleDebugScriptLogCommand); | ||
349 | |||
342 | // MainConsole.Instance.Commands.AddCommand( | 350 | // MainConsole.Instance.Commands.AddCommand( |
343 | // "Debug", false, "debug xengine", "debug xengine [<level>]", | 351 | // "Debug", false, "debug xengine", "debug xengine [<level>]", |
344 | // "Turn on detailed xengine debugging.", | 352 | // "Turn on detailed xengine debugging.", |
@@ -347,6 +355,41 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
347 | // HandleDebugLevelCommand); | 355 | // HandleDebugLevelCommand); |
348 | } | 356 | } |
349 | 357 | ||
358 | private void HandleDebugScriptLogCommand(string module, string[] args) | ||
359 | { | ||
360 | if (!(MainConsole.Instance.ConsoleScene == null || MainConsole.Instance.ConsoleScene == m_Scene)) | ||
361 | return; | ||
362 | |||
363 | if (args.Length != 5) | ||
364 | { | ||
365 | MainConsole.Instance.Output("Usage: debug script log <item-id> <log-level>"); | ||
366 | return; | ||
367 | } | ||
368 | |||
369 | UUID itemId; | ||
370 | |||
371 | if (!ConsoleUtil.TryParseConsoleUuid(MainConsole.Instance, args[3], out itemId)) | ||
372 | return; | ||
373 | |||
374 | int newLevel; | ||
375 | |||
376 | if (!ConsoleUtil.TryParseConsoleInt(MainConsole.Instance, args[4], out newLevel)) | ||
377 | return; | ||
378 | |||
379 | IScriptInstance si; | ||
380 | |||
381 | lock (m_Scripts) | ||
382 | { | ||
383 | // XXX: We can't give the user feedback on a bad item id because this may apply to a different script | ||
384 | // engine | ||
385 | if (!m_Scripts.TryGetValue(itemId, out si)) | ||
386 | return; | ||
387 | } | ||
388 | |||
389 | si.DebugLevel = newLevel; | ||
390 | MainConsole.Instance.OutputFormat("Set debug level of {0} {1} to {2}", si.ScriptName, si.ItemID, newLevel); | ||
391 | } | ||
392 | |||
350 | /// <summary> | 393 | /// <summary> |
351 | /// Change debug level | 394 | /// Change debug level |
352 | /// </summary> | 395 | /// </summary> |
@@ -418,7 +461,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
418 | 461 | ||
419 | if (!UUID.TryParse(rawItemId, out itemId)) | 462 | if (!UUID.TryParse(rawItemId, out itemId)) |
420 | { | 463 | { |
421 | MainConsole.Instance.OutputFormat("Error - {0} is not a valid UUID", rawItemId); | 464 | MainConsole.Instance.OutputFormat("ERROR: {0} is not a valid UUID", rawItemId); |
422 | return; | 465 | return; |
423 | } | 466 | } |
424 | 467 | ||