package ds_sdk import ( "errors" "git.sxidc.com/go-tools/utils/strutils" "git.sxidc.com/service-supports/ds-sdk/client" "strings" ) var sdkInstance *SDK func InitInstance(token string, baseUrl string, namespace string, dataSource *DataSourceOption, opts ...Option) error { if sdkInstance == nil { options := &Options{ token: token, baseUrl: baseUrl, namespace: namespace, dataSource: dataSource, } for _, opt := range opts { opt(options) } c := client.New(options.timeout) namespaceInfos, err := c.GetNamespaces(token, baseUrl, namespace, 1, 1) if err != nil { return err } if namespaceInfos == nil || len(namespaceInfos) == 0 { err := c.CreateNamespace(token, baseUrl, namespace) if err != nil && !strings.Contains(err.Error(), "已存在") { return err } } dataSourceInfos, err := c.GetDataSources(token, baseUrl, namespace, options.dataSource.Name, options.dataSource.Type, 1, 1) if err != nil { return err } if dataSourceInfos == nil || len(dataSourceInfos) == 0 { err := c.CreateDataSource(token, baseUrl, namespace, options.dataSource.Name, options.dataSource.Type, options.dataSource.Spec) if err != nil && !strings.Contains(err.Error(), "已存在") { return err } } sdkInstance = &SDK{ options: options, client: c, } } return nil } func GetInstance() *SDK { return sdkInstance } type SDK struct { options *Options client *client.Client } func (sdk *SDK) CreateDataContainer(name string, spec map[string]any) error { if strutils.IsStringEmpty(name) { return errors.New("没有传递数据容器名称") } options := sdk.options err := sdk.client.CreateDataContainer(options.token, options.baseUrl, options.namespace, options.dataSource.Name, name, spec) if err != nil { return err } return nil } func (sdk *SDK) DeleteDataContainer(name string) error { if strutils.IsStringEmpty(name) { return errors.New("没有传递数据容器名称") } options := sdk.options err := sdk.client.DeleteDataContainer(options.token, options.baseUrl, options.namespace, options.dataSource.Name, name) if err != nil { return err } return nil } func (sdk *SDK) GetDataContainers(name string, pageNo int, pageSize int) ([]client.DataContainerInfo, error) { options := sdk.options return sdk.client.GetDataContainers(options.token, options.baseUrl, options.namespace, options.dataSource.Name, name, pageNo, pageSize) } func (sdk *SDK) ExecuteRawSql(sql string) ([]map[string]any, error) { if strutils.IsStringEmpty(sql) { return make([]map[string]any, 0), nil } options := sdk.options results, err := sdk.client.ExecuteRawSql(options.token, options.baseUrl, options.namespace, options.dataSource.Name, sql) if err != nil { return nil, err } return results, nil } func (sdk *SDK) ExecuteSql(name string, executeParams map[string]any) ([]map[string]any, error) { if strutils.IsStringEmpty(name) { return nil, errors.New("没有传递SQL资源名称") } options := sdk.options results, err := sdk.client.ExecuteSql(options.token, options.baseUrl, options.namespace, options.dataSource.Name, name, executeParams) if err != nil { return nil, err } return results, nil }