yjp 1 éve
szülő
commit
11e5b76b21
2 módosított fájl, 110 hozzáadás és 0 törlés
  1. 36 0
      options.go
  2. 74 0
      sdk.go

+ 36 - 0
options.go

@@ -0,0 +1,36 @@
+package ds_sdk
+
+import "time"
+
+type DataSource struct {
+	Name string
+	Type string
+	Spec string
+}
+
+type Options struct {
+	// 必传
+	token     string
+	baseUrl   string
+	namespace string
+
+	// 选传
+	timeout       time.Duration
+	dataSourceMap map[string]DataSource
+}
+
+type Option func(opts *Options)
+
+func WithTimeout(timeout time.Duration) Option {
+	return func(opts *Options) {
+		opts.timeout = timeout
+	}
+}
+
+func WithDataSource(dataSources []DataSource) Option {
+	return func(opts *Options) {
+		for _, dataSource := range dataSources {
+			opts.dataSourceMap[dataSource.Name] = dataSource
+		}
+	}
+}

+ 74 - 0
sdk.go

@@ -0,0 +1,74 @@
+package ds_sdk
+
+import (
+	"git.sxidc.com/service-supports/ds-sdk/client"
+)
+
+var sdkInstance *SDK
+
+func InitInstance(token string, baseUrl string, namespace string, opts ...Option) error {
+	sdk, err := New(token, baseUrl, namespace, opts...)
+	if err != nil {
+		return err
+	}
+
+	sdkInstance = sdk
+
+	return nil
+}
+
+func GetInstance() *SDK {
+	return sdkInstance
+}
+
+type SDK struct {
+	options *Options
+	client  *client.Client
+}
+
+func New(token string, baseUrl string, namespace string, opts ...Option) (*SDK, error) {
+	options := &Options{
+		token:     token,
+		baseUrl:   baseUrl,
+		namespace: namespace,
+	}
+
+	for _, opt := range opts {
+		opt(options)
+	}
+
+	c := client.New(options.timeout)
+
+	namespaceInfos, err := c.GetNamespaces(token, baseUrl, namespace)
+	if err != nil {
+		return nil, err
+	}
+
+	if namespaceInfos == nil || len(namespaceInfos) == 0 {
+		err := c.CreateNamespace(token, baseUrl, namespace)
+		if err != nil {
+			return nil, err
+		}
+	}
+
+	for _, dataSourceOption := range options.dataSourceMap {
+		dataSourceInfos, err := c.GetDataSources(token, baseUrl, namespace,
+			dataSourceOption.Name, dataSourceOption.Type)
+		if err != nil {
+			return nil, err
+		}
+
+		if dataSourceInfos == nil || len(dataSourceInfos) == 0 {
+			err := c.CreateDataSource(token, baseUrl, namespace,
+				dataSourceOption.Name, dataSourceOption.Type, dataSourceOption.Spec)
+			if err != nil {
+				return nil, err
+			}
+		}
+	}
+
+	return &SDK{
+		options: options,
+		client:  c,
+	}, nil
+}