Skip to content

Commit

Permalink
[server] Add recommend API to datasource resource (#1585)
Browse files Browse the repository at this point in the history
* [server] Add recommend API to datasource resource

* Address feedback

* Add final

---------

Co-authored-by: Anshul Singh <anshul.singh@anshuls-macbook-pro-1.wyvern-sun.ts.net>
  • Loading branch information
anshul98ks123 and Anshul Singh authored Oct 9, 2024
1 parent 0acf41e commit d15791b
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 0 deletions.
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);
}
}
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();
}
}

0 comments on commit d15791b

Please sign in to comment.