package ds_sdk import ( "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 { if sdkInstance == nil { sdk, err := newSDK(token, baseUrl, namespace, dataSource, opts...) if err != nil { return err } sdkInstance = sdk } return nil } func GetInstance() *SDK { return sdkInstance } type SDK struct { options *Options 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, } for _, opt := range opts { opt(options) } c := client.New(options.timeout) namespaceInfos, err := c.GetNamespaces(token, baseUrl, namespace, 1, 1) if err != nil { return nil, err } if namespaceInfos == nil || len(namespaceInfos) == 0 { err := c.CreateNamespace(token, baseUrl, namespace) if err != nil && !strings.Contains(err.Error(), "已存在") { return nil, err } } dataSourceInfos, err := c.GetDataSources(token, baseUrl, namespace, options.dataSource.Name, options.dataSource.Type, 1, 1) 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 &SDK{ options: options, client: c, }, nil }