private void UpdateLoadingWarning(LogProviderStats stats) { var firstMessageWithTimeConstraintViolation = stats.FirstMessageWithTimeConstraintViolation; bool showWarning = firstMessageWithTimeConstraintViolation != null; WriteControl(ControlFlag.LoadedMessagesWarningIcon | ControlFlag.Visibility, showWarning); WriteControl(ControlFlag.LoadedMessagesWarningLinkLabel | ControlFlag.Visibility, showWarning); if (showWarning) { StringBuilder warningMessage = new StringBuilder(); warningMessage.AppendFormat( "One or more messages were skipped because they have incorrect timestamp. The first skipped message:\n\n" ); if (firstMessageWithTimeConstraintViolation.RawText.IsInitialized) { warningMessage.Append(firstMessageWithTimeConstraintViolation.RawText.ToString()); } else { warningMessage.AppendFormat("'{0}' at {1}", firstMessageWithTimeConstraintViolation.Text.ToString(), firstMessageWithTimeConstraintViolation.Time.ToUserFrendlyString(true)); } warningMessage.AppendLine(); warningMessage.AppendLine(); warningMessage.Append("Messages must be strictly ordered by time."); var formatFlags = source.Provider.Factory.Flags; if ((formatFlags & LogProviderFactoryFlag.SupportsReordering) != 0) { warningMessage.AppendLine(); warningMessage.AppendLine(); warningMessage.Append("Select Yes to open reordered temporary copy of the log."); loadedMessageWarningStatus = LoadedMessageWarningStatus.FixableByReordering; } else if ((formatFlags & LogProviderFactoryFlag.DejitterEnabled) != 0) { warningMessage.Append(" Consider increasing reordering buffer size. " + "That can be done in formats management wizard."); loadedMessageWarningStatus = LoadedMessageWarningStatus.Unfixable; } else if ((formatFlags & LogProviderFactoryFlag.SupportsDejitter) != 0) { warningMessage.Append(" Consider enabling automatic messages reordering. " + "That can be done in formats management wizard."); loadedMessageWarningStatus = LoadedMessageWarningStatus.Unfixable; } loadedMessagesWarningMessage = warningMessage.ToString(); } else { loadedMessagesWarningMessage = null; loadedMessageWarningStatus = LoadedMessageWarningStatus.None; } }
void UpdateStatsView(LogProviderStats stats) { string errorMsg = null; string labelValue = null; switch (stats.State) { case LogProviderState.DetectingAvailableTime: labelValue = "Processing the data"; break; case LogProviderState.Idle: labelValue = "Idling"; break; case LogProviderState.LoadError: labelValue = "Loading failed"; if (stats.Error != null) { errorMsg = stats.Error.Message; } break; case LogProviderState.NoFile: labelValue = "No file"; break; default: labelValue = ""; break; } WriteControl(ControlFlag.StateLabel | ControlFlag.Value, labelValue); WriteControl(ControlFlag.StateDetailsLink | ControlFlag.Visibility, errorMsg != null); stateDetailsErrorMessage = errorMsg; if (errorMsg != null) { WriteControl(ControlFlag.StateLabel | ControlFlag.ForeColor, 0xffff0000.ToString()); } else { WriteControl(ControlFlag.StateLabel | ControlFlag.ForeColor, view.DefaultControlForeColor.ToString()); } WriteControl(ControlFlag.LoadedMessagesTextBox | ControlFlag.Value, stats.MessagesCount.ToString()); UpdateLoadingWarning(stats); }
static string GetLogSourceDescription(ILogSource s, LogProviderStats stats) { StringBuilder msg = new StringBuilder(); string annotation = ""; if (!string.IsNullOrWhiteSpace(s.Annotation)) { annotation = s.Annotation + " "; } switch (stats.State) { case LogProviderState.NoFile: msg.Append("(No trace file)"); break; case LogProviderState.DetectingAvailableTime: msg.AppendFormat("{1} {0}: processing...", s.DisplayName, annotation); break; case LogProviderState.LoadError: msg.AppendFormat( "{0}: loading failed ({1})", s.DisplayName, stats.Error != null ? stats.Error.Message : ""); break; case LogProviderState.Idle: if (stats.BackgroundAcivityStatus == LogProviderBackgroundAcivityStatus.Active) { msg.AppendFormat("{1}{0}: processing", s.DisplayName, annotation); } else { msg.AppendFormat("{1}{0}", s.DisplayName, annotation); if (stats.TotalBytes != null) { msg.Append(" ("); StringUtils.FormatBytesUserFriendly(stats.TotalBytes.Value, msg); msg.Append(")"); } } break; } return(msg.ToString()); }
IEnumerable <LogSourceItemData> EnumSourceItemsData() { sourcesDataCache.MarkAllInvalid(); foreach (ILogSource s in logSources.Items) { if (s.IsDisposed) { continue; } var itemData = sourcesDataCache.Get(s, src => new LogSourceItemData() { LogSource = src, ContainerName = logSourcesPreprocessings.ExtractContentsContainerNameFromConnectionParams( src.Provider.ConnectionParams) }); LogProviderStats stats = s.Provider.Stats; itemData.Checked = s.Visible; itemData.Description = GetLogSourceDescription(s, stats); itemData.IsFailed = stats.Error != null; itemData.ItemColor = stats.Error != null ? failedSourceColor : s.Color; yield return(itemData); } sourcesDataCache.Cleanup(); }
private void UpdateStatusControls(int messagsCount, Exception e) { StringBuilder msg = new StringBuilder(); bool? success = null; if (e != null) { while (e.InnerException != null) { e = e.InnerException; } msg.AppendFormat("Failed to parse sample log: {0}", e.Message); success = false; } else { LogProviderStats s = provider.Stats; switch (s.State) { case LogProviderState.Idle: case LogProviderState.DetectingAvailableTime: case LogProviderState.NoFile: if (messagsCount > 0) { success = true; msg.AppendFormat("Successfully parsed {0} message(s)", messagsCount); } else { if (s.State == LogProviderState.Idle) { msg.Append("No messages parsed"); success = false; } else { msg.Append("Trying to parse..."); } } break; case LogProviderState.LoadError: msg.AppendFormat("{0}", s.Error.Message); success = false; break; } } var testOutcome = TestOutcome.None; if (success.HasValue) { if (success.Value) { testOutcome = TestOutcome.Success; } else { testOutcome = TestOutcome.Failure; } } statusOk = success.GetValueOrDefault(false); view.SetData(msg.ToString(), testOutcome); }
void ILogProviderHost.OnStatisticsChanged( LogProviderStats value, LogProviderStats oldValue, LogProviderStatsFlag flags) { }
static bool IsExposableLogSource(LogProviderStats logProviderStats) { return(logProviderStats != null && logProviderStats.PositionsRangeUpdatesCount > 0); }