mirror of
https://github.com/opensim/opensim.git
synced 2026-08-07 01:35:46 +08:00
Add request received/handling stats for caps which are served by http poll handlers.
This adds explicit cap poll handler supporting to the Caps classes rather than relying on callers to do the complicated coding. Other refactoring was required to get logic into the right places to support this.
This commit is contained in:
@@ -80,7 +80,7 @@ namespace OpenSim.Region.CoreModules.Framework
|
||||
|
||||
MainConsole.Instance.Commands.AddCommand(
|
||||
"Comms", false, "show caps stats by user",
|
||||
"show caps stats [<first-name> <last-name>]",
|
||||
"show caps stats by user [<first-name> <last-name>]",
|
||||
"Shows statistics on capabilities use by user.",
|
||||
"If a user name is given, then prints a detailed breakdown of caps use ordered by number of requests received.",
|
||||
HandleShowCapsStatsByUserCommand);
|
||||
@@ -285,27 +285,31 @@ namespace OpenSim.Region.CoreModules.Framework
|
||||
if (SceneManager.Instance.CurrentScene != null && SceneManager.Instance.CurrentScene != m_scene)
|
||||
return;
|
||||
|
||||
StringBuilder caps = new StringBuilder();
|
||||
caps.AppendFormat("Region {0}:\n", m_scene.RegionInfo.RegionName);
|
||||
StringBuilder capsReport = new StringBuilder();
|
||||
capsReport.AppendFormat("Region {0}:\n", m_scene.RegionInfo.RegionName);
|
||||
|
||||
lock (m_capsObjects)
|
||||
{
|
||||
foreach (KeyValuePair<UUID, Caps> kvp in m_capsObjects)
|
||||
{
|
||||
caps.AppendFormat("** User {0}:\n", kvp.Key);
|
||||
capsReport.AppendFormat("** User {0}:\n", kvp.Key);
|
||||
Caps caps = kvp.Value;
|
||||
|
||||
for (IDictionaryEnumerator kvp2 = kvp.Value.CapsHandlers.GetCapsDetails(false, null).GetEnumerator(); kvp2.MoveNext(); )
|
||||
for (IDictionaryEnumerator kvp2 = caps.CapsHandlers.GetCapsDetails(false, null).GetEnumerator(); kvp2.MoveNext(); )
|
||||
{
|
||||
Uri uri = new Uri(kvp2.Value.ToString());
|
||||
caps.AppendFormat(m_showCapsCommandFormat, kvp2.Key, uri.PathAndQuery);
|
||||
capsReport.AppendFormat(m_showCapsCommandFormat, kvp2.Key, uri.PathAndQuery);
|
||||
}
|
||||
|
||||
foreach (KeyValuePair<string, string> kvp3 in kvp.Value.ExternalCapsHandlers)
|
||||
caps.AppendFormat(m_showCapsCommandFormat, kvp3.Key, kvp3.Value);
|
||||
foreach (KeyValuePair<string, PollServiceEventArgs> kvp2 in caps.GetPollHandlers())
|
||||
capsReport.AppendFormat(m_showCapsCommandFormat, kvp2.Key, kvp2.Value.Url);
|
||||
|
||||
foreach (KeyValuePair<string, string> kvp3 in caps.ExternalCapsHandlers)
|
||||
capsReport.AppendFormat(m_showCapsCommandFormat, kvp3.Key, kvp3.Value);
|
||||
}
|
||||
}
|
||||
|
||||
MainConsole.Instance.Output(caps.ToString());
|
||||
MainConsole.Instance.Output(capsReport.ToString());
|
||||
}
|
||||
|
||||
private void HandleShowCapsStatsByCapCommand(string module, string[] cmdParams)
|
||||
@@ -362,7 +366,16 @@ namespace OpenSim.Region.CoreModules.Framework
|
||||
{
|
||||
receivedStats[sp.Name] = reqHandler.RequestsReceived;
|
||||
handledStats[sp.Name] = reqHandler.RequestsHandled;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
PollServiceEventArgs pollHandler = null;
|
||||
if (caps.TryGetPollHandler(capName, out pollHandler))
|
||||
{
|
||||
receivedStats[sp.Name] = pollHandler.RequestsReceived;
|
||||
handledStats[sp.Name] = pollHandler.RequestsHandled;
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
@@ -391,11 +404,9 @@ namespace OpenSim.Region.CoreModules.Framework
|
||||
Caps caps = m_scene.CapsModule.GetCapsForUser(sp.UUID);
|
||||
|
||||
if (caps == null)
|
||||
return;
|
||||
return;
|
||||
|
||||
Dictionary<string, IRequestHandler> capsHandlers = caps.CapsHandlers.GetCapsHandlers();
|
||||
|
||||
foreach (IRequestHandler reqHandler in capsHandlers.Values)
|
||||
foreach (IRequestHandler reqHandler in caps.CapsHandlers.GetCapsHandlers().Values)
|
||||
{
|
||||
string reqName = reqHandler.Name ?? "";
|
||||
|
||||
@@ -410,6 +421,23 @@ namespace OpenSim.Region.CoreModules.Framework
|
||||
handledStats[reqName] += reqHandler.RequestsHandled;
|
||||
}
|
||||
}
|
||||
|
||||
foreach (KeyValuePair<string, PollServiceEventArgs> kvp in caps.GetPollHandlers())
|
||||
{
|
||||
string name = kvp.Key;
|
||||
PollServiceEventArgs pollHandler = kvp.Value;
|
||||
|
||||
if (!receivedStats.ContainsKey(name))
|
||||
{
|
||||
receivedStats[name] = pollHandler.RequestsReceived;
|
||||
handledStats[name] = pollHandler.RequestsHandled;
|
||||
}
|
||||
else
|
||||
{
|
||||
receivedStats[name] += pollHandler.RequestsReceived;
|
||||
handledStats[name] += pollHandler.RequestsHandled;
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
@@ -468,12 +496,16 @@ namespace OpenSim.Region.CoreModules.Framework
|
||||
if (caps == null)
|
||||
return;
|
||||
|
||||
Dictionary<string, IRequestHandler> capsHandlers = caps.CapsHandlers.GetCapsHandlers();
|
||||
List<CapTableRow> capRows = new List<CapTableRow>();
|
||||
|
||||
foreach (IRequestHandler reqHandler in capsHandlers.Values.OrderByDescending(rh => rh.RequestsReceived))
|
||||
{
|
||||
cdt.AddRow(reqHandler.Name, reqHandler.RequestsReceived, reqHandler.RequestsHandled);
|
||||
}
|
||||
foreach (IRequestHandler reqHandler in caps.CapsHandlers.GetCapsHandlers().Values)
|
||||
capRows.Add(new CapTableRow(reqHandler.Name, reqHandler.RequestsReceived, reqHandler.RequestsHandled));
|
||||
|
||||
foreach (KeyValuePair<string, PollServiceEventArgs> kvp in caps.GetPollHandlers())
|
||||
capRows.Add(new CapTableRow(kvp.Key, kvp.Value.RequestsReceived, kvp.Value.RequestsHandled));
|
||||
|
||||
foreach (CapTableRow ctr in capRows.OrderByDescending(ctr => ctr.RequestsReceived))
|
||||
cdt.AddRow(ctr.Name, ctr.RequestsReceived, ctr.RequestsHandled);
|
||||
|
||||
sb.Append(cdt.ToString());
|
||||
}
|
||||
@@ -505,6 +537,14 @@ namespace OpenSim.Region.CoreModules.Framework
|
||||
totalRequestsReceived += reqHandler.RequestsReceived;
|
||||
totalRequestsHandled += reqHandler.RequestsHandled;
|
||||
}
|
||||
|
||||
Dictionary<string, PollServiceEventArgs> capsPollHandlers = caps.GetPollHandlers();
|
||||
|
||||
foreach (PollServiceEventArgs handler in capsPollHandlers.Values)
|
||||
{
|
||||
totalRequestsReceived += handler.RequestsReceived;
|
||||
totalRequestsHandled += handler.RequestsHandled;
|
||||
}
|
||||
|
||||
cdt.AddRow(sp.Name, sp.IsChildAgent ? "child" : "root", totalRequestsReceived, totalRequestsHandled);
|
||||
}
|
||||
@@ -512,5 +552,19 @@ namespace OpenSim.Region.CoreModules.Framework
|
||||
|
||||
sb.Append(cdt.ToString());
|
||||
}
|
||||
|
||||
private class CapTableRow
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public int RequestsReceived { get; set; }
|
||||
public int RequestsHandled { get; set; }
|
||||
|
||||
public CapTableRow(string name, int requestsReceived, int requestsHandled)
|
||||
{
|
||||
Name = name;
|
||||
RequestsReceived = requestsReceived;
|
||||
RequestsHandled = requestsHandled;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -235,7 +235,8 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
|
||||
|
||||
string uri = "/lslhttp/" + urlcode.ToString() + "/";
|
||||
|
||||
PollServiceEventArgs args = new PollServiceEventArgs(HttpRequestHandler, HasEvents, GetEvents, NoEvents, urlcode, 25000);
|
||||
PollServiceEventArgs args
|
||||
= new PollServiceEventArgs(HttpRequestHandler, uri, HasEvents, GetEvents, NoEvents, urlcode, 25000);
|
||||
args.Type = PollServiceEventArgs.EventType.LslHttp;
|
||||
m_HttpServer.AddPollServiceHTTPHandler(uri, args);
|
||||
|
||||
@@ -280,7 +281,8 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
|
||||
|
||||
string uri = "/lslhttps/" + urlcode.ToString() + "/";
|
||||
|
||||
PollServiceEventArgs args = new PollServiceEventArgs(HttpRequestHandler, HasEvents, GetEvents, NoEvents, urlcode, 25000);
|
||||
PollServiceEventArgs args
|
||||
= new PollServiceEventArgs(HttpRequestHandler, uri, HasEvents, GetEvents, NoEvents, urlcode, 25000);
|
||||
args.Type = PollServiceEventArgs.EventType.LslHttp;
|
||||
m_HttpsServer.AddPollServiceHTTPHandler(uri, args);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user