package sdk import ( "git.sxidc.com/service-supports/ds-sdk/client" "git.sxidc.com/service-supports/ds-sdk/db_operations" "strings" ) var sdkInstance *SDK func GetInstance() *SDK { return sdkInstance } func InitInstance(token string, baseUrl string, namespace string, dataSource *DataSourceOption, opts ...Option) error { if sdkInstance != nil { return nil } options := &Options{ token: token, baseUrl: baseUrl, namespace: namespace, dataSource: dataSource, } for _, opt := range opts { opt(options) } c := client.New(options.timeout) err := initNamespace(c, options) if err != nil { return err } err = initDataSource(c, options) if err != nil { return err } dbOperations, err := initDBOperations(options.dataSource.Spec) if err != nil { return err } sdkInstance = &SDK{ options: options, client: c, dbOperations: dbOperations, } return nil } func initNamespace(c *client.Client, options *Options) error { namespaceInfos, err := c.GetNamespaces(options.token, options.baseUrl, options.namespace, 1, 1) if err != nil { return err } if namespaceInfos != nil && len(namespaceInfos) != 0 { return nil } err = c.CreateNamespace(options.token, options.baseUrl, options.namespace) if err != nil && !strings.Contains(err.Error(), "已存在") { return err } return nil } func initDataSource(c *client.Client, options *Options) error { dataSourceInfos, err := c.GetDataSources(options.token, options.baseUrl, options.namespace, options.dataSource.Name, options.dataSource.Type, 1, 1) if err != nil { return err } if dataSourceInfos != nil && len(dataSourceInfos) != 0 { return nil } err = c.CreateDataSource(options.token, options.baseUrl, options.namespace, options.dataSource.Name, options.dataSource.Type, options.dataSource.Spec) if err != nil && !strings.Contains(err.Error(), "已存在") { return err } return nil } func initDBOperations(dataSourceSpec map[string]any) (db_operations.DBOperations, error) { return db_operations.NewOperationsFromMap(dataSourceSpec) } func DestroyInstance() error { if sdkInstance == nil { return nil } return db_operations.DestroyOperation(sdkInstance.dbOperations.(*db_operations.Operations)) }