api/api_datasource.go (96 lines of code) (raw):
package api
import (
"encoding/json"
"fmt"
"strconv"
"strings"
paifeaturestore "github.com/alibabacloud-go/paifeaturestore-20230621/v4/client"
"github.com/aliyun/aliyun-pai-featurestore-go-sdk/v2/constants"
)
type DatasourceApiService service
/*
DatasourceApiService Get datasource By datasource_id
- @param datasourceId
@return GetDatasourceResponse
*/
func (a *DatasourceApiService) DatasourceDatasourceIdGet(datasourceId int, hologresPort int, hologresPublicAddress string) (GetDatasourceResponse, error) {
var (
localVarReturnValue GetDatasourceResponse
)
datasourceIdStr := strconv.Itoa(datasourceId)
response, err := a.client.GetDatasource(&a.client.instanceId, &datasourceIdStr)
if err != nil {
return localVarReturnValue, err
}
datasource := Datasource{
DatasourceId: datasourceId,
Type: *response.Body.Type,
Name: *response.Body.Name,
Region: a.client.cfg.regionId,
WorkspaceId: *response.Body.WorkspaceId,
}
switch *response.Body.Type {
case "Hologres":
datasource.Type = constants.Datasource_Type_Hologres
uris := strings.Split(*response.Body.Uri, "/")
datasource.Database = uris[1]
datasource.VpcAddress = fmt.Sprintf("%s-%s-vpc-st.hologres.aliyuncs.com:%d", uris[0], a.client.cfg.regionId, hologresPort)
if hologresPublicAddress != "" {
datasource.PublicAddress = hologresPublicAddress
} else {
datasource.PublicAddress = fmt.Sprintf("%s-%s.hologres.aliyuncs.com:%d", uris[0], a.client.cfg.regionId, hologresPort)
}
//datasource.VpcAddress = fmt.Sprintf("%s-%s.hologres.aliyuncs.com:80", uris[0], a.client.cfg.regionId)
case "GraphCompute":
datasource.Type = constants.Datasource_Type_IGraph
var config map[string]string
if err := json.Unmarshal([]byte(*response.Body.Config), &config); err == nil {
datasource.VpcAddress = config["address"]
datasource.User = config["username"]
datasource.Pwd = config["password"]
datasource.PublicAddress = strings.ReplaceAll(config["address"], ".igraph.aliyuncs.com", ".public.igraph.aliyuncs.com")
}
datasource.RdsInstanceId = *response.Body.Uri
case "Tablestore":
datasource.Type = constants.Datasource_Type_TableStore
datasource.VpcAddress = fmt.Sprintf("https://%s.%s.vpc.tablestore.aliyuncs.com", *response.Body.Uri, a.client.cfg.regionId)
datasource.PublicAddress = fmt.Sprintf("https://%s.%s.ots.aliyuncs.com", *response.Body.Uri, a.client.cfg.regionId)
datasource.RdsInstanceId = *response.Body.Uri
case "MaxCompute":
datasource.Type = constants.Datasource_Type_MaxCompute
datasource.Project = *response.Body.Uri
case "FeatureDB":
datasource.Type = constants.Datasource_Type_FeatureDB
var config map[string]string
if err := json.Unmarshal([]byte(*response.Body.Config), &config); err == nil {
datasource.VpcAddress = config["fdb_vpc_address"]
datasource.PublicAddress = config["fdb_public_address"]
datasource.Token = config["token"]
datasource.FdbVpcAddress = config["fdb_vpc_plk_address"]
}
}
localVarReturnValue.Datasource = &datasource
return localVarReturnValue, nil
}
func (a *DatasourceApiService) GetFeatureDBDatasourceInfo(isTestMode bool, workspaceId string) (string, string, string, error) {
featureDBType := "FeatureDB"
request := paifeaturestore.ListDatasourcesRequest{
Type: &featureDBType,
WorkspaceId: &workspaceId,
}
listDatasourcesResponse, err := a.client.ListDatasources(&a.client.instanceId, &request)
if err != nil {
return "", "", "", err
}
for _, datasource := range listDatasourcesResponse.Body.Datasources {
if _, err := strconv.Atoi(*datasource.DatasourceId); err == nil {
response, err := a.client.GetDatasource(&a.client.instanceId, datasource.DatasourceId)
if err != nil {
return "", "", "", err
}
var config map[string]string
if err := json.Unmarshal([]byte(*response.Body.Config), &config); err == nil {
if isTestMode {
return config["fdb_public_address"], config["token"], "", nil
} else {
return config["fdb_vpc_address"], config["token"], config["fdb_vpc_plk_address"], nil
}
}
}
}
return "", "", "", nil
}