From 9f3463cffb7a46201f6e1f9f27cbed78d9560c91 Mon Sep 17 00:00:00 2001 From: Anshul Singh Date: Wed, 15 Jan 2025 21:46:25 +0530 Subject: [PATCH] address feedback --- .../ai/startree/thirdeye/HappyPathTest.java | 4 +- .../NamespaceConfigurationManagerImpl.java | 21 ++++++-- .../datalayer/DatalayerTestUtils.java | 6 +-- .../TestNamespaceConfigurationManager.java | 8 ++-- .../NamespaceConfigurationService.java | 10 ++-- .../spi/api/NamespaceConfigurationApi.java | 12 ++--- .../spi/api/QuotasConfigurationApi.java | 48 +++++++++++++++++++ .../spi/api/TaskQuotasConfigurationApi.java | 22 +++++---- .../dto/NamespaceConfigurationDTO.java | 13 ++--- .../datalayer/dto/QuotasConfigurationDTO.java | 29 +++++++++++ .../dto/TaskQuotasConfigurationDTO.java | 21 ++++---- 11 files changed, 145 insertions(+), 49 deletions(-) create mode 100644 thirdeye-spi/src/main/java/ai/startree/thirdeye/spi/api/QuotasConfigurationApi.java create mode 100644 thirdeye-spi/src/main/java/ai/startree/thirdeye/spi/datalayer/dto/QuotasConfigurationDTO.java diff --git a/thirdeye-integration-tests/src/test/java/ai/startree/thirdeye/HappyPathTest.java b/thirdeye-integration-tests/src/test/java/ai/startree/thirdeye/HappyPathTest.java index 9617efaf5a..d29065c719 100644 --- a/thirdeye-integration-tests/src/test/java/ai/startree/thirdeye/HappyPathTest.java +++ b/thirdeye-integration-tests/src/test/java/ai/startree/thirdeye/HappyPathTest.java @@ -56,6 +56,7 @@ import ai.startree.thirdeye.spi.api.NamespaceConfigurationApi; import ai.startree.thirdeye.spi.api.NotificationSchemesApi; import ai.startree.thirdeye.spi.api.PlanNodeApi; +import ai.startree.thirdeye.spi.api.QuotasConfigurationApi; import ai.startree.thirdeye.spi.api.RcaInvestigationApi; import ai.startree.thirdeye.spi.api.SubscriptionGroupApi; import ai.startree.thirdeye.spi.api.TaskQuotasConfigurationApi; @@ -741,7 +742,8 @@ public void testUpdateNamespaceConfiguration() { updatedCfg.setAuth(new AuthorizationConfigurationApi()); updatedCfg.setId(namespaceConfigurationId); updatedCfg.setTemplateConfiguration(new TemplateConfigurationApi()); - updatedCfg.setTaskQuotasConfiguration(new TaskQuotasConfigurationApi()); + updatedCfg.setQuotasConfiguration(new QuotasConfigurationApi() + .setTaskQuotasConfiguration(new TaskQuotasConfigurationApi())); final Response response = request("api/workspace-configuration").put( Entity.json(updatedCfg)); assertThat(response.getStatus()).isEqualTo(200); diff --git a/thirdeye-persistence/src/main/java/ai/startree/thirdeye/datalayer/bao/NamespaceConfigurationManagerImpl.java b/thirdeye-persistence/src/main/java/ai/startree/thirdeye/datalayer/bao/NamespaceConfigurationManagerImpl.java index 484b4a44d1..f2ce9ad820 100644 --- a/thirdeye-persistence/src/main/java/ai/startree/thirdeye/datalayer/bao/NamespaceConfigurationManagerImpl.java +++ b/thirdeye-persistence/src/main/java/ai/startree/thirdeye/datalayer/bao/NamespaceConfigurationManagerImpl.java @@ -23,6 +23,7 @@ import ai.startree.thirdeye.spi.datalayer.bao.NamespaceConfigurationManager; import ai.startree.thirdeye.spi.datalayer.dto.AuthorizationConfigurationDTO; import ai.startree.thirdeye.spi.datalayer.dto.NamespaceConfigurationDTO; +import ai.startree.thirdeye.spi.datalayer.dto.QuotasConfigurationDTO; import ai.startree.thirdeye.spi.datalayer.dto.TaskQuotasConfigurationDTO; import ai.startree.thirdeye.spi.datalayer.dto.TemplateConfigurationDTO; import ai.startree.thirdeye.spi.datalayer.dto.TimeConfigurationDTO; @@ -85,10 +86,15 @@ private boolean updateDefaults(final NamespaceConfigurationDTO existingNamespace existingNamespaceConfig.setTemplateConfiguration(defaultTemplateConfiguration()); updated = true; } - if (force || existingNamespaceConfig.getTaskQuotasConfiguration() == null) { - existingNamespaceConfig.setTaskQuotasConfiguration(defaultTaskQuotasConfiguration()); + if (force || existingNamespaceConfig.getQuotasConfiguration() == null) { + existingNamespaceConfig.setQuotasConfiguration(defaultQuotasConfiguration()); updated = true; } + if (force || (existingNamespaceConfig.getQuotasConfiguration() != null && + existingNamespaceConfig.getQuotasConfiguration().getTaskQuotasConfiguration() == null)) { + existingNamespaceConfig.getQuotasConfiguration() + .setTaskQuotasConfiguration(defaultTaskQuotasConfiguration()); + } return updated; } @@ -156,7 +162,7 @@ private NamespaceConfigurationDTO defaultNamespaceConfiguration(final String nam namespaceConfigurationDTO .setTimeConfiguration(defaultTimeConfiguration()) .setTemplateConfiguration(defaultTemplateConfiguration()) - .setTaskQuotasConfiguration(defaultTaskQuotasConfiguration()) + .setQuotasConfiguration(defaultQuotasConfiguration()) .setAuth(new AuthorizationConfigurationDTO().setNamespace(namespace)); return namespaceConfigurationDTO; } @@ -215,8 +221,15 @@ private TemplateConfigurationDTO defaultTemplateConfiguration() { .orElse(new TemplateConfigurationDTO()); } + private QuotasConfigurationDTO defaultQuotasConfiguration() { + return optional(defaultNamespaceConfiguration.getQuotasConfiguration()) + .orElse(new QuotasConfigurationDTO() + .setTaskQuotasConfiguration(new TaskQuotasConfigurationDTO())); + } + private TaskQuotasConfigurationDTO defaultTaskQuotasConfiguration() { - return optional(defaultNamespaceConfiguration.getTaskQuotasConfiguration()) + return optional(defaultNamespaceConfiguration.getQuotasConfiguration()) + .map(QuotasConfigurationDTO::getTaskQuotasConfiguration) .orElse(new TaskQuotasConfigurationDTO()); } } diff --git a/thirdeye-persistence/src/test/java/ai/startree/thirdeye/datalayer/DatalayerTestUtils.java b/thirdeye-persistence/src/test/java/ai/startree/thirdeye/datalayer/DatalayerTestUtils.java index 07b9af52b6..f9f5be3212 100644 --- a/thirdeye-persistence/src/test/java/ai/startree/thirdeye/datalayer/DatalayerTestUtils.java +++ b/thirdeye-persistence/src/test/java/ai/startree/thirdeye/datalayer/DatalayerTestUtils.java @@ -13,16 +13,15 @@ */ package ai.startree.thirdeye.datalayer; -import static ai.startree.thirdeye.spi.Constants.DEFAULT_CHRONOLOGY; import static java.util.stream.Collectors.toSet; -import ai.startree.thirdeye.spi.Constants; import ai.startree.thirdeye.spi.datalayer.Templatable; import ai.startree.thirdeye.spi.datalayer.dto.AbstractDTO; import ai.startree.thirdeye.spi.datalayer.dto.AuthorizationConfigurationDTO; import ai.startree.thirdeye.spi.datalayer.dto.DatasetConfigDTO; import ai.startree.thirdeye.spi.datalayer.dto.MetricConfigDTO; import ai.startree.thirdeye.spi.datalayer.dto.NamespaceConfigurationDTO; +import ai.startree.thirdeye.spi.datalayer.dto.QuotasConfigurationDTO; import ai.startree.thirdeye.spi.datalayer.dto.TaskQuotasConfigurationDTO; import ai.startree.thirdeye.spi.datalayer.dto.TemplateConfigurationDTO; import ai.startree.thirdeye.spi.datalayer.dto.TimeConfigurationDTO; @@ -71,7 +70,8 @@ public static NamespaceConfigurationDTO buildNamespaceConfiguration(String names dto.setTimeConfiguration(new TimeConfigurationDTO()); dto.setAuth(new AuthorizationConfigurationDTO().setNamespace(namespace)); dto.setTemplateConfiguration(new TemplateConfigurationDTO()); - dto.setTaskQuotasConfiguration(new TaskQuotasConfigurationDTO()); + dto.setQuotasConfiguration(new QuotasConfigurationDTO() + .setTaskQuotasConfiguration(new TaskQuotasConfigurationDTO())); return dto; } } diff --git a/thirdeye-persistence/src/test/java/ai/startree/thirdeye/datalayer/bao/TestNamespaceConfigurationManager.java b/thirdeye-persistence/src/test/java/ai/startree/thirdeye/datalayer/bao/TestNamespaceConfigurationManager.java index f639daeafd..2ed85f34c8 100644 --- a/thirdeye-persistence/src/test/java/ai/startree/thirdeye/datalayer/bao/TestNamespaceConfigurationManager.java +++ b/thirdeye-persistence/src/test/java/ai/startree/thirdeye/datalayer/bao/TestNamespaceConfigurationManager.java @@ -190,9 +190,9 @@ private void compareDtos(NamespaceConfigurationDTO dto1, NamespaceConfigurationD .isEqualTo(dto2.getTimeConfiguration().getMinimumOnboardingStartTime()); assertThat(dto1.getTemplateConfiguration().getSqlLimitStatement()) .isEqualTo(dto2.getTemplateConfiguration().getSqlLimitStatement()); - assertThat(dto1.getTaskQuotasConfiguration().getDetectionTaskQuota()) - .isEqualTo(dto2.getTaskQuotasConfiguration().getDetectionTaskQuota()); - assertThat(dto1.getTaskQuotasConfiguration().getNotificationTaskQuota()) - .isEqualTo(dto2.getTaskQuotasConfiguration().getNotificationTaskQuota()); + assertThat(dto1.getQuotasConfiguration().getTaskQuotasConfiguration().getMaximumDetectionTasksPerMonth()). + isEqualTo(dto2.getQuotasConfiguration().getTaskQuotasConfiguration().getMaximumDetectionTasksPerMonth()); + assertThat(dto1.getQuotasConfiguration().getTaskQuotasConfiguration().getMaximumNotificationTasksPerMonth()). + isEqualTo(dto2.getQuotasConfiguration().getTaskQuotasConfiguration().getMaximumNotificationTasksPerMonth()); } } diff --git a/thirdeye-server/src/main/java/ai/startree/thirdeye/service/NamespaceConfigurationService.java b/thirdeye-server/src/main/java/ai/startree/thirdeye/service/NamespaceConfigurationService.java index bedd3b6a42..51f4c73a4a 100644 --- a/thirdeye-server/src/main/java/ai/startree/thirdeye/service/NamespaceConfigurationService.java +++ b/thirdeye-server/src/main/java/ai/startree/thirdeye/service/NamespaceConfigurationService.java @@ -83,14 +83,14 @@ protected void validateUpdate(NamespaceConfigurationApi existing, NamespaceConfigurationApi updated) { if (!Objects.equals(existing.getId(), updated.getId()) || !Objects.equals(existing.getAuth().getNamespace(), updated.getAuth().getNamespace()) || - !Objects.equals(existing.getTaskQuotasConfiguration().getDetectionTaskQuota(), - updated.getTaskQuotasConfiguration().getDetectionTaskQuota()) || - !Objects.equals(existing.getTaskQuotasConfiguration().getNotificationTaskQuota(), - updated.getTaskQuotasConfiguration().getNotificationTaskQuota())) { + !Objects.equals(existing.getQuotasConfiguration().getTaskQuotasConfiguration().getMaximumDetectionTasksPerMonth(), + updated.getQuotasConfiguration().getTaskQuotasConfiguration().getMaximumNotificationTasksPerMonth()) || + !Objects.equals(existing.getQuotasConfiguration().getTaskQuotasConfiguration().getMaximumNotificationTasksPerMonth(), + updated.getQuotasConfiguration().getTaskQuotasConfiguration().getMaximumNotificationTasksPerMonth())) { throw badRequest( ThirdEyeStatus.ERR_NAMESPACE_CONFIGURATION_VALIDATION_FAILED, existing.namespace(), - "Updating Id, auth, or taskQuotasConfiguration is not allowed for Namespace Configuration"); + "Updating Id, auth, or quotasConfiguration is not allowed for Namespace Configuration"); } } } diff --git a/thirdeye-spi/src/main/java/ai/startree/thirdeye/spi/api/NamespaceConfigurationApi.java b/thirdeye-spi/src/main/java/ai/startree/thirdeye/spi/api/NamespaceConfigurationApi.java index 3f505b5fbc..d643df20f2 100644 --- a/thirdeye-spi/src/main/java/ai/startree/thirdeye/spi/api/NamespaceConfigurationApi.java +++ b/thirdeye-spi/src/main/java/ai/startree/thirdeye/spi/api/NamespaceConfigurationApi.java @@ -22,7 +22,7 @@ public class NamespaceConfigurationApi implements ThirdEyeCrudApi