public void AddExceptionStatistics(IExceptionStatistics statistics) { foreach (IVerificationReportBuilder builder in _reportBuilders) { builder.AddExceptionStatistics(statistics); } }
private static void LogResults( [NotNull] IEnumerable <QualitySpecificationElement> qualitySpecificationElements, [NotNull] IssueProcessor issueProcessor, int qualityConditionCount, int datasetCount, bool fulfilled, bool cancelled, [CanBeNull] IExceptionStatistics exceptionStatistics) { using (_msg.IncrementIndentation("Quality verification finished")) { _msg.InfoFormat("Number of verified datasets: {0:N0}", datasetCount); using (_msg.IncrementIndentation("Number of verified quality conditions: {0:N0}", qualityConditionCount)) { LogVerifiedConditions(qualitySpecificationElements, issueProcessor, exceptionStatistics); } _msg.InfoFormat("Warning count: {0:N0}", issueProcessor.WarningCount); _msg.InfoFormat("Error count: {0:N0}", issueProcessor.ErrorCount); if (issueProcessor.RowsWithStopConditionsCount > 0) { _msg.WarnFormat("Number of features with stop errors: {0:N0}", issueProcessor.RowsWithStopConditionsCount); } if (exceptionStatistics != null && exceptionStatistics.TablesWithNonUniqueKeys.Count > 0) { _msg.WarnFormat( "Number of tables with non-unique keys referenced by exception objects: {0}", exceptionStatistics.TablesWithNonUniqueKeys.Count); } if (cancelled) { _msg.Warn("The quality verification was cancelled"); } else if (fulfilled) { _msg.Info("The quality specification is fulfilled"); } else { _msg.Warn("The quality specification is not fulfilled"); } } }
private static XmlExceptionStatistics CreateExceptionStatistics( [NotNull] IExceptionStatistics statistics, [NotNull] IEnumerable <QualitySpecificationElement> verifiedQualityConditions) { var result = new XmlExceptionStatistics { DataSource = WorkspaceUtils.GetWorkspaceDisplayText( statistics.Workspace), ExceptionCount = statistics.ExceptionCount, ExceptionObjectCount = statistics.ExceptionObjectCount, InactiveExceptionObjectCount = statistics.InactiveExceptionObjectCount, UnusedExceptionObjectCount = statistics.UnusedExceptionObjectCount, ExceptionObjectsUsedMultipleTimesCount = statistics.ExceptionObjectsUsedMultipleTimesCount }; foreach (QualitySpecificationElement element in verifiedQualityConditions) { IQualityConditionExceptionStatistics conditionStatistics = statistics.GetQualityConditionStatistics( element.QualityCondition); if (conditionStatistics != null) { result.AddQualityConditionExceptions( CreateQualityConditionExceptionStatistics(conditionStatistics)); } } foreach (ITable table in statistics.TablesWithNonUniqueKeys) { result.AddTableWithNonUniqueKeys( CreateTableWithNonUniqueKeys(table, statistics.GetNonUniqueKeys(table))); } return(result); }
private static void LogVerifiedConditions( [NotNull] IEnumerable <QualitySpecificationElement> qualitySpecificationElements, [NotNull] IssueProcessor issueProcessor, [CanBeNull] IExceptionStatistics exceptionStatistics) { List <QualitySpecificationElement> elementsWithNoCategory; Dictionary <DataQualityCategory, List <QualitySpecificationElement> > elementsByCategory = GetElementsByCategory(qualitySpecificationElements, out elementsWithNoCategory); var categories = new List <DataQualityCategory>(elementsByCategory.Keys); categories.Sort(new DataQualityCategoryComparer()); foreach (DataQualityCategory category in categories) { using (_msg.IncrementIndentation("Category '{0}':", category.Name)) { List <QualitySpecificationElement> elementsForCategory = elementsByCategory[category]; elementsForCategory.Sort(CompareElements); LogElements(elementsForCategory, issueProcessor, exceptionStatistics); } } if (elementsWithNoCategory.Count > 0) { using (_msg.IncrementIndentation("No category:")) { elementsWithNoCategory.Sort(CompareElements); LogElements(elementsWithNoCategory, issueProcessor, exceptionStatistics); } } }
private static void LogElements( [NotNull] IEnumerable <QualitySpecificationElement> qualitySpecificationElements, [NotNull] IssueProcessor issueProcessor, [CanBeNull] IExceptionStatistics exceptionStatistics) { foreach (QualitySpecificationElement element in qualitySpecificationElements) { QualityCondition qualityCondition = element.QualityCondition; int exceptionCount; int issueCount = issueProcessor.GetIssueCount(qualityCondition, out exceptionCount); var sb = new StringBuilder(qualityCondition.Name); if (issueCount > 0) { sb.AppendFormat(element.AllowErrors ? " - warnings: {0}" : " - errors: {0}", issueCount); } if (exceptionCount > 0) { sb.AppendFormat(" - exceptions: {0}", exceptionCount); } if (issueCount > 0) { _msg.Warn(sb.ToString()); } else { _msg.Info(sb.ToString()); } if (exceptionStatistics != null) { IQualityConditionExceptionStatistics conditionStatistics = exceptionStatistics.GetQualityConditionStatistics(qualityCondition); if (conditionStatistics != null) { if (conditionStatistics.UnknownTableNames.Count > 0) { using (_msg.IncrementIndentation()) { _msg.Warn( "Exception objects were ignored for this condition due to unknown table names:"); foreach (string tableName in conditionStatistics.UnknownTableNames) { _msg.WarnFormat( "- {0}: used in {1} exception object(s)", tableName, conditionStatistics .GetExceptionObjectsInvolvingUnknownTableName( tableName).Count); } } } } } } }
public void AddExceptionStatistics(IExceptionStatistics statistics) { _exceptionStatistics = statistics; }
private bool Verify([NotNull] QualitySpecification qualitySpecification, double tileSize, [NotNull] string directory, IssueRepositoryType issueRepositoryType, [NotNull] IEnumerable <KeyValuePair <string, string> > properties, [CanBeNull] XmlVerificationOptions verificationOptions, [CanBeNull] AreaOfInterest areaOfInterest, [CanBeNull] ITrackCancel trackCancel, out int errorCount, out int warningCount, out int exceptionCount, out int unusedExceptionObjectCount, out int rowCountWithStopConditions) { Model primaryModel = StandaloneVerificationUtils.GetPrimaryModel(qualitySpecification); Assert.NotNull(primaryModel, "no primary model found for quality specification"); // TODO disable quality conditions based on primaryModel and DatasetTestParameterValue.UsedAsReferenceData? // TODO this would probably require an explicit identification of the primary data source XmlVerificationReportBuilder xmlReportBuilder = GetReportBuilder(); var statisticsBuilder = new IssueStatisticsBuilder(); var datasetsCollector = new InvolvedDatasetsCollector(); var service = new StandaloneQualityVerificationService( new MultiReportBuilder(xmlReportBuilder, statisticsBuilder, datasetsCollector), (context) => new SimpleDatasetOpener(context)); // This context excludes geometric networks, terrains, topology, etc.: var datasetContext = new MasterDatabaseDatasetContext(); var datasetResolver = new QualityConditionObjectDatasetResolver( new MasterDatabaseWorkspaceContextLookup()); string issueWorkspaceName = VerificationOptionUtils.GetIssueWorkspaceName(verificationOptions); string verificationReportFileName = VerificationOptionUtils.GetXmlReportFileName(verificationOptions); ISpatialReference spatialReference = primaryModel.SpatialReferenceDescriptor?.SpatialReference; var issueGdbWritten = false; bool fulfilled; List <string> htmlReportFilePaths; List <string> specificationReportFilePaths; string gdbPath = null; Func <IObjectDataset, string> getKeyField = StandaloneVerificationUtils.GetKeyFieldLookupFunction(verificationOptions); ExceptionObjectRepository exceptionObjectRepository = StandaloneVerificationUtils.PrepareExceptionRepository( qualitySpecification, datasetContext, datasetResolver, areaOfInterest, verificationOptions); using (IIssueRepository issueRepository = ExternalIssueRepositoryUtils.GetIssueRepository( directory, issueWorkspaceName, spatialReference, issueRepositoryType, addExceptionFields: true)) { fulfilled = service.Verify(qualitySpecification, datasetContext, datasetResolver, issueRepository, exceptionObjectRepository, tileSize, getKeyField, areaOfInterest, trackCancel, out errorCount, out warningCount, out rowCountWithStopConditions); if (issueRepository != null) { issueGdbWritten = true; gdbPath = ((IWorkspace)issueRepository.FeatureWorkspace).PathName; _msg.InfoFormat("Issues written to {0}", gdbPath); issueRepository.CreateIndexes(GetForSubProcess(trackCancel), ignoreErrors: true); } using (_msg.IncrementIndentation("Documenting verification results...")) { XmlVerificationReport verificationReport = GetVerificationReport( xmlReportBuilder, qualitySpecification, properties); string verificationReportPath = Path.Combine(directory, verificationReportFileName); XmlUtils.Serialize(verificationReport, verificationReportPath); _msg.InfoFormat("Verification report written to {0}", verificationReportPath); IssueStatistics issueStatistics = statisticsBuilder.IssueStatistics; if (issueRepository != null) { var issueStatisticsWriter = new IssueStatisticsWriter(issueRepository.FeatureWorkspace); issueStatisticsWriter.WriteStatistics(issueStatistics); if (spatialReference != null && areaOfInterest != null && !areaOfInterest.IsEmpty) { var aoiWriter = new AreaOfInterestWriter(issueRepository.FeatureWorkspace); aoiWriter.WriteAreaOfInterest(areaOfInterest, spatialReference); } } specificationReportFilePaths = StandaloneVerificationUtils.WriteQualitySpecificationReport( qualitySpecification, directory, _qualitySpecificationTemplatePath, verificationOptions); htmlReportFilePaths = StandaloneVerificationUtils.WriteHtmlReports( qualitySpecification, directory, issueStatistics, verificationReport, verificationReportFileName, _htmlReportTemplatePath, verificationOptions, issueGdbWritten ? gdbPath : null, null, specificationReportFilePaths); } } GC.Collect(); GC.WaitForPendingFinalizers(); if (htmlReportFilePaths.Count > 0) { using (_msg.IncrementIndentation(htmlReportFilePaths.Count == 1 ? "Html report:" : "Html reports:")) { foreach (string path in htmlReportFilePaths) { _msg.Info(path); } } } if (specificationReportFilePaths.Count > 0) { using (_msg.IncrementIndentation(specificationReportFilePaths.Count == 1 ? "Quality specification report:" : "Quality specification reports:")) { foreach (string path in specificationReportFilePaths) { _msg.Info(path); } } } if (exceptionObjectRepository != null) { IExceptionStatistics stats = exceptionObjectRepository.ExceptionStatistics; exceptionCount = stats.ExceptionCount; unusedExceptionObjectCount = stats.UnusedExceptionObjectCount; } else { exceptionCount = 0; unusedExceptionObjectCount = 0; } return(fulfilled); }
public void AddExceptionStatistics(IExceptionStatistics statistics) { IssueStatistics.IncludeUsedExceptions(statistics.GetUsedExceptions()); }
public void AddExceptionStatistics(IExceptionStatistics statistics) { }