private object ProcessData(DataTable dataTable, ILogger logger, IEnumerable <PageLifeCycleMessage> pageLifeCycleMessages) { if (dataTable != null) { var controlList = new List <ControlTreeItemModel>(); var nodeGraph = new ControlTreeItemTrackModel { ControlId = "ROOT", Indent = -1 }; var nodeList = new Dictionary <string, ControlTreeItemTrackModel> { { "ROOT", nodeGraph } }; logger.Debug("Start processing `Trace_Control_Tree`"); var enumerator = dataTable.Rows.GetEnumerator(); while (enumerator.MoveNext()) { var item = new ControlTreeItemModel(); var current = enumerator.Current as DataRow; item.ParentControlId = current["Trace_Parent_Id"].CastOrDefault <string>(); item.ControlId = current["Trace_Control_Id"].CastOrDefault <string>(); var num = nodeList[item.ParentControlId].Indent + 1; nodeList[item.ControlId] = new ControlTreeItemTrackModel { ParentControlId = item.ParentControlId, ControlId = item.ControlId, Indent = num, Record = item }; nodeList[item.ParentControlId].Children.Add(nodeList[item.ControlId]); //This logic shouldn't be here for (var index = 0; index < num; ++index) { item.ControlId = "\t" + item.ControlId; } item.Level = num; item.Type = current["Trace_Type"].CastOrDefault <string>(); item.RenderSize = current["Trace_Render_Size"].CastOrDefault <int>(); item.ViewstateSize = current["Trace_Viewstate_Size"].CastOrDefault <int>(); item.ControlstateSize = current["Trace_Controlstate_Size"].CastOrDefault <int>(); controlList.Add(item); } logger.Debug("Finish processing `Trace_Control_Tree` - Count {0}", nodeList.Count); viewStateFormatter.Process(nodeGraph); dataBindFormatter.Process(nodeGraph, pageLifeCycleMessages); return(controlList); } return(null); }
public void Process(ControlTreeItemTrackModel root) { Logger.Debug("Start merginging in the viewState data to the ControlTree"); var viewState = HttpContext.Current.Items["_GlimpseWebFormViewState"] as Pair; var controlTypes = HttpContext.Current.Items["_GlimpseWebFormControlTreeType"] as Dictionary<string, Type>; if (viewState != null && root.Children.Count > 0) { Logger.Debug("Process Rroot node for viewState data to the ControlTree mapping"); ProcessRecord(root.Children[0], viewState, controlTypes); } Logger.Debug("Finish merginging in the viewState data to the ControlTree"); }
private void ProcessRecord(ControlTreeItemTrackModel item, Dictionary<string, List<DataBindParameterModel>> dataBindInfo, IEnumerable<PageLifeCycleMessage> pageLifeCycleMessages) { if (dataBindInfo.ContainsKey(item.ControlId)) { item.Record.DataBindParameters = new List<DataBindModel>(); var dataBindModel = new DataBindModel(null, null); foreach (var parameterModel in dataBindInfo[item.ControlId]) { var dataBindParameters = new List<ModelBindParameter>(); var time = DateTime.MinValue; foreach (var parameter in parameterModel.DataBindParameters) { dataBindParameters.Add(parameter); } var lifeCycleEvent = pageLifeCycleMessages.First(p => p.Offset <= parameterModel.Offset); if (dataBindModel.Event == lifeCycleEvent.EventName) { var multipleEventParameters = dataBindModel.Parameters as List<EventParameterModel>; if (multipleEventParameters == null) { var existingEventParameters = (List<ModelBindParameter>)dataBindModel.Parameters; multipleEventParameters = new List<EventParameterModel>(); dataBindModel.Parameters = multipleEventParameters; multipleEventParameters.Add(new EventParameterModel(0, existingEventParameters)); } multipleEventParameters.Add(new EventParameterModel(multipleEventParameters.Count, dataBindParameters)); } else { dataBindModel = new DataBindModel(lifeCycleEvent.EventName, dataBindParameters); item.Record.DataBindParameters.Add(dataBindModel); } } } foreach (var child in item.Children) { ProcessRecord(child, dataBindInfo, pageLifeCycleMessages); } }
private void ProcessRecord(ControlTreeItemTrackModel item, object viewstate, Dictionary<string, Type> controlTypes) { if (viewstate != null) { var viewStateType = viewstate.GetType(); if (viewStateType == typeof(Pair)) { var pair = (Pair)viewstate; if (controlTypes.ContainsKey(item.ControlId)) { item.Record.Viewstate = ProcessData(controlTypes[item.ControlId], item.Record.Type, pair.First); ProcessRecord(item, pair.Second, controlTypes); } else { Logger.Warn("Could not locate control {0} in controlTypes", item.ControlId); } } else if (viewStateType == typeof(Triplet)) { var triplet = (Triplet)viewstate; item.Record.Viewstate = ProcessData(controlTypes[item.ControlId], item.Record.Type, triplet.First); // NEED TO DO SOMETHING WITH SECOND ITEM? ProcessRecord(item, triplet.Third, controlTypes); } else if (viewStateType == typeof(ArrayList)) { var list = (ArrayList)viewstate; for (var i = 0; i < list.Count; i = i + 2) { var index = (int)list[i]; ProcessRecord(item.Children[index], list[i + 1], controlTypes); } } } }
public void Process(ControlTreeItemTrackModel root, IEnumerable<PageLifeCycleMessage> pageLifeCycleMessages) { ProcessRecord(root, (Dictionary<string, List<DataBindParameterModel>>)HttpContext.Current.Items["_GlimpseWebFormDataBinding"], pageLifeCycleMessages.OrderByDescending(p => p.Offset)); }
private object ProcessData(DataTable dataTable, ILogger logger) { if (dataTable != null) { var controlList = new List<ControlTreeItemModel>(); var nodeGraph = new ControlTreeItemTrackModel {ControlId = "ROOT", Indent = -1}; var nodeList = new Dictionary<string, ControlTreeItemTrackModel> {{"ROOT", nodeGraph}}; logger.Debug("Start processing `Trace_Control_Tree`"); var enumerator = dataTable.Rows.GetEnumerator(); while (enumerator.MoveNext()) { var item = new ControlTreeItemModel(); var current = enumerator.Current as DataRow; item.ParentControlId = current["Trace_Parent_Id"].CastOrDefault<string>(); item.ControlId = current["Trace_Control_Id"].CastOrDefault<string>(); var num = nodeList[item.ParentControlId].Indent + 1; nodeList[item.ControlId] = new ControlTreeItemTrackModel { ParentControlId = item.ParentControlId, ControlId = item.ControlId, Indent = num, Record = item }; nodeList[item.ParentControlId].Children.Add(nodeList[item.ControlId]); //This logic shouldn't be here for (var index = 0; index < num; ++index) item.ControlId = "\t" + item.ControlId; item.Level = num; item.Type = current["Trace_Type"].CastOrDefault<string>(); item.RenderSize = current["Trace_Render_Size"].CastOrDefault<int>(); item.ViewstateSize = current["Trace_Viewstate_Size"].CastOrDefault<int>(); item.ControlstateSize = current["Trace_Controlstate_Size"].CastOrDefault<int>(); controlList.Add(item); } logger.Debug("Finish processing `Trace_Control_Tree` - Count {0}", nodeList.Count); viewStateFormatter.Process(nodeGraph); return controlList; } return null; }