From a1e32b843745581f7296359427a59e988814106b Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 18 Jun 2013 00:10:21 +0100
Subject: If SmartThreadPool is active, display statistical information about
 it in "show stats server"

Also puts these and previous builtin threadpool stats in the "threadpool" stat container rather than "processor"
---
 OpenSim/Framework/Monitoring/ServerStatsCollector.cs | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

(limited to 'OpenSim')

diff --git a/OpenSim/Framework/Monitoring/ServerStatsCollector.cs b/OpenSim/Framework/Monitoring/ServerStatsCollector.cs
index c601c17..0ab4b93 100644
--- a/OpenSim/Framework/Monitoring/ServerStatsCollector.cs
+++ b/OpenSim/Framework/Monitoring/ServerStatsCollector.cs
@@ -49,6 +49,7 @@ namespace OpenSim.Framework.Monitoring
 
         public readonly string CategoryServer = "server";
 
+        public readonly string ContainerThreadpool = "threadpool";
         public readonly string ContainerProcessor = "processor";
         public readonly string ContainerMemory = "memory";
         public readonly string ContainerNetwork = "network";
@@ -157,7 +158,7 @@ namespace OpenSim.Framework.Monitoring
                 m_log.ErrorFormat("{0} Exception creating 'Process': {1}", LogHeader, e);
             }
 
-            MakeStat("BuiltinThreadpoolWorkerThreadsAvailable", null, "threads", ContainerProcessor, 
+            MakeStat("BuiltinThreadpoolWorkerThreadsAvailable", null, "threads", ContainerThreadpool, 
                 s => 
                 { 
                     int workerThreads, iocpThreads; 
@@ -165,7 +166,7 @@ namespace OpenSim.Framework.Monitoring
                     s.Value = workerThreads;
                 });
 
-            MakeStat("BuiltinThreadpoolIOCPThreadsAvailable", null, "threads", ContainerProcessor, 
+            MakeStat("BuiltinThreadpoolIOCPThreadsAvailable", null, "threads", ContainerThreadpool, 
                 s => 
                 { 
                     int workerThreads, iocpThreads; 
@@ -173,6 +174,16 @@ namespace OpenSim.Framework.Monitoring
                     s.Value = iocpThreads;
                 });
 
+            if (Util.FireAndForgetMethod != null && Util.GetSmartThreadPoolInfo() != null)
+            {
+                MakeStat("STPMaxThreads", null, "threads", ContainerThreadpool, s => s.Value = Util.GetSmartThreadPoolInfo().MaxThreads);
+                MakeStat("STPMinThreads", null, "threads", ContainerThreadpool, s => s.Value = Util.GetSmartThreadPoolInfo().MinThreads);
+                MakeStat("STPConcurrency", null, "threads", ContainerThreadpool, s => s.Value = Util.GetSmartThreadPoolInfo().MaxConcurrentWorkItems);
+                MakeStat("STPActiveThreads", null, "threads", ContainerThreadpool, s => s.Value = Util.GetSmartThreadPoolInfo().ActiveThreads);
+                MakeStat("STPInUseThreads", null, "threads", ContainerThreadpool, s => s.Value = Util.GetSmartThreadPoolInfo().InUseThreads);
+                MakeStat("STPWorkItemsWaiting", null, "threads", ContainerThreadpool, s => s.Value = Util.GetSmartThreadPoolInfo().WaitingCallbacks);
+            }
+
             try
             {
                 List<string> okInterfaceTypes = new List<string>(NetworkInterfaceTypes.Split(','));
-- 
cgit v1.1