diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Framework/WebUtil.cs | 151 |
1 files changed, 148 insertions, 3 deletions
diff --git a/OpenSim/Framework/WebUtil.cs b/OpenSim/Framework/WebUtil.cs index b180c8a..94b5230 100644 --- a/OpenSim/Framework/WebUtil.cs +++ b/OpenSim/Framework/WebUtil.cs | |||
@@ -86,7 +86,7 @@ namespace OpenSim.Framework | |||
86 | /// Number of milliseconds a call can take before it is considered | 86 | /// Number of milliseconds a call can take before it is considered |
87 | /// a "long" call for warning & debugging purposes | 87 | /// a "long" call for warning & debugging purposes |
88 | /// </summary> | 88 | /// </summary> |
89 | public const int LongCallTime = 3000; | 89 | public const int LongCallTime = 500; |
90 | 90 | ||
91 | /// <summary> | 91 | /// <summary> |
92 | /// The maximum length of any data logged because of a long request time. | 92 | /// The maximum length of any data logged because of a long request time. |
@@ -205,8 +205,16 @@ namespace OpenSim.Framework | |||
205 | { | 205 | { |
206 | if (DebugLevel == 5) | 206 | if (DebugLevel == 5) |
207 | { | 207 | { |
208 | <<<<<<< HEAD | ||
208 | if (output.Length > MaxRequestDiagLength) | 209 | if (output.Length > MaxRequestDiagLength) |
209 | output = output.Substring(0, MaxRequestDiagLength) + "..."; | 210 | output = output.Substring(0, MaxRequestDiagLength) + "..."; |
211 | ======= | ||
212 | int len = output.Length; | ||
213 | if(len > 80) | ||
214 | len = 80; | ||
215 | output = output.Substring(0, len); | ||
216 | output = output + "..."; | ||
217 | >>>>>>> avn/ubitvar | ||
210 | } | 218 | } |
211 | 219 | ||
212 | m_log.DebugFormat("[LOGHTTP]: {0}{1}", context, Util.BinaryToASCII(output)); | 220 | m_log.DebugFormat("[LOGHTTP]: {0}{1}", context, Util.BinaryToASCII(output)); |
@@ -233,6 +241,9 @@ namespace OpenSim.Framework | |||
233 | string errorMessage = "unknown error"; | 241 | string errorMessage = "unknown error"; |
234 | int tickstart = Util.EnvironmentTickCount(); | 242 | int tickstart = Util.EnvironmentTickCount(); |
235 | int tickdata = 0; | 243 | int tickdata = 0; |
244 | int tickcompressdata = 0; | ||
245 | int tickJsondata = 0; | ||
246 | int compsize = 0; | ||
236 | string strBuffer = null; | 247 | string strBuffer = null; |
237 | 248 | ||
238 | try | 249 | try |
@@ -250,6 +261,8 @@ namespace OpenSim.Framework | |||
250 | { | 261 | { |
251 | strBuffer = OSDParser.SerializeJsonString(data); | 262 | strBuffer = OSDParser.SerializeJsonString(data); |
252 | 263 | ||
264 | tickJsondata = Util.EnvironmentTickCountSubtract(tickstart); | ||
265 | |||
253 | if (DebugLevel >= 5) | 266 | if (DebugLevel >= 5) |
254 | LogOutgoingDetail("SEND", reqnum, strBuffer); | 267 | LogOutgoingDetail("SEND", reqnum, strBuffer); |
255 | 268 | ||
@@ -271,13 +284,23 @@ namespace OpenSim.Framework | |||
271 | // gets written on the stream upon Dispose() | 284 | // gets written on the stream upon Dispose() |
272 | } | 285 | } |
273 | byte[] buf = ms.ToArray(); | 286 | byte[] buf = ms.ToArray(); |
287 | |||
288 | tickcompressdata = Util.EnvironmentTickCountSubtract(tickstart); | ||
289 | |||
274 | request.ContentLength = buf.Length; //Count bytes to send | 290 | request.ContentLength = buf.Length; //Count bytes to send |
291 | compsize = buf.Length; | ||
275 | using (Stream requestStream = request.GetRequestStream()) | 292 | using (Stream requestStream = request.GetRequestStream()) |
276 | requestStream.Write(buf, 0, (int)buf.Length); | 293 | requestStream.Write(buf, 0, (int)buf.Length); |
277 | } | 294 | } |
278 | } | 295 | } |
279 | else | 296 | else |
280 | { | 297 | { |
298 | <<<<<<< HEAD | ||
299 | ======= | ||
300 | tickcompressdata = tickJsondata; | ||
301 | compsize = buffer.Length; | ||
302 | request.ContentType = "application/json"; | ||
303 | >>>>>>> avn/ubitvar | ||
281 | request.ContentLength = buffer.Length; //Count bytes to send | 304 | request.ContentLength = buffer.Length; //Count bytes to send |
282 | using (Stream requestStream = request.GetRequestStream()) | 305 | using (Stream requestStream = request.GetRequestStream()) |
283 | requestStream.Write(buffer, 0, buffer.Length); //Send it | 306 | requestStream.Write(buffer, 0, buffer.Length); //Send it |
@@ -292,6 +315,7 @@ namespace OpenSim.Framework | |||
292 | { | 315 | { |
293 | using (Stream responseStream = response.GetResponseStream()) | 316 | using (Stream responseStream = response.GetResponseStream()) |
294 | { | 317 | { |
318 | <<<<<<< HEAD | ||
295 | using (StreamReader reader = new StreamReader(responseStream)) | 319 | using (StreamReader reader = new StreamReader(responseStream)) |
296 | { | 320 | { |
297 | string responseStr = reader.ReadToEnd(); | 321 | string responseStr = reader.ReadToEnd(); |
@@ -299,6 +323,12 @@ namespace OpenSim.Framework | |||
299 | WebUtil.LogResponseDetail(reqnum, responseStr); | 323 | WebUtil.LogResponseDetail(reqnum, responseStr); |
300 | return CanonicalizeResults(responseStr); | 324 | return CanonicalizeResults(responseStr); |
301 | } | 325 | } |
326 | ======= | ||
327 | string responseStr = null; | ||
328 | responseStr = responseStream.GetStreamString(); | ||
329 | //m_log.DebugFormat("[WEB UTIL]: <{0}> response is <{1}>",reqnum,responseStr); | ||
330 | return CanonicalizeResults(responseStr); | ||
331 | >>>>>>> avn/ubitvar | ||
302 | } | 332 | } |
303 | } | 333 | } |
304 | } | 334 | } |
@@ -314,6 +344,7 @@ namespace OpenSim.Framework | |||
314 | catch (Exception ex) | 344 | catch (Exception ex) |
315 | { | 345 | { |
316 | errorMessage = ex.Message; | 346 | errorMessage = ex.Message; |
347 | m_log.Debug("[WEB UTIL]: Exception making request: " + ex.ToString()); | ||
317 | } | 348 | } |
318 | finally | 349 | finally |
319 | { | 350 | { |
@@ -321,8 +352,21 @@ namespace OpenSim.Framework | |||
321 | if (tickdiff > LongCallTime) | 352 | if (tickdiff > LongCallTime) |
322 | { | 353 | { |
323 | m_log.InfoFormat( | 354 | m_log.InfoFormat( |
355 | <<<<<<< HEAD | ||
324 | "[LOGHTTP]: Slow JSON-RPC request {0} {1} to {2} took {3}ms, {4}ms writing, {5}", | 356 | "[LOGHTTP]: Slow JSON-RPC request {0} {1} to {2} took {3}ms, {4}ms writing, {5}", |
325 | reqnum, method, url, tickdiff, tickdata, | 357 | reqnum, method, url, tickdiff, tickdata, |
358 | ======= | ||
359 | "[WEB UTIL]: Slow ServiceOSD request {0} {1} {2} took {3}ms, {4}ms writing({5} at Json; {6} at comp), {7} bytes ({8} uncomp): {9}", | ||
360 | reqnum, | ||
361 | method, | ||
362 | url, | ||
363 | tickdiff, | ||
364 | tickdata, | ||
365 | tickJsondata, | ||
366 | tickcompressdata, | ||
367 | compsize, | ||
368 | strBuffer != null ? strBuffer.Length : 0, | ||
369 | >>>>>>> avn/ubitvar | ||
326 | strBuffer != null | 370 | strBuffer != null |
327 | ? (strBuffer.Length > MaxRequestDiagLength ? strBuffer.Remove(MaxRequestDiagLength) : strBuffer) | 371 | ? (strBuffer.Length > MaxRequestDiagLength ? strBuffer.Remove(MaxRequestDiagLength) : strBuffer) |
328 | : ""); | 372 | : ""); |
@@ -396,7 +440,7 @@ namespace OpenSim.Framework | |||
396 | /// </summary> | 440 | /// </summary> |
397 | public static OSDMap PostToService(string url, NameValueCollection data) | 441 | public static OSDMap PostToService(string url, NameValueCollection data) |
398 | { | 442 | { |
399 | return ServiceFormRequest(url,data,10000); | 443 | return ServiceFormRequest(url,data, 20000); |
400 | } | 444 | } |
401 | 445 | ||
402 | public static OSDMap ServiceFormRequest(string url, NameValueCollection data, int timeout) | 446 | public static OSDMap ServiceFormRequest(string url, NameValueCollection data, int timeout) |
@@ -790,7 +834,8 @@ namespace OpenSim.Framework | |||
790 | reqnum, verb, requestUrl); | 834 | reqnum, verb, requestUrl); |
791 | 835 | ||
792 | int tickstart = Util.EnvironmentTickCount(); | 836 | int tickstart = Util.EnvironmentTickCount(); |
793 | int tickdata = 0; | 837 | // int tickdata = 0; |
838 | int tickdiff = 0; | ||
794 | 839 | ||
795 | Type type = typeof(TRequest); | 840 | Type type = typeof(TRequest); |
796 | 841 | ||
@@ -831,10 +876,17 @@ namespace OpenSim.Framework | |||
831 | request.ContentLength = length; | 876 | request.ContentLength = length; |
832 | byte[] data = buffer.ToArray(); | 877 | byte[] data = buffer.ToArray(); |
833 | 878 | ||
879 | <<<<<<< HEAD | ||
834 | if (WebUtil.DebugLevel >= 5) | 880 | if (WebUtil.DebugLevel >= 5) |
835 | WebUtil.LogOutgoingDetail("SEND", reqnum, System.Text.Encoding.UTF8.GetString(data)); | 881 | WebUtil.LogOutgoingDetail("SEND", reqnum, System.Text.Encoding.UTF8.GetString(data)); |
836 | 882 | ||
837 | request.BeginGetRequestStream(delegate(IAsyncResult res) | 883 | request.BeginGetRequestStream(delegate(IAsyncResult res) |
884 | ======= | ||
885 | // capture how much time was spent writing | ||
886 | // useless in this async | ||
887 | // tickdata = Util.EnvironmentTickCountSubtract(tickstart); | ||
888 | request.BeginGetResponse(delegate(IAsyncResult ar) | ||
889 | >>>>>>> avn/ubitvar | ||
838 | { | 890 | { |
839 | using (Stream requestStream = request.EndGetRequestStream(res)) | 891 | using (Stream requestStream = request.EndGetRequestStream(res)) |
840 | requestStream.Write(data, 0, length); | 892 | requestStream.Write(data, 0, length); |
@@ -844,6 +896,7 @@ namespace OpenSim.Framework | |||
844 | 896 | ||
845 | request.BeginGetResponse(delegate(IAsyncResult ar) | 897 | request.BeginGetResponse(delegate(IAsyncResult ar) |
846 | { | 898 | { |
899 | <<<<<<< HEAD | ||
847 | using (WebResponse response = request.EndGetResponse(ar)) | 900 | using (WebResponse response = request.EndGetResponse(ar)) |
848 | { | 901 | { |
849 | try | 902 | try |
@@ -858,6 +911,14 @@ namespace OpenSim.Framework | |||
858 | { | 911 | { |
859 | } | 912 | } |
860 | } | 913 | } |
914 | ======= | ||
915 | // Let's not close this | ||
916 | // yes do close it | ||
917 | buffer.Close(); | ||
918 | respStream.Close(); | ||
919 | response.Close(); | ||
920 | } | ||
921 | >>>>>>> avn/ubitvar | ||
861 | 922 | ||
862 | action(deserial); | 923 | action(deserial); |
863 | 924 | ||
@@ -919,6 +980,7 @@ namespace OpenSim.Framework | |||
919 | "[ASYNC REQUEST]: Request {0} {1} failed with exception {2}{3}", | 980 | "[ASYNC REQUEST]: Request {0} {1} failed with exception {2}{3}", |
920 | verb, requestUrl, e.Message, e.StackTrace); | 981 | verb, requestUrl, e.Message, e.StackTrace); |
921 | } | 982 | } |
983 | <<<<<<< HEAD | ||
922 | 984 | ||
923 | // m_log.DebugFormat("[ASYNC REQUEST]: Received {0}", deserial.ToString()); | 985 | // m_log.DebugFormat("[ASYNC REQUEST]: Received {0}", deserial.ToString()); |
924 | 986 | ||
@@ -942,12 +1004,36 @@ namespace OpenSim.Framework | |||
942 | string originalRequest = null; | 1004 | string originalRequest = null; |
943 | 1005 | ||
944 | if (buffer != null) | 1006 | if (buffer != null) |
1007 | ======= | ||
1008 | } | ||
1009 | catch (Exception e) | ||
1010 | { | ||
1011 | m_log.ErrorFormat( | ||
1012 | "[ASYNC REQUEST]: Request {0} {1} failed with exception {2}{3}", | ||
1013 | verb, requestUrl, e.Message, e.StackTrace); | ||
1014 | } | ||
1015 | |||
1016 | // m_log.DebugFormat("[ASYNC REQUEST]: Received {0}", deserial.ToString()); | ||
1017 | try | ||
1018 | { | ||
1019 | action(deserial); | ||
1020 | } | ||
1021 | catch (Exception e) | ||
1022 | >>>>>>> avn/ubitvar | ||
945 | { | 1023 | { |
946 | originalRequest = Encoding.UTF8.GetString(buffer.ToArray()); | 1024 | originalRequest = Encoding.UTF8.GetString(buffer.ToArray()); |
947 | 1025 | ||
1026 | <<<<<<< HEAD | ||
948 | if (originalRequest.Length > WebUtil.MaxRequestDiagLength) | 1027 | if (originalRequest.Length > WebUtil.MaxRequestDiagLength) |
949 | originalRequest = originalRequest.Remove(WebUtil.MaxRequestDiagLength); | 1028 | originalRequest = originalRequest.Remove(WebUtil.MaxRequestDiagLength); |
950 | } | 1029 | } |
1030 | ======= | ||
1031 | tickdiff = Util.EnvironmentTickCountSubtract(tickstart); | ||
1032 | if (tickdiff > WebUtil.LongCallTime) | ||
1033 | { | ||
1034 | /* | ||
1035 | string originalRequest = null; | ||
1036 | >>>>>>> avn/ubitvar | ||
951 | 1037 | ||
952 | m_log.InfoFormat( | 1038 | m_log.InfoFormat( |
953 | "[LOGHTTP]: Slow AsynchronousRequestObject request {0} {1} to {2} took {3}ms, {4}ms writing, {5}", | 1039 | "[LOGHTTP]: Slow AsynchronousRequestObject request {0} {1} to {2} took {3}ms, {4}ms writing, {5}", |
@@ -959,11 +1045,36 @@ namespace OpenSim.Framework | |||
959 | m_log.DebugFormat("[LOGHTTP]: HTTP OUT {0} took {1}ms, {2}ms writing", | 1045 | m_log.DebugFormat("[LOGHTTP]: HTTP OUT {0} took {1}ms, {2}ms writing", |
960 | reqnum, tickdiff, tickdata); | 1046 | reqnum, tickdiff, tickdata); |
961 | } | 1047 | } |
1048 | <<<<<<< HEAD | ||
962 | } | 1049 | } |
963 | finally | 1050 | finally |
964 | { | 1051 | { |
965 | if (buffer != null) | 1052 | if (buffer != null) |
966 | buffer.Dispose(); | 1053 | buffer.Dispose(); |
1054 | ======= | ||
1055 | |||
1056 | m_log.InfoFormat( | ||
1057 | "[ASYNC REQUEST]: Slow request {0} {1} {2} took {3}ms, {4}ms writing, {5}", | ||
1058 | reqnum, | ||
1059 | verb, | ||
1060 | requestUrl, | ||
1061 | tickdiff, | ||
1062 | tickdata, | ||
1063 | originalRequest); | ||
1064 | */ | ||
1065 | m_log.InfoFormat( | ||
1066 | "[ASYNC REQUEST]: Slow WebRequest SETUP <{0}> {1} {2} took {3}ms", | ||
1067 | reqnum, | ||
1068 | verb, | ||
1069 | requestUrl, | ||
1070 | tickdiff); | ||
1071 | } | ||
1072 | else if (WebUtil.DebugLevel >= 4) | ||
1073 | { | ||
1074 | m_log.DebugFormat( | ||
1075 | "[WEB UTIL]: HTTP OUT {0} took {1}ms", | ||
1076 | reqnum, tickdiff); | ||
1077 | >>>>>>> avn/ubitvar | ||
967 | } | 1078 | } |
968 | } | 1079 | } |
969 | } | 1080 | } |
@@ -1004,6 +1115,8 @@ namespace OpenSim.Framework | |||
1004 | 1115 | ||
1005 | string respstring = String.Empty; | 1116 | string respstring = String.Empty; |
1006 | 1117 | ||
1118 | int tickset = Util.EnvironmentTickCountSubtract(tickstart); | ||
1119 | |||
1007 | using (MemoryStream buffer = new MemoryStream()) | 1120 | using (MemoryStream buffer = new MemoryStream()) |
1008 | { | 1121 | { |
1009 | if ((verb == "POST") || (verb == "PUT")) | 1122 | if ((verb == "POST") || (verb == "PUT")) |
@@ -1015,14 +1128,19 @@ namespace OpenSim.Framework | |||
1015 | { | 1128 | { |
1016 | writer.Write(obj); | 1129 | writer.Write(obj); |
1017 | writer.Flush(); | 1130 | writer.Flush(); |
1131 | if (WebUtil.DebugLevel >= 5) | ||
1132 | WebUtil.LogOutgoingDetail(buffer); | ||
1018 | } | 1133 | } |
1019 | 1134 | ||
1020 | length = (int)obj.Length; | 1135 | length = (int)obj.Length; |
1021 | request.ContentLength = length; | 1136 | request.ContentLength = length; |
1022 | byte[] data = buffer.ToArray(); | 1137 | byte[] data = buffer.ToArray(); |
1023 | 1138 | ||
1139 | <<<<<<< HEAD | ||
1024 | if (WebUtil.DebugLevel >= 5) | 1140 | if (WebUtil.DebugLevel >= 5) |
1025 | WebUtil.LogOutgoingDetail("SEND", reqnum, System.Text.Encoding.UTF8.GetString(data)); | 1141 | WebUtil.LogOutgoingDetail("SEND", reqnum, System.Text.Encoding.UTF8.GetString(data)); |
1142 | ======= | ||
1143 | >>>>>>> avn/ubitvar | ||
1026 | 1144 | ||
1027 | Stream requestStream = null; | 1145 | Stream requestStream = null; |
1028 | try | 1146 | try |
@@ -1070,8 +1188,18 @@ namespace OpenSim.Framework | |||
1070 | if (tickdiff > WebUtil.LongCallTime) | 1188 | if (tickdiff > WebUtil.LongCallTime) |
1071 | { | 1189 | { |
1072 | m_log.InfoFormat( | 1190 | m_log.InfoFormat( |
1191 | <<<<<<< HEAD | ||
1073 | "[LOGHTTP]: Slow SynchronousRestForms request {0} {1} to {2} took {3}ms, {4}ms writing, {5}", | 1192 | "[LOGHTTP]: Slow SynchronousRestForms request {0} {1} to {2} took {3}ms, {4}ms writing, {5}", |
1074 | reqnum, verb, requestUrl, tickdiff, tickdata, | 1193 | reqnum, verb, requestUrl, tickdiff, tickdata, |
1194 | ======= | ||
1195 | "[FORMS]: Slow request {0} {1} {2} took {3}ms, {4}ms writing, {5}", | ||
1196 | reqnum, | ||
1197 | verb, | ||
1198 | requestUrl, | ||
1199 | tickdiff, | ||
1200 | tickset, | ||
1201 | tickdata, | ||
1202 | >>>>>>> avn/ubitvar | ||
1075 | obj.Length > WebUtil.MaxRequestDiagLength ? obj.Remove(WebUtil.MaxRequestDiagLength) : obj); | 1203 | obj.Length > WebUtil.MaxRequestDiagLength ? obj.Remove(WebUtil.MaxRequestDiagLength) : obj); |
1076 | } | 1204 | } |
1077 | else if (WebUtil.DebugLevel >= 4) | 1205 | else if (WebUtil.DebugLevel >= 4) |
@@ -1208,6 +1336,8 @@ namespace OpenSim.Framework | |||
1208 | ht.ServicePoint.ConnectionLimit = maxConnections; | 1336 | ht.ServicePoint.ConnectionLimit = maxConnections; |
1209 | 1337 | ||
1210 | request.Method = verb; | 1338 | request.Method = verb; |
1339 | if (pTimeout != 0) | ||
1340 | request.Timeout = pTimeout * 1000; | ||
1211 | MemoryStream buffer = null; | 1341 | MemoryStream buffer = null; |
1212 | 1342 | ||
1213 | try | 1343 | try |
@@ -1221,17 +1351,29 @@ namespace OpenSim.Framework | |||
1221 | XmlWriterSettings settings = new XmlWriterSettings(); | 1351 | XmlWriterSettings settings = new XmlWriterSettings(); |
1222 | settings.Encoding = Encoding.UTF8; | 1352 | settings.Encoding = Encoding.UTF8; |
1223 | 1353 | ||
1354 | <<<<<<< HEAD | ||
1224 | using (XmlWriter writer = XmlWriter.Create(buffer, settings)) | 1355 | using (XmlWriter writer = XmlWriter.Create(buffer, settings)) |
1225 | { | 1356 | { |
1226 | XmlSerializer serializer = new XmlSerializer(type); | 1357 | XmlSerializer serializer = new XmlSerializer(type); |
1227 | serializer.Serialize(writer, obj); | 1358 | serializer.Serialize(writer, obj); |
1228 | writer.Flush(); | 1359 | writer.Flush(); |
1229 | } | 1360 | } |
1361 | ======= | ||
1362 | using (XmlWriter writer = XmlWriter.Create(buffer, settings)) | ||
1363 | { | ||
1364 | XmlSerializer serializer = new XmlSerializer(type); | ||
1365 | serializer.Serialize(writer, obj); | ||
1366 | writer.Flush(); | ||
1367 | if (WebUtil.DebugLevel >= 5) | ||
1368 | WebUtil.LogOutgoingDetail(buffer); | ||
1369 | } | ||
1370 | >>>>>>> avn/ubitvar | ||
1230 | 1371 | ||
1231 | int length = (int)buffer.Length; | 1372 | int length = (int)buffer.Length; |
1232 | request.ContentLength = length; | 1373 | request.ContentLength = length; |
1233 | byte[] data = buffer.ToArray(); | 1374 | byte[] data = buffer.ToArray(); |
1234 | 1375 | ||
1376 | <<<<<<< HEAD | ||
1235 | if (WebUtil.DebugLevel >= 5) | 1377 | if (WebUtil.DebugLevel >= 5) |
1236 | WebUtil.LogOutgoingDetail("SEND", reqnum, System.Text.Encoding.UTF8.GetString(data)); | 1378 | WebUtil.LogOutgoingDetail("SEND", reqnum, System.Text.Encoding.UTF8.GetString(data)); |
1237 | 1379 | ||
@@ -1255,6 +1397,9 @@ namespace OpenSim.Framework | |||
1255 | } | 1397 | } |
1256 | } | 1398 | } |
1257 | 1399 | ||
1400 | ======= | ||
1401 | Stream requestStream = null; | ||
1402 | >>>>>>> avn/ubitvar | ||
1258 | try | 1403 | try |
1259 | { | 1404 | { |
1260 | using (HttpWebResponse resp = (HttpWebResponse)request.GetResponse()) | 1405 | using (HttpWebResponse resp = (HttpWebResponse)request.GetResponse()) |