func()

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
}