aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework/Servers
diff options
context:
space:
mode:
authorDiva Canto2012-09-20 15:51:27 -0700
committerDiva Canto2012-09-20 15:51:27 -0700
commit33aa6d172f29a8d34ae1d1f75e506b2e5eb681d7 (patch)
tree55a191ba66b585e7cb1531257e4326529779702f /OpenSim/Framework/Servers
parentMore HG2.0: Added permission policies in HGAsset Service based on asset types... (diff)
parentInsert a new log level 4 for HTTP IN and HTTP OUT that will log how long the ... (diff)
downloadopensim-SC_OLD-33aa6d172f29a8d34ae1d1f75e506b2e5eb681d7.zip
opensim-SC_OLD-33aa6d172f29a8d34ae1d1f75e506b2e5eb681d7.tar.gz
opensim-SC_OLD-33aa6d172f29a8d34ae1d1f75e506b2e5eb681d7.tar.bz2
opensim-SC_OLD-33aa6d172f29a8d34ae1d1f75e506b2e5eb681d7.tar.xz
Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
Diffstat (limited to 'OpenSim/Framework/Servers')
-rw-r--r--OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs47
-rw-r--r--OpenSim/Framework/Servers/MainServer.cs101
2 files changed, 111 insertions, 37 deletions
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
index 43a19fa..4e04dd8 100644
--- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
+++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
@@ -54,6 +54,12 @@ namespace OpenSim.Framework.Servers.HttpServer
54 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 54 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
55 private HttpServerLogWriter httpserverlog = new HttpServerLogWriter(); 55 private HttpServerLogWriter httpserverlog = new HttpServerLogWriter();
56 56
57 /// <summary>
58 /// Gets or sets the debug level.
59 /// </summary>
60 /// <value>
61 /// See MainServer.DebugLevel.
62 /// </value>
57 public int DebugLevel { get; set; } 63 public int DebugLevel { get; set; }
58 64
59 private volatile int NotSocketErrors = 0; 65 private volatile int NotSocketErrors = 0;
@@ -529,8 +535,8 @@ namespace OpenSim.Framework.Servers.HttpServer
529 535
530 if (DebugLevel >= 3) 536 if (DebugLevel >= 3)
531 m_log.DebugFormat( 537 m_log.DebugFormat(
532 "[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}", 538 "[BASE HTTP SERVER]: HTTP IN {0} content type handler {1} {2} from {3}",
533 request.ContentType, request.HttpMethod, request.Url.PathAndQuery); 539 request.ContentType, request.HttpMethod, request.Url.PathAndQuery, request.RemoteIPEndPoint);
534 540
535 buffer = HandleHTTPRequest(request, response); 541 buffer = HandleHTTPRequest(request, response);
536 break; 542 break;
@@ -541,8 +547,8 @@ namespace OpenSim.Framework.Servers.HttpServer
541 547
542 if (DebugLevel >= 3) 548 if (DebugLevel >= 3)
543 m_log.DebugFormat( 549 m_log.DebugFormat(
544 "[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}", 550 "[BASE HTTP SERVER]: HTTP IN {0} content type handler {1} {2} from {3}",
545 request.ContentType, request.HttpMethod, request.Url.PathAndQuery); 551 request.ContentType, request.HttpMethod, request.Url.PathAndQuery, request.RemoteIPEndPoint);
546 552
547 buffer = HandleLLSDRequests(request, response); 553 buffer = HandleLLSDRequests(request, response);
548 break; 554 break;
@@ -640,7 +646,18 @@ namespace OpenSim.Framework.Servers.HttpServer
640 uriString, 646 uriString,
641 requestHandler != null ? requestHandler.Name : "", 647 requestHandler != null ? requestHandler.Name : "",
642 requestHandler != null ? requestHandler.Description : "", 648 requestHandler != null ? requestHandler.Description : "",
643 request.RemoteIPEndPoint.ToString(), 649 request.RemoteIPEndPoint,
650 tickdiff);
651 }
652 else if (DebugLevel >= 4)
653 {
654 m_log.DebugFormat(
655 "[BASE HTTP SERVER]: HTTP IN {0} {1} {2} {3} from {4} took {5}ms",
656 requestMethod,
657 uriString,
658 requestHandler != null ? requestHandler.Name : "",
659 requestHandler != null ? requestHandler.Description : "",
660 request.RemoteIPEndPoint,
644 tickdiff); 661 tickdiff);
645 } 662 }
646 } 663 }
@@ -649,30 +666,30 @@ namespace OpenSim.Framework.Servers.HttpServer
649 private void LogIncomingToStreamHandler(OSHttpRequest request, IRequestHandler requestHandler) 666 private void LogIncomingToStreamHandler(OSHttpRequest request, IRequestHandler requestHandler)
650 { 667 {
651 m_log.DebugFormat( 668 m_log.DebugFormat(
652 "[BASE HTTP SERVER]: Found stream handler for {0} {1} {2} {3}", 669 "[BASE HTTP SERVER]: HTTP IN stream handler {0} {1} {2} {3} from {4}",
653 request.HttpMethod, request.Url.PathAndQuery, requestHandler.Name, requestHandler.Description); 670 request.HttpMethod, request.Url.PathAndQuery, requestHandler.Name, requestHandler.Description, request.RemoteIPEndPoint);
654 671
655 if (DebugLevel >= 4) 672 if (DebugLevel >= 5)
656 LogIncomingInDetail(request); 673 LogIncomingInDetail(request);
657 } 674 }
658 675
659 private void LogIncomingToContentTypeHandler(OSHttpRequest request) 676 private void LogIncomingToContentTypeHandler(OSHttpRequest request)
660 { 677 {
661 m_log.DebugFormat( 678 m_log.DebugFormat(
662 "[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}", 679 "[BASE HTTP SERVER]: HTTP IN {0} content type handler {1} {2} from {3}",
663 request.ContentType, request.HttpMethod, request.Url.PathAndQuery); 680 request.ContentType, request.HttpMethod, request.Url.PathAndQuery, request.RemoteIPEndPoint);
664 681
665 if (DebugLevel >= 4) 682 if (DebugLevel >= 5)
666 LogIncomingInDetail(request); 683 LogIncomingInDetail(request);
667 } 684 }
668 685
669 private void LogIncomingToXmlRpcHandler(OSHttpRequest request) 686 private void LogIncomingToXmlRpcHandler(OSHttpRequest request)
670 { 687 {
671 m_log.DebugFormat( 688 m_log.DebugFormat(
672 "[BASE HTTP SERVER]: Assuming a generic XMLRPC request for {0} {1}", 689 "[BASE HTTP SERVER]: HTTP IN assumed generic XMLRPC request {0} {1} from {2}",
673 request.HttpMethod, request.Url.PathAndQuery); 690 request.HttpMethod, request.Url.PathAndQuery, request.RemoteIPEndPoint);
674 691
675 if (DebugLevel >= 4) 692 if (DebugLevel >= 5)
676 LogIncomingInDetail(request); 693 LogIncomingInDetail(request);
677 } 694 }
678 695
@@ -682,7 +699,7 @@ namespace OpenSim.Framework.Servers.HttpServer
682 { 699 {
683 string output; 700 string output;
684 701
685 if (DebugLevel == 4) 702 if (DebugLevel == 5)
686 { 703 {
687 const int sampleLength = 80; 704 const int sampleLength = 80;
688 char[] sampleChars = new char[sampleLength]; 705 char[] sampleChars = new char[sampleLength];
diff --git a/OpenSim/Framework/Servers/MainServer.cs b/OpenSim/Framework/Servers/MainServer.cs
index 7402c73..72f9cce 100644
--- a/OpenSim/Framework/Servers/MainServer.cs
+++ b/OpenSim/Framework/Servers/MainServer.cs
@@ -48,9 +48,12 @@ namespace OpenSim.Framework.Servers
48 /// Control the printing of certain debug messages. 48 /// Control the printing of certain debug messages.
49 /// </summary> 49 /// </summary>
50 /// <remarks> 50 /// <remarks>
51 /// If DebugLevel >= 1, then short warnings are logged when receiving bad input data. 51 /// If DebugLevel >= 1 then short warnings are logged when receiving bad input data.
52 /// If DebugLevel >= 2, then long warnings are logged when receiving bad input data. 52 /// If DebugLevel >= 2 then long warnings are logged when receiving bad input data.
53 /// If DebugLevel >= 3, then short notices about all incoming non-poll HTTP requests are logged. 53 /// If DebugLevel >= 3 then short notices about all incoming non-poll HTTP requests are logged.
54 /// If DebugLevel >= 4 then the time taken to fulfill the request is logged.
55 /// If DebugLevel >= 5 then the start of the body of incoming non-poll HTTP requests will be logged.
56 /// If DebugLevel >= 6 then the entire body of incoming non-poll HTTP requests will be logged.
54 /// </remarks> 57 /// </remarks>
55 public static int DebugLevel 58 public static int DebugLevel
56 { 59 {
@@ -102,7 +105,6 @@ namespace OpenSim.Framework.Servers
102 get { return new Dictionary<uint, BaseHttpServer>(m_Servers); } 105 get { return new Dictionary<uint, BaseHttpServer>(m_Servers); }
103 } 106 }
104 107
105
106 public static void RegisterHttpConsoleCommands(ICommandConsole console) 108 public static void RegisterHttpConsoleCommands(ICommandConsole console)
107 { 109 {
108 console.Commands.AddCommand( 110 console.Commands.AddCommand(
@@ -111,15 +113,20 @@ namespace OpenSim.Framework.Servers
111 "Show all registered http handlers", HandleShowHttpHandlersCommand); 113 "Show all registered http handlers", HandleShowHttpHandlersCommand);
112 114
113 console.Commands.AddCommand( 115 console.Commands.AddCommand(
114 "Debug", false, "debug http", "debug http [<level>]", 116 "Debug", false, "debug http", "debug http <in|out|all> [<level>]",
115 "Turn on inbound non-poll http request debugging.", 117 "Turn on http request logging.",
116 "If level <= 0, then no extra logging is done.\n" 118 "If in or all and\n"
117 + "If level >= 1, then short warnings are logged when receiving bad input data.\n" 119 + " level <= 0 then no extra logging is done.\n"
118 + "If level >= 2, then long warnings are logged when receiving bad input data.\n" 120 + " level >= 1 then short warnings are logged when receiving bad input data.\n"
119 + "If level >= 3, then short notices about all incoming non-poll HTTP requests are logged.\n" 121 + " level >= 2 then long warnings are logged when receiving bad input data.\n"
120 + "If level >= 4, then a sample from the beginning of the incoming data is logged.\n" 122 + " level >= 3 then short notices about all incoming non-poll HTTP requests are logged.\n"
121 + "If level >= 5, then the entire incoming data is logged.\n" 123 + " level >= 4 then the time taken to fulfill the request is logged.\n"
122 + "If no level is specified then the current level is returned.", 124 + " level >= 5 then a sample from the beginning of the incoming data is logged.\n"
125 + " level >= 6 then the entire incoming data is logged.\n"
126 + " no level is specified then the current level is returned.\n\n"
127 + "If out or all and\n"
128 + " level >= 3 then short notices about all outgoing requests going through WebUtil are logged.\n"
129 + " level >= 4 then the time taken to fulfill the request is logged.\n",
123 HandleDebugHttpCommand); 130 HandleDebugHttpCommand);
124 } 131 }
125 132
@@ -127,24 +134,74 @@ namespace OpenSim.Framework.Servers
127 /// Turn on some debugging values for OpenSim. 134 /// Turn on some debugging values for OpenSim.
128 /// </summary> 135 /// </summary>
129 /// <param name="args"></param> 136 /// <param name="args"></param>
130 private static void HandleDebugHttpCommand(string module, string[] args) 137 private static void HandleDebugHttpCommand(string module, string[] cmdparams)
131 { 138 {
132 if (args.Length == 3) 139 if (cmdparams.Length < 3)
140 {
141 MainConsole.Instance.Output("Usage: debug http <in|out|all> 0..6");
142 return;
143 }
144
145 bool inReqs = false;
146 bool outReqs = false;
147 bool allReqs = false;
148
149 string subCommand = cmdparams[2];
150
151 if (subCommand.ToLower() == "in")
152 {
153 inReqs = true;
154 }
155 else if (subCommand.ToLower() == "out")
156 {
157 outReqs = true;
158 }
159 else if (subCommand.ToLower() == "all")
160 {
161 allReqs = true;
162 }
163 else
133 { 164 {
165 MainConsole.Instance.Output("You must specify in, out or all");
166 return;
167 }
168
169 if (cmdparams.Length >= 4)
170 {
171 string rawNewDebug = cmdparams[3];
134 int newDebug; 172 int newDebug;
135 if (int.TryParse(args[2], out newDebug)) 173
174 if (!int.TryParse(rawNewDebug, out newDebug))
175 {
176 MainConsole.Instance.OutputFormat("{0} is not a valid debug level", rawNewDebug);
177 return;
178 }
179
180 if (newDebug < 0 || newDebug > 5)
181 {
182 MainConsole.Instance.OutputFormat("{0} is outside the valid debug level range of 0..5", newDebug);
183 return;
184 }
185
186 if (allReqs || inReqs)
136 { 187 {
137 MainServer.DebugLevel = newDebug; 188 MainServer.DebugLevel = newDebug;
138 MainConsole.Instance.OutputFormat("Debug http level set to {0}", newDebug); 189 MainConsole.Instance.OutputFormat("IN debug level set to {0}", newDebug);
190 }
191
192 if (allReqs || outReqs)
193 {
194 WebUtil.DebugLevel = newDebug;
195 MainConsole.Instance.OutputFormat("OUT debug level set to {0}", newDebug);
139 } 196 }
140 }
141 else if (args.Length == 2)
142 {
143 MainConsole.Instance.OutputFormat("Current debug http level is {0}", MainServer.DebugLevel);
144 } 197 }
145 else 198 else
146 { 199 {
147 MainConsole.Instance.Output("Usage: debug http 0..5"); 200 if (allReqs || inReqs)
201 MainConsole.Instance.OutputFormat("Current IN debug level is {0}", MainServer.DebugLevel);
202
203 if (allReqs || outReqs)
204 MainConsole.Instance.OutputFormat("Current OUT debug level is {0}", WebUtil.DebugLevel);
148 } 205 }
149 } 206 }
150 207