Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[server] Add recommend API to datasource resource #1585

Merged
merged 3 commits into from
Oct 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,10 @@ public <T extends AbstractDTO> void ensureCanDelete(final ThirdEyePrincipal prin
relatedId -> ensureCanAccess(principal, relatedId, AccessType.READ));
}

public DataSourceApi generateDatasourceConnection(final ThirdEyePrincipal principal) {
return thirdEyeAuthorizer.generateDatasourceConnection(principal);
}

private void ensureCanAccess(final ThirdEyePrincipal principal,
final ResourceIdentifier identifier, final AccessType accessType) {
if (!canAccess(principal, identifier, accessType)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,15 @@ public Response onboardAll(
return respondOk(onboarded);
}

@POST
@Path("recommend")
@Timed(percentiles = {0.5, 0.75, 0.90, 0.95, 0.98, 0.99, 0.999})
@Produces(MediaType.APPLICATION_JSON)
public Response recommendConfiguration(
@Parameter(hidden = true) @Auth ThirdEyeServerPrincipal principal) {
return respondOk(dataSourceService.recommend(principal));
}

@DELETE
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Path("offboard-all")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import ai.startree.thirdeye.spi.datalayer.bao.DataSourceManager;
import ai.startree.thirdeye.spi.datalayer.bao.DatasetConfigManager;
import ai.startree.thirdeye.spi.datalayer.dto.AbstractDTO;
import ai.startree.thirdeye.spi.datalayer.dto.AuthorizationConfigurationDTO;
import ai.startree.thirdeye.spi.datalayer.dto.DataSourceDTO;
import ai.startree.thirdeye.spi.datalayer.dto.DatasetConfigDTO;
import ai.startree.thirdeye.spi.datasource.ThirdEyeDataSource;
Expand All @@ -49,6 +50,7 @@ public class DataSourceService extends CrudService<DataSourceApi, DataSourceDTO>
private final DataSourceCache dataSourceCache;
private final DataSourceOnboarder dataSourceOnboarder;
private final DatasetConfigManager datasetConfigDAO;
private final AuthorizationManager authorizationManager;

@Inject
public DataSourceService(
Expand All @@ -61,6 +63,7 @@ public DataSourceService(
this.dataSourceCache = dataSourceCache;
this.dataSourceOnboarder = dataSourceOnboarder;
this.datasetConfigDAO = datasetConfigDAO;
this.authorizationManager = authorizationManager;
}

@Override
Expand Down Expand Up @@ -175,4 +178,15 @@ public boolean validate(final ThirdEyePrincipal principal, final long id) {
authorizationManager.ensureCanRead(principal, dataSourceDto);
return dataSourceCache.getDataSource(dataSourceDto).validate();
}

public DataSourceApi recommend(final ThirdEyePrincipal principal) {
final String namespace = authorizationManager.currentNamespace(principal);

// verify that user has read access to data sources in given namespace
final DataSourceDTO sampleDataset = new DataSourceDTO();
sampleDataset.setAuth(new AuthorizationConfigurationDTO().setNamespace(namespace));
authorizationManager.ensureCanRead(principal, sampleDataset);

return authorizationManager.generateDatasourceConnection(principal);
cyrilou242 marked this conversation as resolved.
Show resolved Hide resolved
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import ai.startree.thirdeye.datasource.cache.DataSourceCache;
import ai.startree.thirdeye.service.DataSourceService;
import ai.startree.thirdeye.spi.ThirdEyeStatus;
import ai.startree.thirdeye.spi.api.DataSourceApi;
import ai.startree.thirdeye.spi.api.StatusApi;
import ai.startree.thirdeye.spi.api.StatusListApi;
import ai.startree.thirdeye.spi.auth.AuthenticationType;
Expand Down Expand Up @@ -107,4 +108,11 @@ public void testValidateFailure() {
final StatusApi statusApi = entity.getList().get(0);
assertThat(statusApi.getCode()).isEqualTo(ThirdEyeStatus.ERR_DATASOURCE_VALIDATION_FAILED);
}

@Test
public void testRecommend() {
final Response response = dataSourceResource.recommendConfiguration(principal);
assertThat(response.getStatus()).isEqualTo(200);
assertThat((DataSourceApi) response.getEntity()).isNull();
}
}
Loading