Пример #1
0
        private void RefreshPostprocessorOutput(
            LogSourceRecordInternal logSourceRecord,
            PostprocessorOutputRecordInternal postprocessorOutputRecord,
            ref bool somethingChanged,
            bool assumeChanged)
        {
            LogSourcePostprocessorOutput.Status oldStatus  = postprocessorOutputRecord.status;
            IPostprocessorRunSummary            oldSummary = postprocessorOutputRecord.lastRunSummary;

            bool postprocessorOutputNeedsLoading =
                assumeChanged ||
                postprocessorOutputRecord.status != LogSourcePostprocessorOutput.Status.Finished;

            if (postprocessorOutputRecord.postprocessorTask != null)
            {
                if (postprocessorOutputRecord.postprocessorTask.IsCompleted)
                {
                    if (postprocessorOutputRecord.postprocessorTask.GetTaskException() != null)
                    {
                        postprocessorOutputRecord.lastRunSummary = new FailedRunSummary(postprocessorOutputRecord.postprocessorTask.GetTaskException());
                    }
                    else
                    {
                        var runSummary            = postprocessorOutputRecord.postprocessorTask.Result;
                        var logSpecificRunSummary = runSummary?.GetLogSpecificSummary(logSourceRecord.logSource) ?? runSummary;
                        postprocessorOutputRecord.lastRunSummary = logSpecificRunSummary;
                    }
                    postprocessorOutputRecord.ClearPostprocessorTask();
                    postprocessorOutputNeedsLoading = true;
                }
                else
                {
                    postprocessorOutputRecord.status = LogSourcePostprocessorOutput.Status.InProgress;
                    postprocessorOutputNeedsLoading  = false;
                }
            }

            if (postprocessorOutputNeedsLoading)
            {
                TryLoadParserOutputAndUpdateStatus(logSourceRecord, postprocessorOutputRecord);
            }

            somethingChanged = somethingChanged ||
                               (postprocessorOutputRecord.status != oldStatus) ||
                               (postprocessorOutputRecord.lastRunSummary != oldSummary);
        }
Пример #2
0
 private void TryLoadParserOutputAndUpdateStatus(LogSourceRecordInternal logSourceRecord, PostprocessorOutputRecordInternal r)
 {
     if (string.IsNullOrEmpty(logSourceRecord.logFileName) ||
         (r.lastRunSummary != null && r.lastRunSummary.HasErrors))
     {
         r.status = LogSourcePostprocessorOutput.Status.Failed;
         return;
     }
     using (var existingSection = logSourceRecord.logSource.LogSourceSpecificStorageEntry.OpenXMLSection(
                MakePostprocessorOutputFileName(r.Metadata), Persistence.StorageSectionOpenFlag.ReadOnly))
     {
         if (existingSection.Data.Root == null)
         {
             r.status = LogSourcePostprocessorOutput.Status.NeverRun;
             return;
         }
         try
         {
             object tmpOutput = r.Metadata.DeserializeOutputData(existingSection.Data, logSourceRecord.logSource);
             r.outputData = tmpOutput;
             if (IsOutputOutdated(logSourceRecord.logSource, existingSection))
             {
                 r.status = LogSourcePostprocessorOutput.Status.Outdated;
             }
             else
             {
                 r.status = LogSourcePostprocessorOutput.Status.Finished;
             }
         }
         catch (Exception)
         {
             // If reading a file throws exception assume that cached format is old and unsupported.
             r.status = LogSourcePostprocessorOutput.Status.NeverRun;
             return;
         }
     }
 }