in featurestore/feature_store_client.go [207:360]
func (c *FeatureStoreClient) LoadProjectData() error {
ak := api.Ak{
AccesskeyId: c.client.GetConfig().AccessKeyId,
AccesskeySecret: c.client.GetConfig().AccessKeySecret,
}
if c.client.GetConfig().Token != "" {
ak.SecurityToken = c.client.GetConfig().Token
}
projectData := make(map[string]*domain.Project, 0)
listProjectsResponse, err := c.client.FsProjectApi.ListProjects()
if err != nil {
c.logError(fmt.Errorf("list projects error, err=%v", err))
return err
}
for _, p := range listProjectsResponse.Projects {
if p.ProjectName != c.client.GetConfig().ProjectName {
continue
}
// get datasource
getDataSourceResponse, err := c.client.DatasourceApi.DatasourceDatasourceIdGet(p.OnlineDatasourceId, c.hologresPort, c.hologresPublicAddress)
if err != nil {
c.logError(fmt.Errorf("get datasource error, err=%v", err))
return err
}
p.OnlineDataSource = getDataSourceResponse.Datasource
p.OnlineDataSource.Ak = ak
p.OnlineDataSource.TestMode = c.testMode
p.OnlineDataSource.HologresPrefix = c.hologresPrefix
getDataSourceResponse, err = c.client.DatasourceApi.DatasourceDatasourceIdGet(p.OfflineDatasourceId, c.hologresPort, c.hologresPublicAddress)
if err != nil {
c.logError(fmt.Errorf("get datasource error, err=%v", err))
return err
}
p.OfflineDataSource = getDataSourceResponse.Datasource
p.OfflineDataSource.Ak = ak
p.OfflineDataSource.TestMode = c.testMode
// get featuredb datasource
p.FeatureDBAddress, p.FeatureDBToken, p.FeatureDBVpcAddress, err = c.client.DatasourceApi.GetFeatureDBDatasourceInfo(c.testMode, p.OfflineDataSource.WorkspaceId)
if err != nil {
c.logError(fmt.Errorf("get featuredb datasource, err=%v", err))
return err
}
p.Signature = c.signature
project := domain.NewProject(p, c.datasourceInitClient)
projectData[project.ProjectName] = project
var (
pagesize = 100
pagenumber = 1
)
// get feature entities
for {
listFeatureEntitiesResponse, err := c.client.FeatureEntityApi.ListFeatureEntities(int32(pagesize), int32(pagenumber), strconv.Itoa(p.ProjectId))
if err != nil {
c.logError(fmt.Errorf("list feature entities error, err=%v", err))
return err
}
for _, entity := range listFeatureEntitiesResponse.FeatureEntities {
project.FeatureEntityMap[entity.FeatureEntityName] = domain.NewFeatureEntity(entity)
}
if len(listFeatureEntitiesResponse.FeatureEntities) == 0 || pagesize*pagenumber > listFeatureEntitiesResponse.TotalCount {
break
}
pagenumber++
}
pagenumber = 1
// get feature views
for {
listFeatureViews, err := c.client.FeatureViewApi.ListFeatureViews(int32(pagesize), int32(pagenumber), strconv.Itoa(p.ProjectId))
if err != nil {
c.logError(fmt.Errorf("list feature views error, err=%v", err))
return err
}
for _, view := range listFeatureViews.FeatureViews {
getFeatureViewResponse, err := c.client.FeatureViewApi.GetFeatureViewByID(strconv.Itoa(int(view.FeatureViewId)))
if err != nil {
c.logError(fmt.Errorf("get feature view error, err=%v", err))
return err
}
featureView := getFeatureViewResponse.FeatureView
if featureView.RegisterDatasourceId > 0 {
getDataSourceResponse, err := c.client.DatasourceApi.DatasourceDatasourceIdGet(featureView.RegisterDatasourceId, c.hologresPort, c.hologresPublicAddress)
if err != nil {
c.logError(fmt.Errorf("get datasource error, err=%v", err))
return err
}
featureView.RegisterDataSource = getDataSourceResponse.Datasource
}
featureViewDomain := domain.NewFeatureView(featureView, project, project.FeatureEntityMap[featureView.FeatureEntityName])
project.FeatureViewMap[featureView.Name] = featureViewDomain
}
if len(listFeatureViews.FeatureViews) == 0 || pagesize*pagenumber > listFeatureViews.TotalCount {
break
}
pagenumber++
}
pagenumber = 1
// get model
for {
listModelsResponse, err := c.client.FsModelApi.ListModels(pagesize, pagenumber, strconv.Itoa(project.ProjectId))
if err != nil {
c.logError(fmt.Errorf("list models error, err=%v", err))
return err
}
for _, m := range listModelsResponse.Models {
getModelResponse, err := c.client.FsModelApi.GetModelByID(strconv.Itoa(m.ModelId))
if err != nil {
c.logError(fmt.Errorf("get model error, err=%v", err))
return err
}
model := getModelResponse.Model
modelDomain := domain.NewModel(model, project)
project.ModelMap[model.Name] = modelDomain
}
if len(listModelsResponse.Models) == 0 || pagenumber*pagesize > int(listModelsResponse.TotalCount) {
break
}
pagenumber++
}
}
if len(projectData) > 0 {
c.projectMap = projectData
}
return nil
}