Ejemplo n.º 1
0
        public override void DoGrouping(string pathToMemoryDump, string pathToMscorDac, string typeToExtract)
        {
            var runtime = _runtimeFactory.BuildClrRuntime(new MDFileConnection(pathToMemoryDump, pathToMscorDac));
            var heap    = runtime.Heap;

            var stringBuilderStream = new FilteredObjectProviderByTypeName(typeof(StringBuilder));

            var heapEnumerator = new HeapBasedClrObjectEnumerator();

            var uniqueBuilders = new HashSet <ulong>();
            var innerChunks    = new HashSet <ulong>();

            var locateInnerBuilders = (from stringBuilderPointer in stringBuilderStream.ExtractFromRuntime(runtime, heapEnumerator)
                                       let previousChunk = stringBuilderPointer.GetRefFld("m_ChunkPrevious")
                                                           where uniqueBuilders.Add(stringBuilderPointer.Address)
                                                           where !previousChunk.IsNullObj && previousChunk.Address != stringBuilderPointer.Address
                                                           where previousChunk.Type?.Name == stringBuilderPointer.Type.Name
                                                           where innerChunks.Add(previousChunk.Address)
                                                           select previousChunk)
                                      .ToArray();

            var topLevelBuilders = uniqueBuilders.Except(innerChunks);

            var factory = ModelMapperFactory;

            var builderContents = from u in uniqueBuilders
                                  let clrObj = new ClrObject(u, heap)
                                               let mapped = factory.BuildOfType <StringBuilderMappingModel>(clrObj)
                                                            where !mapped.IsEmpty()
                                                            select mapped;

            DoProcessing(builderContents);
        }
        public RedisCommandsForHttpRequests(UserThreadsFilter threadFilter = null, FilteredObjectsProviderBase threadStackObjectsFilter = null)
        {
            ThreadFilter = threadFilter ?? new UserThreadsFilter();

            if (threadStackObjectsFilter == null)
            {
                var httpContextFilter = new FilteredObjectProviderByTypeName(typeof(HttpContext));
                var stringFilter      = new PredicateBasedStringFilter(predicate: s => s.Contains("redis.call"));
                ThreadStackObjectFilter = new MultipleConditionFilteredObjectsProvider(httpContextFilter, stringFilter);
            }
        }
Ejemplo n.º 3
0
        private static void LocateHowManyPagesInProcessedSessionEnd()
        {
            IFilteredObjectsProvider sessionArgs = new FilteredObjectProviderByTypeName("Sitecore.Pipelines.EndSession.PostSessionEndArgs");

            var factory = ModelMapperManager.NewMapperFactory;
            IMemoryDumpConnectionPath connection = Connection;

            var visitPageIndexName = StringUtil.ProduceAutoPropertyName("VisitPageIndex");

            var guidReader = new GuidReader();

            var stream = from rawSessionClrObject in sessionArgs.EnumerateObjectsFromHeap(connection)
                         let stubHttpContextForSessionEnd = rawSessionClrObject.GetRefFld("m_context")

                                                            let stubHttpContextModel = factory.BuildOfType <HttpContextMappingModel>(stubHttpContextForSessionEnd)

                                                                                       let rawAnalyticSessionObjects = stubHttpContextModel?.Items?["SessionSwitcher_State"] as IEnumerable <ClrObject>
                                                                                                                       where rawAnalyticSessionObjects != null
                                                                                                                       let currentRawSession = rawAnalyticSessionObjects.FirstOrDefault()
                                                                                                                                               where !currentRawSession.IsNullObj

                                                                                                                                               let sessionId = currentRawSession.GetStringFldOrAutoProp("Id")
                                                                                                                                                               where !string.IsNullOrEmpty(sessionId)

                                                                                                                                                               let currentVisitContext = currentRawSession.GetRefFld("_currentInteraction")
                                                                                                                                                                                         let visitInfo = currentVisitContext.GetRefFld("_visitData")
                                                                                                                                                                                                         let contactId = guidReader.Read(visitInfo, "contactid")
                                                                                                                                                                                                                         let referrer = visitInfo.GetStringFldOrAutoProp("Referrer")
                                                                                                                                                                                                                                        let userAgent = visitInfo.GetStringFldOrAutoProp("UserAgent")

                                                                                                                                                                                                                                                        let pages = factory.BuildOfType <ArrayMappingModel>(currentVisitContext.GetRefFld("_pages"))
                                                                                                                                                                                                                                                                    where (pages?.IsEmpty == false)

                                                                                                                                                                                                                                                                    from currentPageContext in pages.Elements
                                                                                                                                                                                                                                                                    let rawPage = currentPageContext.Obj.GetRefFld("data")
                                                                                                                                                                                                                                                                                  let visitPageIndex                     = rawPage.GetInt32Fld(visitPageIndexName)
                                                                                                                                                                                                                                                                                                                 let url = rawPage.GetRefFldOrAutoProperty("Url").GetStringFldOrAutoProp("Path")

                                                                                                                                                                                                                                                                                                                           select new
            {
                contactId,
                sessionEndTriggered = stubHttpContextModel.ContextCreationTime,
                analyticsSessionId  = sessionId,
                totalPages          = pages.Count,
                rawPage             = rawPage.HexAddress,
                currentVisitContext.HexAddress,
                visitObject = visitInfo.HexAddress,
                userAgent,
                referrer,
                url,
            };



            var sb = new StringBuilder();

            foreach (var pageStats in stream.OrderByDescending(t => t.totalPages).ThenBy(t => t.sessionEndTriggered))
            {
                sb.AppendLine("");
                sb.AppendLine(pageStats.ToString());
                sb.AppendLine("");
            }


            File.WriteAllText(OutputStatsFile, sb.ToString());
        }