diff --git a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs index 103228fe86..08d4fc0c0c 100644 --- a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs +++ b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs @@ -31,6 +31,7 @@ using System; using System.IO; using System.Collections.Generic; +using System.Linq; using System.Reflection; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; @@ -74,8 +75,6 @@ namespace OpenSim.Region.CoreModules.Asset private static ulong m_RequestsForInprogress; private static ulong m_DiskHits; private static ulong m_MemoryHits; - private static double m_HitRateMemory; - private static double m_HitRateFile; #if WAIT_ON_INPROGRESS_REQUESTS private Dictionary m_CurrentlyWriting = new Dictionary(); @@ -427,18 +426,9 @@ namespace OpenSim.Region.CoreModules.Asset if (((m_LogLevel >= 1)) && (m_HitRateDisplay != 0) && (m_Requests % m_HitRateDisplay == 0)) { - m_HitRateFile = (double)m_DiskHits / m_Requests * 100.0; - m_log.InfoFormat("[FLOTSAM ASSET CACHE]: Cache Get :: {0} :: {1}", id, asset == null ? "Miss" : "Hit"); - m_log.InfoFormat("[FLOTSAM ASSET CACHE]: File Hit Rate {0}% for {1} requests", m_HitRateFile.ToString("0.00"), m_Requests); - if (m_MemoryCacheEnabled) - { - m_HitRateMemory = (double)m_MemoryHits / m_Requests * 100.0; - m_log.InfoFormat("[FLOTSAM ASSET CACHE]: Memory Hit Rate {0}% for {1} requests", m_HitRateMemory.ToString("0.00"), m_Requests); - } - - m_log.InfoFormat("[FLOTSAM ASSET CACHE]: {0} unnessesary requests due to requests for assets that are currently downloading.", m_RequestsForInprogress); + GenerateCacheHitReport().ForEach(l => m_log.InfoFormat("[FLOTSAM ASSET CACHE]: {0}", l)); } return asset; @@ -805,6 +795,30 @@ namespace OpenSim.Region.CoreModules.Asset } } + private List GenerateCacheHitReport() + { + List outputLines = new List(); + + double fileHitRate = (double)m_DiskHits / m_Requests * 100.0; + outputLines.Add( + string.Format("File Hit Rate: {0}% for {1} requests", fileHitRate.ToString("0.00"), m_Requests)); + + if (m_MemoryCacheEnabled) + { + double memHitRate = (double)m_MemoryHits / m_Requests * 100.0; + + outputLines.Add( + string.Format("Memory Hit Rate: {0}% for {1} requests", memHitRate.ToString("0.00"), m_Requests)); + } + + outputLines.Add( + string.Format( + "Unnecessary requests due to requests for assets that are currently downloading: {0}", + m_RequestsForInprogress)); + + return outputLines; + } + #region Console Commands private void HandleConsoleCommand(string module, string[] cmdparams) { @@ -818,14 +832,24 @@ namespace OpenSim.Region.CoreModules.Asset { case "status": if (m_MemoryCacheEnabled) - con.OutputFormat("Memory Cache : {0} assets", m_MemoryCache.Count); + con.OutputFormat("Memory Cache: {0} assets", m_MemoryCache.Count); else con.OutputFormat("Memory cache disabled"); if (m_FileCacheEnabled) { int fileCount = GetFileCacheCount(m_CacheDirectory); - con.OutputFormat("File Cache : {0} assets", fileCount); + con.OutputFormat("File Cache: {0} assets", fileCount); + } + else + { + con.Output("File cache disabled"); + } + + GenerateCacheHitReport().ForEach(l => con.Output(l)); + + if (m_FileCacheEnabled) + { con.Output("Deep scans have previously been performed on the following regions:"); foreach (string s in Directory.GetFiles(m_CacheDirectory, "*.fac")) @@ -835,10 +859,6 @@ namespace OpenSim.Region.CoreModules.Asset con.OutputFormat("Region: {0}, {1}", RegionID, RegionDeepScanTMStamp.ToString("MM/dd/yyyy hh:mm:ss")); } } - else - { - con.Output("File cache disabled"); - } break;