From 67cd61cf795860914f3d6dc03ed5ca53e87f8d87 Mon Sep 17 00:00:00 2001 From: Mohit Yadav <105265192+mohityadav766@users.noreply.github.com> Date: Tue, 22 Nov 2022 22:18:47 +0530 Subject: [PATCH] Add orderby for listing KpiResult Times Series (#8942) * Add orderby for listing KpiResult Times Series * Add order by param for kpi results Co-authored-by: Sachin Chaurasiya --- .../service/jdbi3/CollectionDAO.java | 15 +++++++++++++++ .../service/jdbi3/KpiRepository.java | 6 ++++-- .../service/resources/kpi/KpiResource.java | 9 +++++++-- .../main/resources/ui/src/axiosAPIs/KpiAPI.ts | 8 ++++++-- .../ui/src/pages/KPIPage/AddKPIPage.tsx | 16 +++++++++------- 5 files changed, 41 insertions(+), 13 deletions(-) diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/CollectionDAO.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/CollectionDAO.java index d9247d384ce..04fdec4de5c 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/CollectionDAO.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/CollectionDAO.java @@ -2953,6 +2953,11 @@ public interface CollectionDAO { } interface EntityExtensionTimeSeriesDAO { + enum OrderBy { + ASC, + DESC + }; + @ConnectionAwareSqlUpdate( value = "INSERT INTO entity_extension_time_series(entityFQN, extension, jsonSchema, json) " @@ -3036,6 +3041,16 @@ public interface CollectionDAO { @Bind("extension") String extension, @Bind("startTs") Long startTs, @Bind("endTs") long endTs); + + @SqlQuery( + "SELECT json FROM entity_extension_time_series where entityFQN = :entityFQN and extension = :extension " + + " AND timestamp >= :startTs and timestamp <= :endTs ORDER BY timestamp ") + List listBetweenTimestampsByOrder( + @Bind("entityFQN") String entityFQN, + @Bind("extension") String extension, + @Bind("startTs") Long startTs, + @Bind("endTs") long endTs, + @Define("orderBy") OrderBy orderBy); } class EntitiesCountRowMapper implements RowMapper { diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/KpiRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/KpiRepository.java index 061654d1c57..bbf0c743aef 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/KpiRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/KpiRepository.java @@ -185,13 +185,15 @@ public class KpiRepository extends EntityRepository { daoCollection.entityExtensionTimeSeriesDao().getLatestExtension(fqn, KPI_RESULT_EXTENSION), KpiResult.class); } - public ResultList getKpiResults(String fqn, Long startTs, Long endTs) throws IOException { + public ResultList getKpiResults( + String fqn, Long startTs, Long endTs, CollectionDAO.EntityExtensionTimeSeriesDAO.OrderBy orderBy) + throws IOException { List kpiResults; kpiResults = JsonUtils.readObjects( daoCollection .entityExtensionTimeSeriesDao() - .listBetweenTimestamps(fqn, KPI_RESULT_EXTENSION, startTs, endTs), + .listBetweenTimestampsByOrder(fqn, KPI_RESULT_EXTENSION, startTs, endTs, orderBy), KpiResult.class); return new ResultList<>(kpiResults, String.valueOf(startTs), String.valueOf(endTs), kpiResults.size()); } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/kpi/KpiResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/kpi/KpiResource.java index d5d65415dd0..970e58b6cac 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/kpi/KpiResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/kpi/KpiResource.java @@ -423,9 +423,14 @@ public class KpiResource extends EntityResource { @Parameter(description = "Filter kpi results before the given end timestamp", schema = @Schema(type = "number")) @NonNull @QueryParam("endTs") - Long endTs) + Long endTs, + @Parameter(description = "Order the result ", schema = @Schema(type = "string")) + @Valid + @QueryParam("orderBy") + @DefaultValue("DESC") + CollectionDAO.EntityExtensionTimeSeriesDAO.OrderBy orderBy) throws IOException { - return dao.getKpiResults(fqn, startTs, endTs); + return dao.getKpiResults(fqn, startTs, endTs, orderBy); } @GET diff --git a/openmetadata-ui/src/main/resources/ui/src/axiosAPIs/KpiAPI.ts b/openmetadata-ui/src/main/resources/ui/src/axiosAPIs/KpiAPI.ts index abbd2af7aad..a0897edb265 100644 --- a/openmetadata-ui/src/main/resources/ui/src/axiosAPIs/KpiAPI.ts +++ b/openmetadata-ui/src/main/resources/ui/src/axiosAPIs/KpiAPI.ts @@ -77,10 +77,14 @@ export const getKPIByName = async (kpiName: string, params?: ListParams) => { return response.data; }; -export const getListKpiResult = async (fqn: string, params: KpiResultParam) => { +export const getListKpiResult = async ( + fqn: string, + params: KpiResultParam, + orderBy = 'ASC' +) => { const response = await APIClient.get>( `/kpi/${fqn}/kpiResult`, - { params } + { params: { ...params, orderBy } } ); return response.data; diff --git a/openmetadata-ui/src/main/resources/ui/src/pages/KPIPage/AddKPIPage.tsx b/openmetadata-ui/src/main/resources/ui/src/pages/KPIPage/AddKPIPage.tsx index ad0c44e7d43..784e76601d9 100644 --- a/openmetadata-ui/src/main/resources/ui/src/pages/KPIPage/AddKPIPage.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/pages/KPIPage/AddKPIPage.tsx @@ -53,9 +53,9 @@ import { KpiTargetType, } from '../../generated/api/dataInsight/kpi/createKpiRequest'; import { + ChartDataType, ChartParameterValues, DataInsightChart, - DataType, } from '../../generated/dataInsight/dataInsightChart'; import { DataInsightChartType } from '../../generated/dataInsight/dataInsightChartResult'; import { Kpi } from '../../generated/dataInsight/kpi/kpi'; @@ -103,8 +103,8 @@ const AddKPIPage = () => { () => (selectedChart?.metrics ?? []).filter((metric) => // only return supported data type - [DataType.Number, DataType.Percentage].includes( - metric.dataType as DataType + [ChartDataType.Number, ChartDataType.Percentage].includes( + metric.chartDataType as ChartDataType ) ), [selectedChart] @@ -166,7 +166,8 @@ const AddKPIPage = () => { const handleSubmit: FormProps['onFinish'] = async (values) => { const startDate = getTimeStampByDateTime(kpiDates.startDate); const endDate = getTimeStampByDateTime(kpiDates.endDate); - const metricType = selectedMetric?.dataType as unknown as KpiTargetType; + const metricType = + selectedMetric?.chartDataType as unknown as KpiTargetType; const targetValue = getKpiTargetValueByMetricType(metricType, metricValue); @@ -300,7 +301,7 @@ const AddKPIPage = () => { onChange={handleMetricSelect}> {metricTypes.map((metric) => ( ))} @@ -323,7 +324,8 @@ const AddKPIPage = () => { }, ]}> <> - {selectedMetric.dataType === DataType.Percentage && ( + {selectedMetric.chartDataType === + ChartDataType.Percentage && ( { )} - {selectedMetric.dataType === DataType.Number && ( + {selectedMetric.chartDataType === ChartDataType.Number && (