예제 #1
0
        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;
            }
        }
예제 #2
0
        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);
        }
예제 #3
0
        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());
        }
예제 #4
0
 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();
 }
예제 #5
0
        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);
        }
예제 #6
0
 void ILogProviderHost.OnStatisticsChanged(
     LogProviderStats value, LogProviderStats oldValue, LogProviderStatsFlag flags)
 {
 }
 static bool IsExposableLogSource(LogProviderStats logProviderStats)
 {
     return(logProviderStats != null && logProviderStats.PositionsRangeUpdatesCount > 0);
 }