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); }
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; } } }