public void CreateOrUpdateContext(CommandConnection item) { var isNewContext = false; var context = GetContext(item); if (context != null) { context.ContextStatistics.NumberOfConnections++; } else { isNewContext = true; context = new Context { ObjectContextId = item.ObjectContextId, Url = item.HttpInfo.Url, AtDateTime = item.AtDateTime, ObjectContextName = item.ObjectContextName, ContextStatistics = { NumberOfConnections = 1 }, ManagedThreadId = item.ManagedThreadId, HttpContextCurrentId = item.HttpInfo.HttpContextCurrentId, ApplicationIdentity = item.ApplicationIdentity }; PluginContext.ProfilerData.Contexts.Add(context); if (item.ApplicationIdentity.Equals(GuiModelData.SelectedApplicationIdentity)) { GuiModelData.Contexts.Add(context); } PluginContext.NotifyPluginsHost(NotificationType.Update, 1); UpdateAppIdentityNotificationsCount(context.ApplicationIdentity); } UpdateMultipleContextPerRequestInfo(context); UpdateNumberOfConnections(GetStackTrace(item)); var trafficUrl = GetTrafficUrl(item); UpdateNumberOfConnections(trafficUrl); if (trafficUrl != null && isNewContext) { trafficUrl.NumberOfContexts++; } }
public void GetReleaseInfo(string url) { var taskScheduler = TaskScheduler.FromCurrentSynchronizationContext(); Task.Factory.StartNew(() => { if (!NetworkStatus.IsConnectedToInternet()) { return(null); } using (var webClient = new WebClient()) { webClient.Headers.Add("user-agent", "DNTProfiler"); var jsonData = webClient.DownloadString(url); var gitHubProjectReleases = JsonHelper.DeserializeObject <GitHubProjectRelease[]>(jsonData); var releases = new List <ReleaseInfo>(); foreach (var release in gitHubProjectReleases) { foreach (var asset in release.Assets) { releases.Add(new ReleaseInfo { ReleaseHtmlUrl = release.HtmlUrl, ReleaseTagName = release.TagName, AssetCreatedAt = asset.CreatedAt, AssetName = asset.Name, AssetSize = asset.Size, AssetDownloadCount = asset.DownloadCount }); } } return(releases.OrderByDescending(releaseInfo => releaseInfo.AssetCreatedAt).ToList()); } }).ContinueWith(task => { if (task.IsFaulted) { if (task.Exception != null) { task.Exception.Flatten().Handle(ex => { new ExceptionLogger().LogExceptionToFile(ex, AppMessenger.LogFile); AppMessenger.Messenger.NotifyColleagues("ShowException", ex); return(true); }); } return; } var releaseInfo = task.Result; if (releaseInfo == null || !releaseInfo.Any()) { return; } _mainGuiModel.ReleaseInfo = releaseInfo; _mainGuiModel.SelectedRelease = releaseInfo.FirstOrDefault(); _context.NotifyPluginsHost(NotificationType.Reset, releaseInfo.Count); }, taskScheduler); }
public void Start(string filePath) { _context.NotifyPluginsHost(NotificationType.ShowBusyIndicator, 1); var isActive = _mainGuiModel.DumperSettings.IsActive; var filesCount = _mainGuiModel.Files.Count; _mainGuiModel.DumperSettings.IsActive = false; var taskScheduler = TaskScheduler.FromCurrentSynchronizationContext(); Task.Factory.StartNew(() => { var itemsList = JsonHelper.DeserializeFromFile <IList <BaseInfo> >(filePath, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Objects, }); return(itemsList); }).ContinueWith(task => { if (task.IsFaulted) { if (task.Exception != null) { task.Exception.Flatten().Handle(ex => { new ExceptionLogger().LogExceptionToFile(ex, AppMessenger.LogFile); AppMessenger.Messenger.NotifyColleagues("ShowException", ex); return(true); }); } _context.NotifyPluginsHost(NotificationType.HideBusyIndicator, 1); return; } try { var itemsList = task.Result; if (itemsList == null || !itemsList.Any()) { return; } clearAllData(); _context.NotifyPluginsHost(NotificationType.ResetAll, 0); var count = 0; foreach (var item in itemsList) { var baseInfo = item; baseInfo.ReceivedId = IdGenerator.GetId(); switch (baseInfo.InfoType) { case InfoType.Command: var command = (Command)baseInfo; command.SetCommandStatistics(); _context.ProfilerData.Commands.Add(command); break; case InfoType.CommandConnection: _context.ProfilerData.Connections.Add((CommandConnection)baseInfo); break; case InfoType.CommandResult: _context.ProfilerData.Results.Add((CommandResult)baseInfo); break; case InfoType.CommandTransaction: _context.ProfilerData.Transactions.Add((CommandTransaction)baseInfo); break; } if (count++ % 100 == 0) { DispatcherHelper.DoEvents(); } } } finally { _mainGuiModel.DumperSettings.IsActive = isActive; _context.NotifyPluginsHost(NotificationType.HideBusyIndicator, 1); _context.NotifyPluginsHost(NotificationType.Reset, filesCount); } }, taskScheduler); }