diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/metrics/MetricsResource.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/metrics/MetricsResource.java index e295b3be7a6..8f90fcd6b92 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/metrics/MetricsResource.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/metrics/MetricsResource.java @@ -16,25 +16,20 @@ package org.openmetadata.catalog.resources.metrics; -import com.google.inject.Inject; -import io.swagger.annotations.Api; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import org.openmetadata.catalog.entity.data.Metrics; -import org.openmetadata.catalog.jdbi3.CollectionDAO; -import org.openmetadata.catalog.jdbi3.MetricsRepository; -import org.openmetadata.catalog.resources.Collection; -import org.openmetadata.catalog.security.CatalogAuthorizer; -import org.openmetadata.catalog.util.EntityUtil.Fields; -import org.openmetadata.catalog.util.RestUtil; -import org.openmetadata.catalog.util.RestUtil.PutResponse; -import org.openmetadata.catalog.util.ResultList; +import java.io.IOException; +import java.security.GeneralSecurityException; +import java.text.ParseException; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Objects; +import java.util.UUID; import javax.validation.Valid; +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; import javax.ws.rs.Consumes; +import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.PUT; @@ -47,14 +42,25 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.SecurityContext; import javax.ws.rs.core.UriInfo; -import java.io.IOException; -import java.security.GeneralSecurityException; -import java.text.ParseException; -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import java.util.Objects; -import java.util.UUID; + +import com.google.inject.Inject; + +import org.openmetadata.catalog.entity.data.Metrics; +import org.openmetadata.catalog.jdbi3.CollectionDAO; +import org.openmetadata.catalog.jdbi3.MetricsRepository; +import org.openmetadata.catalog.resources.Collection; +import org.openmetadata.catalog.security.CatalogAuthorizer; +import org.openmetadata.catalog.util.EntityUtil.Fields; +import org.openmetadata.catalog.util.RestUtil; +import org.openmetadata.catalog.util.RestUtil.PutResponse; +import org.openmetadata.catalog.util.ResultList; + +import io.swagger.annotations.Api; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; @Path("/v1/metrics") @Api(value = "Metrics collection", tags = "Metrics collection") @@ -97,11 +103,29 @@ public class MetricsResource { public ResultList list(@Context UriInfo uriInfo, @Parameter(description = "Fields requested in the returned resource", schema = @Schema(type = "string", example = FIELDS)) - @QueryParam("fields") String fieldsParam) throws IOException, GeneralSecurityException, - ParseException { + @QueryParam("fields") String fieldsParam, + @DefaultValue("10") + @Min(1) + @Max(1000000) + @QueryParam("limit") int limitParam, + @Parameter(description = "Returns list of tables before this cursor", + schema = @Schema(type = "string")) + @QueryParam("before") String before, + @Parameter(description = "Returns list of tables after this cursor", + schema = @Schema(type = "string")) + @QueryParam("after") String after) + throws IOException, GeneralSecurityException, ParseException { + RestUtil.validateCursors(before, after); Fields fields = new Fields(FIELD_LIST, fieldsParam); - ResultList metricsList = dao.listAfter(fields, null, 10000, null); + + ResultList metricsList; + if (before != null) { // Reverse paging + metricsList = dao.listBefore(fields, null, limitParam, before); + } else { // Forward paging or first page + metricsList = dao.listAfter(fields, null, limitParam, after); + } metricsList.getData().forEach(m -> addHref(uriInfo, m)); + return metricsList; } diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/services/dashboard/DashboardServiceResource.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/services/dashboard/DashboardServiceResource.java index 540b9642b2a..a42966c7070 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/services/dashboard/DashboardServiceResource.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/services/dashboard/DashboardServiceResource.java @@ -16,29 +16,20 @@ package org.openmetadata.catalog.resources.services.dashboard; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.google.inject.Inject; -import io.swagger.annotations.Api; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import org.openmetadata.catalog.api.services.CreateDashboardService; -import org.openmetadata.catalog.api.services.UpdateDashboardService; -import org.openmetadata.catalog.entity.services.DashboardService; -import org.openmetadata.catalog.jdbi3.CollectionDAO; -import org.openmetadata.catalog.jdbi3.DashboardServiceRepository; -import org.openmetadata.catalog.resources.Collection; -import org.openmetadata.catalog.security.CatalogAuthorizer; -import org.openmetadata.catalog.security.SecurityUtil; -import org.openmetadata.catalog.type.EntityReference; -import org.openmetadata.catalog.util.RestUtil; -import org.openmetadata.catalog.util.ResultList; +import java.io.IOException; +import java.security.GeneralSecurityException; +import java.text.ParseException; +import java.util.Date; +import java.util.List; +import java.util.Objects; +import java.util.UUID; import javax.validation.Valid; +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; +import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.PUT; @@ -51,13 +42,27 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.SecurityContext; import javax.ws.rs.core.UriInfo; -import java.io.IOException; -import java.security.GeneralSecurityException; -import java.text.ParseException; -import java.util.Date; -import java.util.List; -import java.util.Objects; -import java.util.UUID; + +import com.google.inject.Inject; + +import org.openmetadata.catalog.api.services.CreateDashboardService; +import org.openmetadata.catalog.api.services.UpdateDashboardService; +import org.openmetadata.catalog.entity.services.DashboardService; +import org.openmetadata.catalog.jdbi3.CollectionDAO; +import org.openmetadata.catalog.jdbi3.DashboardServiceRepository; +import org.openmetadata.catalog.resources.Collection; +import org.openmetadata.catalog.security.CatalogAuthorizer; +import org.openmetadata.catalog.security.SecurityUtil; +import org.openmetadata.catalog.type.EntityReference; +import org.openmetadata.catalog.util.RestUtil; +import org.openmetadata.catalog.util.ResultList; + +import io.swagger.annotations.Api; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; @Path("/v1/services/dashboardServices") @Api(value = "Dashboard service collection", tags = "Services -> Dashboard service collection") @@ -104,9 +109,29 @@ public class DashboardServiceResource { content = @Content(mediaType = "application/json", schema = @Schema(implementation = DashboardServiceList.class))) }) - public ResultList list(@Context UriInfo uriInfo, @QueryParam("name") String name) throws IOException, GeneralSecurityException, ParseException { - ResultList list = dao.listAfter(null, null, 10000, null); + public ResultList list(@Context UriInfo uriInfo, + @QueryParam("name") String name, + @DefaultValue("10") + @Min(1) + @Max(1000000) + @QueryParam("limit") int limitParam, + @Parameter(description = "Returns list of tables before this cursor", + schema = @Schema(type = "string")) + @QueryParam("before") String before, + @Parameter(description = "Returns list of tables after this cursor", + schema = @Schema(type = "string")) + @QueryParam("after") String after) + throws IOException, GeneralSecurityException, ParseException { + RestUtil.validateCursors(before, after); + + ResultList list; + if (before != null) { // Reverse paging + list = dao.listBefore(null, null, limitParam, before); + } else { // Forward paging or first page + list = dao.listAfter(null, null, limitParam, after); + } list.getData().forEach(d -> addHref(uriInfo, d)); + return list; } diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/services/database/DatabaseServiceResource.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/services/database/DatabaseServiceResource.java index 5b6b6b4f962..ee341ec4011 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/services/database/DatabaseServiceResource.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/services/database/DatabaseServiceResource.java @@ -16,14 +16,35 @@ package org.openmetadata.catalog.resources.services.database; -import com.fasterxml.jackson.core.JsonProcessingException; +import java.io.IOException; +import java.security.GeneralSecurityException; +import java.text.ParseException; +import java.util.Date; +import java.util.List; +import java.util.Objects; +import java.util.UUID; + +import javax.validation.Valid; +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.DefaultValue; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.SecurityContext; +import javax.ws.rs.core.UriInfo; + import com.google.inject.Inject; -import io.swagger.annotations.Api; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; + import org.openmetadata.catalog.api.services.CreateDatabaseService; import org.openmetadata.catalog.api.services.UpdateDatabaseService; import org.openmetadata.catalog.entity.services.DatabaseService; @@ -36,27 +57,12 @@ import org.openmetadata.catalog.type.EntityReference; import org.openmetadata.catalog.util.RestUtil; import org.openmetadata.catalog.util.ResultList; -import javax.validation.Valid; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.SecurityContext; -import javax.ws.rs.core.UriInfo; -import java.io.IOException; -import java.security.GeneralSecurityException; -import java.text.ParseException; -import java.util.Date; -import java.util.List; -import java.util.Objects; -import java.util.UUID; +import io.swagger.annotations.Api; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; @Path("/v1/services/databaseServices") @Api(value = "Database service collection", tags = "Services -> Database service collection") @@ -102,9 +108,29 @@ public class DatabaseServiceResource { content = @Content(mediaType = "application/json", schema = @Schema(implementation = DatabaseServiceList.class))) }) - public ResultList list(@Context UriInfo uriInfo) throws IOException, GeneralSecurityException, ParseException { - ResultList list = dao.listAfter(null, null, 10000, null); + public ResultList list(@Context UriInfo uriInfo, + @DefaultValue("10") + @Min(1) + @Max(1000000) + @QueryParam("limit") int limitParam, + @Parameter(description = "Returns list of tables before this cursor", + schema = @Schema(type = "string")) + @QueryParam("before") String before, + @Parameter(description = "Returns list of tables after this cursor", + schema = @Schema(type = "string")) + @QueryParam("after") String after) + throws IOException, GeneralSecurityException, ParseException { + RestUtil.validateCursors(before, after); + + ResultList list; + if(before == null) { + list = dao.listBefore(null, null, limitParam, before); + } + else { + list = dao.listAfter(null, null, limitParam, after); + } list.getData().forEach(d -> addHref(uriInfo, d)); + return list; }