|
|
@@ -1,20 +1,59 @@
|
|
|
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 *DataSource, opts ...Option) error {
|
|
|
+func InitInstance(token string, baseUrl string, namespace string, dataSource *DataSourceOption, opts ...Option) error {
|
|
|
if sdkInstance == nil {
|
|
|
- sdk, err := newSDK(token, baseUrl, namespace, dataSource, opts...)
|
|
|
+ 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
|
|
|
}
|
|
|
|
|
|
- sdkInstance = sdk
|
|
|
+ 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
|
|
|
@@ -29,48 +68,73 @@ type SDK struct {
|
|
|
client *client.Client
|
|
|
}
|
|
|
|
|
|
-func newSDK(token string, baseUrl string, namespace string, dataSource *DataSource, opts ...Option) (*SDK, error) {
|
|
|
- options := &Options{
|
|
|
- token: token,
|
|
|
- baseUrl: baseUrl,
|
|
|
- namespace: namespace,
|
|
|
- dataSource: dataSource,
|
|
|
+func (sdk *SDK) CreateDataContainer(name string, spec map[string]any) error {
|
|
|
+ if strutils.IsStringEmpty(name) {
|
|
|
+ return errors.New("没有传递数据容器名称")
|
|
|
}
|
|
|
|
|
|
- for _, opt := range opts {
|
|
|
- opt(options)
|
|
|
+ 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("没有传递数据容器名称")
|
|
|
}
|
|
|
|
|
|
- c := client.New(options.timeout)
|
|
|
+ options := sdk.options
|
|
|
|
|
|
- namespaceInfos, err := c.GetNamespaces(token, baseUrl, namespace, 1, 1)
|
|
|
+ err := sdk.client.DeleteDataContainer(options.token, options.baseUrl,
|
|
|
+ options.namespace, options.dataSource.Name, name)
|
|
|
if err != nil {
|
|
|
- return nil, err
|
|
|
+ return err
|
|
|
}
|
|
|
|
|
|
- if namespaceInfos == nil || len(namespaceInfos) == 0 {
|
|
|
- err := c.CreateNamespace(token, baseUrl, namespace)
|
|
|
- if err != nil && !strings.Contains(err.Error(), "已存在") {
|
|
|
- return nil, 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
|
|
|
}
|
|
|
|
|
|
- dataSourceInfos, err := c.GetDataSources(token, baseUrl, namespace,
|
|
|
- options.dataSource.Name, options.dataSource.Type, 1, 1)
|
|
|
+ options := sdk.options
|
|
|
+
|
|
|
+ results, err := sdk.client.ExecuteRawSql(options.token, options.baseUrl,
|
|
|
+ options.namespace, options.dataSource.Name, sql)
|
|
|
if err != nil {
|
|
|
return nil, 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 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 &SDK{
|
|
|
- options: options,
|
|
|
- client: c,
|
|
|
- }, nil
|
|
|
+ return results, nil
|
|
|
}
|