diff --git a/dqops/src/main/frontend/src/pages/IncidentDetail/BarChart.tsx b/dqops/src/main/frontend/src/pages/IncidentDetail/BarChart.tsx index 41ab601f47..133f078b2d 100644 --- a/dqops/src/main/frontend/src/pages/IncidentDetail/BarChart.tsx +++ b/dqops/src/main/frontend/src/pages/IncidentDetail/BarChart.tsx @@ -2,19 +2,19 @@ import moment from 'moment/moment'; import React, { useState } from 'react'; import { Bar } from 'react-chartjs-2'; import { - IncidentDailyIssuesCount, - IncidentIssueHistogramModel + HistogramDailyIssuesCount, + IssueHistogramModel } from '../../api'; import { useActionDispatch } from '../../hooks/useActionDispatch'; import { setIncidentsHistogram } from '../../redux/actions/incidents.actions'; type BarChartProps = { - histograms: IncidentIssueHistogramModel; + histograms: IssueHistogramModel; }; export const BarChart = ({ histograms }: BarChartProps) => { const [savedHistograms, setSavedHistograms] = - useState(null); + useState(null); const dispatch = useActionDispatch(); const data = { labels: Object.keys(histograms?.days || {}).map((item) => @@ -24,7 +24,7 @@ export const BarChart = ({ histograms }: BarChartProps) => { { label: 'Warnings', data: Object.values(histograms?.days || {}).map( - (item: IncidentDailyIssuesCount) => item.warnings + (item: HistogramDailyIssuesCount) => item.warnings ), backgroundColor: '#EBE51E', barPercentage: 0.9 @@ -32,7 +32,7 @@ export const BarChart = ({ histograms }: BarChartProps) => { { label: 'Errors', data: Object.values(histograms?.days || {}).map( - (item: IncidentDailyIssuesCount) => item.errors + (item: HistogramDailyIssuesCount) => item.errors ), backgroundColor: '#FF9900', barPercentage: 0.9 @@ -40,7 +40,7 @@ export const BarChart = ({ histograms }: BarChartProps) => { { label: 'Fatals', data: Object.values(histograms?.days || {}).map( - (item: IncidentDailyIssuesCount) => item.fatals + (item: HistogramDailyIssuesCount) => item.fatals ), backgroundColor: '#E3170A', barPercentage: 0.9 diff --git a/dqops/src/main/frontend/src/pages/IncidentDetail/HistogramChart.tsx b/dqops/src/main/frontend/src/pages/IncidentDetail/HistogramChart.tsx index cd53b9308e..448df1e7ef 100644 --- a/dqops/src/main/frontend/src/pages/IncidentDetail/HistogramChart.tsx +++ b/dqops/src/main/frontend/src/pages/IncidentDetail/HistogramChart.tsx @@ -1,7 +1,7 @@ import clsx from 'clsx'; import React, { useEffect } from 'react'; import { useSelector } from 'react-redux'; -import { IncidentIssueHistogramModel } from '../../api'; +import { IssueHistogramModel } from '../../api'; import SectionWrapper from '../../components/Dashboard/SectionWrapper'; import { useActionDispatch } from '../../hooks/useActionDispatch'; import { @@ -42,7 +42,7 @@ export const HistogramChart = ({ histograms, histogramFilter }: { - histograms: IncidentIssueHistogramModel; + histograms: IssueHistogramModel; histogramFilter: IncidentHistogramFilter; } = useSelector(getFirstLevelIncidentsState); const { activeTab } = useSelector((state: IRootState) => state.incidents); diff --git a/dqops/src/main/frontend/src/pages/IncidentDetail/index.tsx b/dqops/src/main/frontend/src/pages/IncidentDetail/index.tsx index a5d50f28db..0c24d967f3 100644 --- a/dqops/src/main/frontend/src/pages/IncidentDetail/index.tsx +++ b/dqops/src/main/frontend/src/pages/IncidentDetail/index.tsx @@ -4,7 +4,7 @@ import React, { useEffect, useState } from 'react'; import { useSelector } from 'react-redux'; import { useHistory } from 'react-router-dom'; import { - IncidentIssueHistogramModel, + IssueHistogramModel, IncidentModel, IncidentModelNotificationLocationEnum, IncidentModelStatusEnum @@ -104,7 +104,7 @@ export const IncidentDetail = () => { const { sidebarWidth } = useTree(); const { issues, filters = {} } = useSelector(getFirstLevelIncidentsState); const history = useHistory(); - const { histograms }: { histograms: IncidentIssueHistogramModel } = + const { histograms }: { histograms: IssueHistogramModel } = useSelector(getFirstLevelIncidentsState); useEffect(() => { IncidentsApi.getIncident(connection, year, month, incidentId).then( diff --git a/dqops/src/main/frontend/src/redux/actions/incidents.actions.ts b/dqops/src/main/frontend/src/redux/actions/incidents.actions.ts index a1cbe74718..cf0d895acb 100644 --- a/dqops/src/main/frontend/src/redux/actions/incidents.actions.ts +++ b/dqops/src/main/frontend/src/redux/actions/incidents.actions.ts @@ -19,7 +19,7 @@ import { Dispatch } from 'redux'; import { AxiosResponse } from 'axios'; import { CheckResultEntryModel, - IncidentIssueHistogramModel, + IssueHistogramModel, IncidentModel, IncidentsPerConnectionModel } from '../../api'; @@ -210,7 +210,7 @@ export const getIncidentsHistogramsRequest = () => ({ }); export const getIncidentsHistogramsSuccess = ( - data: IncidentIssueHistogramModel + data: IssueHistogramModel ) => ({ type: INCIDENTS_ACTION.GET_INCIDENTS_HISTOGRAMS_SUCCESS, data @@ -236,7 +236,7 @@ export const getIncidentsHistograms = async (dispatch: Dispatch) => { dispatch(getIncidentsHistogramsRequest()); try { - const res: AxiosResponse = + const res: AxiosResponse = await IncidentsApi.getIncidentHistogram( connection, year, @@ -266,7 +266,7 @@ export const addSelectedConnection = (data: { [key: string]: string }) => ({ data }); -export const setIncidentsHistogram = (data: IncidentIssueHistogramModel) => ({ +export const setIncidentsHistogram = (data: IssueHistogramModel) => ({ type: INCIDENTS_ACTION.SET_INCIDENTS_HISTOGRAM, data }); diff --git a/dqops/src/main/java/com/dqops/data/checkresults/models/IncidentIssueHistogramModel.java b/dqops/src/main/java/com/dqops/data/checkresults/models/IssueHistogramModel.java similarity index 91% rename from dqops/src/main/java/com/dqops/data/checkresults/models/IncidentIssueHistogramModel.java rename to dqops/src/main/java/com/dqops/data/checkresults/models/IssueHistogramModel.java index 3f816555bd..1348fb4b12 100644 --- a/dqops/src/main/java/com/dqops/data/checkresults/models/IncidentIssueHistogramModel.java +++ b/dqops/src/main/java/com/dqops/data/checkresults/models/IssueHistogramModel.java @@ -17,7 +17,7 @@ package com.dqops.data.checkresults.models; import com.dqops.checks.CheckType; -import com.dqops.data.incidents.models.IncidentDailyIssuesCount; +import com.dqops.data.incidents.models.HistogramDailyIssuesCount; import com.dqops.metadata.timeseries.TimePeriodGradient; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonPropertyDescription; @@ -31,13 +31,13 @@ import java.util.stream.Collectors; /** - * Model that returns histograms of the data quality issue occurrences related to a data quality incident. + * Model that returns histograms of the data quality issue occurrences related to a data quality incident or a table. * The dates in the daily histogram are using the default timezone of the DQOps server. */ @JsonInclude(JsonInclude.Include.NON_NULL) @JsonNaming(PropertyNamingStrategies.LowerCamelCaseStrategy.class) @Data -public class IncidentIssueHistogramModel { +public class IssueHistogramModel { /** * True when this data quality incident is based on data quality issues from profiling checks within the filters applied to search for linked data quality issues. */ @@ -72,7 +72,7 @@ public class IncidentIssueHistogramModel { * A map of the numbers of data quality issues per day, the day uses the DQOps server timezone. */ @JsonPropertyDescription("A map of the numbers of data quality issues per day, the day uses the DQOps server timezone.") - private Map days = new TreeMap<>(); + private Map days = new TreeMap<>(); /** * A map of column names with the most data quality issues related to the incident. The map returns the count of issues as the value. @@ -131,13 +131,13 @@ public void markCheckType(CheckType checkType, TimePeriodGradient timeScale) { * @param severity Severity level of a failed data quality check. */ public void incrementSeverityForDay(LocalDate date, int severity) { - IncidentDailyIssuesCount incidentDailyIssuesCount = this.days.get(date); - if (incidentDailyIssuesCount == null) { - incidentDailyIssuesCount = new IncidentDailyIssuesCount(); - this.days.put(date, incidentDailyIssuesCount); + HistogramDailyIssuesCount histogramDailyIssuesCount = this.days.get(date); + if (histogramDailyIssuesCount == null) { + histogramDailyIssuesCount = new HistogramDailyIssuesCount(); + this.days.put(date, histogramDailyIssuesCount); } - incidentDailyIssuesCount.incrementForIssueSeverity(severity); + histogramDailyIssuesCount.incrementForIssueSeverity(severity); } /** @@ -184,8 +184,8 @@ public void addMissingDaysInRange() { LocalDate lastDate; if (this.days instanceof TreeMap) { - firstDate = ((TreeMap) this.days).firstKey(); - lastDate = ((TreeMap) this.days).lastKey(); + firstDate = ((TreeMap) this.days).firstKey(); + lastDate = ((TreeMap) this.days).lastKey(); } else { List daysKeysSortedList = this.days.keySet().stream().sorted().collect(Collectors.toList()); firstDate = daysKeysSortedList.get(0); @@ -198,7 +198,7 @@ public void addMissingDaysInRange() { continue; } - this.days.put(date, new IncidentDailyIssuesCount()); + this.days.put(date, new HistogramDailyIssuesCount()); } } diff --git a/dqops/src/main/java/com/dqops/data/checkresults/services/CheckResultsDataService.java b/dqops/src/main/java/com/dqops/data/checkresults/services/CheckResultsDataService.java index 941f3a3896..274902d50b 100644 --- a/dqops/src/main/java/com/dqops/data/checkresults/services/CheckResultsDataService.java +++ b/dqops/src/main/java/com/dqops/data/checkresults/services/CheckResultsDataService.java @@ -124,14 +124,14 @@ CheckResultEntryModel[] loadCheckResultsRelatedToIncident(String connectionName, * @param userDomainIdentity User identity with the data domain. * @return Daily histogram of failed data quality checks. */ - IncidentIssueHistogramModel buildDailyIssuesHistogramForIncident(String connectionName, - PhysicalTableName physicalTableName, - long incidentHash, - Instant firstSeen, - Instant incidentUntil, - int minSeverity, - IncidentHistogramFilterParameters filterParameters, - UserDomainIdentity userDomainIdentity); + IssueHistogramModel buildDailyIssuesHistogramForIncident(String connectionName, + PhysicalTableName physicalTableName, + long incidentHash, + Instant firstSeen, + Instant incidentUntil, + int minSeverity, + IncidentHistogramFilterParameters filterParameters, + UserDomainIdentity userDomainIdentity); /** * Analyzes the table to find the status of the most recent data quality check for each time series diff --git a/dqops/src/main/java/com/dqops/data/checkresults/services/CheckResultsDataServiceImpl.java b/dqops/src/main/java/com/dqops/data/checkresults/services/CheckResultsDataServiceImpl.java index 686383d1ec..804fc9ea22 100644 --- a/dqops/src/main/java/com/dqops/data/checkresults/services/CheckResultsDataServiceImpl.java +++ b/dqops/src/main/java/com/dqops/data/checkresults/services/CheckResultsDataServiceImpl.java @@ -711,14 +711,14 @@ public CheckResultEntryModel[] loadCheckResultsRelatedToIncident(String connecti * @return Daily histogram of failed data quality checks. */ @Override - public IncidentIssueHistogramModel buildDailyIssuesHistogramForIncident(String connectionName, - PhysicalTableName physicalTableName, - long incidentHash, - Instant firstSeen, - Instant incidentUntil, - int minSeverity, - IncidentHistogramFilterParameters filterParameters, - UserDomainIdentity userDomainIdentity) { + public IssueHistogramModel buildDailyIssuesHistogramForIncident(String connectionName, + PhysicalTableName physicalTableName, + long incidentHash, + Instant firstSeen, + Instant incidentUntil, + int minSeverity, + IncidentHistogramFilterParameters filterParameters, + UserDomainIdentity userDomainIdentity) { ZoneId defaultTimeZoneId = this.defaultTimeZoneProvider.getDefaultTimeZoneId(); CheckResultsSnapshot checkResultsSnapshot = this.checkResultsSnapshotFactory.createReadOnlySnapshot(connectionName, @@ -736,7 +736,7 @@ public IncidentIssueHistogramModel buildDailyIssuesHistogramForIncident(String c LocalDate endMonth = incidentUntil.plus(12L, ChronoUnit.HOURS).atZone(defaultTimeZoneId).toLocalDate(); if (!checkResultsSnapshot.ensureMonthsAreLoaded(startDay, endMonth)) { - return new IncidentIssueHistogramModel(); + return new IssueHistogramModel(); } Instant startTimestamp = firstSeen; @@ -750,7 +750,7 @@ public IncidentIssueHistogramModel buildDailyIssuesHistogramForIncident(String c } } - IncidentIssueHistogramModel histogramModel = new IncidentIssueHistogramModel(); + IssueHistogramModel histogramModel = new IssueHistogramModel(); Map loadedMonthlyPartitions = checkResultsSnapshot.getLoadedMonthlyPartitions(); for (Map.Entry loadedPartitionEntry : loadedMonthlyPartitions.entrySet()) { diff --git a/dqops/src/main/java/com/dqops/data/incidents/models/IncidentDailyIssuesCount.java b/dqops/src/main/java/com/dqops/data/incidents/models/HistogramDailyIssuesCount.java similarity index 91% rename from dqops/src/main/java/com/dqops/data/incidents/models/IncidentDailyIssuesCount.java rename to dqops/src/main/java/com/dqops/data/incidents/models/HistogramDailyIssuesCount.java index 8fa8a29ca2..fdae8973b2 100644 --- a/dqops/src/main/java/com/dqops/data/incidents/models/IncidentDailyIssuesCount.java +++ b/dqops/src/main/java/com/dqops/data/incidents/models/HistogramDailyIssuesCount.java @@ -22,16 +22,13 @@ import com.fasterxml.jackson.databind.annotation.JsonNaming; import lombok.Data; -import java.time.LocalDateTime; -import java.time.ZoneOffset; - /** * A model that stores a daily number of incidents. */ @JsonInclude(JsonInclude.Include.NON_NULL) @JsonNaming(PropertyNamingStrategies.LowerCamelCaseStrategy.class) @Data -public class IncidentDailyIssuesCount { +public class HistogramDailyIssuesCount { /** * The number of failed data quality checks that generated a warning severity data quality issue. */ @@ -77,10 +74,10 @@ else if (severityLevel == 3) { /** * Sample factory for an incident model. */ - public static class IncidentDailyIssuesCountSampleFactory implements SampleValueFactory { + public static class IncidentDailyIssuesCountSampleFactory implements SampleValueFactory { @Override - public IncidentDailyIssuesCount createSample() { - return new IncidentDailyIssuesCount() {{ + public HistogramDailyIssuesCount createSample() { + return new HistogramDailyIssuesCount() {{ setTotalCount(10); setWarnings(2); setErrors(7); diff --git a/dqops/src/main/java/com/dqops/data/incidents/services/IncidentsDataService.java b/dqops/src/main/java/com/dqops/data/incidents/services/IncidentsDataService.java index e13ffa5f96..e9b1e3f753 100644 --- a/dqops/src/main/java/com/dqops/data/incidents/services/IncidentsDataService.java +++ b/dqops/src/main/java/com/dqops/data/incidents/services/IncidentsDataService.java @@ -20,7 +20,7 @@ import com.dqops.data.checkresults.models.CheckResultEntryModel; import com.dqops.data.checkresults.models.CheckResultListFilterParameters; import com.dqops.data.checkresults.models.IncidentHistogramFilterParameters; -import com.dqops.data.checkresults.models.IncidentIssueHistogramModel; +import com.dqops.data.checkresults.models.IssueHistogramModel; import com.dqops.data.incidents.factory.IncidentStatus; import com.dqops.data.incidents.models.*; @@ -100,10 +100,10 @@ CheckResultEntryModel[] loadCheckResultsForIncident(String connectionName, * @param userDomainIdentity Calling user identity with the data domain. * @return Daily histogram of days when a data quality issue failed. */ - IncidentIssueHistogramModel buildDailyIssuesHistogramForIncident(String connectionName, - int year, - int month, - String incidentId, - IncidentHistogramFilterParameters filterParameters, - UserDomainIdentity userDomainIdentity); + IssueHistogramModel buildDailyIssuesHistogramForIncident(String connectionName, + int year, + int month, + String incidentId, + IncidentHistogramFilterParameters filterParameters, + UserDomainIdentity userDomainIdentity); } diff --git a/dqops/src/main/java/com/dqops/data/incidents/services/IncidentsDataServiceImpl.java b/dqops/src/main/java/com/dqops/data/incidents/services/IncidentsDataServiceImpl.java index b067653b87..e7c0e7e772 100644 --- a/dqops/src/main/java/com/dqops/data/incidents/services/IncidentsDataServiceImpl.java +++ b/dqops/src/main/java/com/dqops/data/incidents/services/IncidentsDataServiceImpl.java @@ -21,7 +21,7 @@ import com.dqops.data.checkresults.models.CheckResultEntryModel; import com.dqops.data.checkresults.models.CheckResultListFilterParameters; import com.dqops.data.checkresults.models.IncidentHistogramFilterParameters; -import com.dqops.data.checkresults.models.IncidentIssueHistogramModel; +import com.dqops.data.checkresults.models.IssueHistogramModel; import com.dqops.data.checkresults.services.CheckResultsDataService; import com.dqops.data.incidents.factory.IncidentStatus; import com.dqops.data.incidents.factory.IncidentsColumnNames; @@ -358,18 +358,18 @@ public CheckResultEntryModel[] loadCheckResultsForIncident(String connectionName * @return Daily histogram of days when a data quality issue failed. */ @Override - public IncidentIssueHistogramModel buildDailyIssuesHistogramForIncident(String connectionName, - int year, - int month, - String incidentId, - IncidentHistogramFilterParameters filterParameters, - UserDomainIdentity userDomainIdentity) { + public IssueHistogramModel buildDailyIssuesHistogramForIncident(String connectionName, + int year, + int month, + String incidentId, + IncidentHistogramFilterParameters filterParameters, + UserDomainIdentity userDomainIdentity) { IncidentModel incidentModel = this.loadIncident(connectionName, year, month, incidentId, userDomainIdentity); if (incidentModel == null) { return null; } - IncidentIssueHistogramModel histogramModel = this.checkResultsDataService.buildDailyIssuesHistogramForIncident(connectionName, + IssueHistogramModel histogramModel = this.checkResultsDataService.buildDailyIssuesHistogramForIncident(connectionName, new PhysicalTableName(incidentModel.getSchema(), incidentModel.getTable()), incidentModel.getIncidentHash(), incidentModel.getFirstSeen(), diff --git a/dqops/src/main/java/com/dqops/rest/controllers/IncidentsController.java b/dqops/src/main/java/com/dqops/rest/controllers/IncidentsController.java index d4c650bf07..b10fa58523 100644 --- a/dqops/src/main/java/com/dqops/rest/controllers/IncidentsController.java +++ b/dqops/src/main/java/com/dqops/rest/controllers/IncidentsController.java @@ -49,7 +49,6 @@ import java.time.LocalDate; import java.util.Collection; import java.util.Optional; -import java.util.concurrent.CompletableFuture; /** * Data quality incidents REST API controller. @@ -240,18 +239,18 @@ public Mono>> getIncidentIssues( */ @GetMapping(value = "/incidents/{connectionName}/{year}/{month}/{incidentId}/histogram", produces = "application/json") @ApiOperation(value = "getIncidentHistogram", notes = "Generates histograms of data quality issues for each day, returning the number of data quality issues on that day. The other histograms are by a column name and by a check name.", - response = IncidentIssueHistogramModel.class, + response = IssueHistogramModel.class, authorizations = { @Authorization(value = "authorization_bearer_api_key") }) @ResponseStatus(HttpStatus.OK) @ApiResponses(value = { - @ApiResponse(code = 200, message = "Incidents' histograms returned", response = IncidentIssueHistogramModel.class), + @ApiResponse(code = 200, message = "Incidents' histograms returned", response = IssueHistogramModel.class), @ApiResponse(code = 404, message = "Incident not found"), @ApiResponse(code = 500, message = "Internal Server Error", response = SpringErrorPayload.class) }) @Secured({DqoPermissionNames.VIEW}) - public Mono>> getIncidentHistogram( + public Mono>> getIncidentHistogram( @AuthenticationPrincipal DqoUserPrincipal principal, @ApiParam("Connection name") @PathVariable String connectionName, @ApiParam("Year when the incident was first seen") @PathVariable int year, @@ -285,7 +284,7 @@ public Mono>> getIncidentHistog filterParameters.setCheck(check.get()); } - IncidentIssueHistogramModel histogramModel = this.incidentsDataService.buildDailyIssuesHistogramForIncident( + IssueHistogramModel histogramModel = this.incidentsDataService.buildDailyIssuesHistogramForIncident( connectionName, year, month, incidentId, filterParameters, principal.getDataDomainIdentity()); if (histogramModel == null) { diff --git a/dqops/src/main/resources/static/swagger-api/dqops-api-swagger-2.json b/dqops/src/main/resources/static/swagger-api/dqops-api-swagger-2.json index 8711e3ca24..41e39997e4 100644 --- a/dqops/src/main/resources/static/swagger-api/dqops-api-swagger-2.json +++ b/dqops/src/main/resources/static/swagger-api/dqops-api-swagger-2.json @@ -15792,7 +15792,7 @@ "200" : { "description" : "Incidents' histograms returned", "schema" : { - "$ref" : "#/definitions/IncidentIssueHistogramModel" + "$ref" : "#/definitions/IssueHistogramModel" } }, "404" : { @@ -39605,6 +39605,31 @@ } } }, + "HistogramDailyIssuesCount" : { + "type" : "object", + "properties" : { + "warnings" : { + "type" : "integer", + "format" : "int32", + "description" : "The number of failed data quality checks that generated a warning severity data quality issue." + }, + "errors" : { + "type" : "integer", + "format" : "int32", + "description" : "The number of failed data quality checks that generated an error severity data quality issue." + }, + "fatals" : { + "type" : "integer", + "format" : "int32", + "description" : "The number of failed data quality checks that generated a fatal severity data quality issue." + }, + "totalCount" : { + "type" : "integer", + "format" : "int32", + "description" : "The total count of failed data quality checks on this day." + } + } + }, "IcebergFileFormatSpec" : { "type" : "object", "properties" : { @@ -39735,79 +39760,6 @@ } } }, - "IncidentDailyIssuesCount" : { - "type" : "object", - "properties" : { - "warnings" : { - "type" : "integer", - "format" : "int32", - "description" : "The number of failed data quality checks that generated a warning severity data quality issue." - }, - "errors" : { - "type" : "integer", - "format" : "int32", - "description" : "The number of failed data quality checks that generated an error severity data quality issue." - }, - "fatals" : { - "type" : "integer", - "format" : "int32", - "description" : "The number of failed data quality checks that generated a fatal severity data quality issue." - }, - "totalCount" : { - "type" : "integer", - "format" : "int32", - "description" : "The total count of failed data quality checks on this day." - } - } - }, - "IncidentIssueHistogramModel" : { - "type" : "object", - "properties" : { - "hasProfilingIssues" : { - "type" : "boolean", - "description" : "True when this data quality incident is based on data quality issues from profiling checks within the filters applied to search for linked data quality issues." - }, - "hasDailyMonitoringIssues" : { - "type" : "boolean", - "description" : "True when this data quality incident is based on data quality issues from daily monitoring checks within the filters applied to search for linked data quality issues." - }, - "hasMonthlyMonitoringIssues" : { - "type" : "boolean", - "description" : "True when this data quality incident is based on data quality issues from monthly monitoring checks within the filters applied to search for linked data quality issues." - }, - "hasDailyPartitionedIssues" : { - "type" : "boolean", - "description" : "True when this data quality incident is based on data quality issues from daily partitioned checks within the filters applied to search for linked data quality issues." - }, - "hasMonthlyPartitionedIssues" : { - "type" : "boolean", - "description" : "True when this data quality incident is based on data quality issues from monthly partitioned checks within the filters applied to search for linked data quality issues." - }, - "days" : { - "type" : "object", - "description" : "A map of the numbers of data quality issues per day, the day uses the DQOps server timezone.", - "additionalProperties" : { - "$ref" : "#/definitions/IncidentDailyIssuesCount" - } - }, - "columns" : { - "type" : "object", - "description" : "A map of column names with the most data quality issues related to the incident. The map returns the count of issues as the value.", - "additionalProperties" : { - "type" : "integer", - "format" : "int32" - } - }, - "checks" : { - "type" : "object", - "description" : "A map of data quality check names with the most data quality issues related to the incident. The map returns the count of issues as the value.", - "additionalProperties" : { - "type" : "integer", - "format" : "int32" - } - } - } - }, "IncidentModel" : { "type" : "object", "properties" : { @@ -40002,6 +39954,54 @@ } } }, + "IssueHistogramModel" : { + "type" : "object", + "properties" : { + "hasProfilingIssues" : { + "type" : "boolean", + "description" : "True when this data quality incident is based on data quality issues from profiling checks within the filters applied to search for linked data quality issues." + }, + "hasDailyMonitoringIssues" : { + "type" : "boolean", + "description" : "True when this data quality incident is based on data quality issues from daily monitoring checks within the filters applied to search for linked data quality issues." + }, + "hasMonthlyMonitoringIssues" : { + "type" : "boolean", + "description" : "True when this data quality incident is based on data quality issues from monthly monitoring checks within the filters applied to search for linked data quality issues." + }, + "hasDailyPartitionedIssues" : { + "type" : "boolean", + "description" : "True when this data quality incident is based on data quality issues from daily partitioned checks within the filters applied to search for linked data quality issues." + }, + "hasMonthlyPartitionedIssues" : { + "type" : "boolean", + "description" : "True when this data quality incident is based on data quality issues from monthly partitioned checks within the filters applied to search for linked data quality issues." + }, + "days" : { + "type" : "object", + "description" : "A map of the numbers of data quality issues per day, the day uses the DQOps server timezone.", + "additionalProperties" : { + "$ref" : "#/definitions/HistogramDailyIssuesCount" + } + }, + "columns" : { + "type" : "object", + "description" : "A map of column names with the most data quality issues related to the incident. The map returns the count of issues as the value.", + "additionalProperties" : { + "type" : "integer", + "format" : "int32" + } + }, + "checks" : { + "type" : "object", + "description" : "A map of data quality check names with the most data quality issues related to the incident. The map returns the count of issues as the value.", + "additionalProperties" : { + "type" : "integer", + "format" : "int32" + } + } + } + }, "JsonFileFormatSpec" : { "type" : "object", "properties" : { diff --git a/dqops/src/main/resources/static/swagger-api/dqops-api-swagger-2.yaml b/dqops/src/main/resources/static/swagger-api/dqops-api-swagger-2.yaml index 9bd3d697ba..3d59e19315 100644 --- a/dqops/src/main/resources/static/swagger-api/dqops-api-swagger-2.yaml +++ b/dqops/src/main/resources/static/swagger-api/dqops-api-swagger-2.yaml @@ -13255,7 +13255,7 @@ paths: 200: description: "Incidents' histograms returned" schema: - $ref: "#/definitions/IncidentIssueHistogramModel" + $ref: "#/definitions/IssueHistogramModel" 404: description: "Incident not found" 500: @@ -38227,6 +38227,28 @@ definitions: type: "array" items: type: "object" + HistogramDailyIssuesCount: + type: "object" + properties: + warnings: + type: "integer" + format: "int32" + description: "The number of failed data quality checks that generated a warning\ + \ severity data quality issue." + errors: + type: "integer" + format: "int32" + description: "The number of failed data quality checks that generated an error\ + \ severity data quality issue." + fatals: + type: "integer" + format: "int32" + description: "The number of failed data quality checks that generated a fatal\ + \ severity data quality issue." + totalCount: + type: "integer" + format: "int32" + description: "The total count of failed data quality checks on this day." IcebergFileFormatSpec: type: "object" properties: @@ -38346,77 +38368,6 @@ definitions: type: "string" format: "date" description: "The first day of the previous month date." - IncidentDailyIssuesCount: - type: "object" - properties: - warnings: - type: "integer" - format: "int32" - description: "The number of failed data quality checks that generated a warning\ - \ severity data quality issue." - errors: - type: "integer" - format: "int32" - description: "The number of failed data quality checks that generated an error\ - \ severity data quality issue." - fatals: - type: "integer" - format: "int32" - description: "The number of failed data quality checks that generated a fatal\ - \ severity data quality issue." - totalCount: - type: "integer" - format: "int32" - description: "The total count of failed data quality checks on this day." - IncidentIssueHistogramModel: - type: "object" - properties: - hasProfilingIssues: - type: "boolean" - description: "True when this data quality incident is based on data quality\ - \ issues from profiling checks within the filters applied to search for\ - \ linked data quality issues." - hasDailyMonitoringIssues: - type: "boolean" - description: "True when this data quality incident is based on data quality\ - \ issues from daily monitoring checks within the filters applied to search\ - \ for linked data quality issues." - hasMonthlyMonitoringIssues: - type: "boolean" - description: "True when this data quality incident is based on data quality\ - \ issues from monthly monitoring checks within the filters applied to search\ - \ for linked data quality issues." - hasDailyPartitionedIssues: - type: "boolean" - description: "True when this data quality incident is based on data quality\ - \ issues from daily partitioned checks within the filters applied to search\ - \ for linked data quality issues." - hasMonthlyPartitionedIssues: - type: "boolean" - description: "True when this data quality incident is based on data quality\ - \ issues from monthly partitioned checks within the filters applied to search\ - \ for linked data quality issues." - days: - type: "object" - description: "A map of the numbers of data quality issues per day, the day\ - \ uses the DQOps server timezone." - additionalProperties: - $ref: "#/definitions/IncidentDailyIssuesCount" - columns: - type: "object" - description: "A map of column names with the most data quality issues related\ - \ to the incident. The map returns the count of issues as the value." - additionalProperties: - type: "integer" - format: "int32" - checks: - type: "object" - description: "A map of data quality check names with the most data quality\ - \ issues related to the incident. The map returns the count of issues as\ - \ the value." - additionalProperties: - type: "integer" - format: "int32" IncidentModel: type: "object" properties: @@ -38615,6 +38566,55 @@ definitions: format: "int64" description: "The UTC timestamp when the most recent data quality incident\ \ was first seen." + IssueHistogramModel: + type: "object" + properties: + hasProfilingIssues: + type: "boolean" + description: "True when this data quality incident is based on data quality\ + \ issues from profiling checks within the filters applied to search for\ + \ linked data quality issues." + hasDailyMonitoringIssues: + type: "boolean" + description: "True when this data quality incident is based on data quality\ + \ issues from daily monitoring checks within the filters applied to search\ + \ for linked data quality issues." + hasMonthlyMonitoringIssues: + type: "boolean" + description: "True when this data quality incident is based on data quality\ + \ issues from monthly monitoring checks within the filters applied to search\ + \ for linked data quality issues." + hasDailyPartitionedIssues: + type: "boolean" + description: "True when this data quality incident is based on data quality\ + \ issues from daily partitioned checks within the filters applied to search\ + \ for linked data quality issues." + hasMonthlyPartitionedIssues: + type: "boolean" + description: "True when this data quality incident is based on data quality\ + \ issues from monthly partitioned checks within the filters applied to search\ + \ for linked data quality issues." + days: + type: "object" + description: "A map of the numbers of data quality issues per day, the day\ + \ uses the DQOps server timezone." + additionalProperties: + $ref: "#/definitions/HistogramDailyIssuesCount" + columns: + type: "object" + description: "A map of column names with the most data quality issues related\ + \ to the incident. The map returns the count of issues as the value." + additionalProperties: + type: "integer" + format: "int32" + checks: + type: "object" + description: "A map of data quality check names with the most data quality\ + \ issues related to the incident. The map returns the count of issues as\ + \ the value." + additionalProperties: + type: "integer" + format: "int32" JsonFileFormatSpec: type: "object" properties: