sdk.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package ds_sdk
  2. import (
  3. "git.sxidc.com/service-supports/ds-sdk/client"
  4. "strings"
  5. )
  6. var sdkInstance *SDK
  7. func InitInstance(token string, baseUrl string, namespace string, opts ...Option) error {
  8. sdk, err := New(token, baseUrl, namespace, opts...)
  9. if err != nil {
  10. return err
  11. }
  12. sdkInstance = sdk
  13. return nil
  14. }
  15. func GetInstance() *SDK {
  16. return sdkInstance
  17. }
  18. type SDK struct {
  19. options *Options
  20. client *client.Client
  21. }
  22. func New(token string, baseUrl string, namespace string, opts ...Option) (*SDK, error) {
  23. options := &Options{
  24. token: token,
  25. baseUrl: baseUrl,
  26. namespace: namespace,
  27. }
  28. for _, opt := range opts {
  29. opt(options)
  30. }
  31. c := client.New(options.timeout)
  32. namespaceInfos, err := c.GetNamespaces(token, baseUrl, namespace, 1, 1)
  33. if err != nil {
  34. return nil, err
  35. }
  36. if namespaceInfos == nil || len(namespaceInfos) == 0 {
  37. err := c.CreateNamespace(token, baseUrl, namespace)
  38. if err != nil && !strings.Contains(err.Error(), "已存在") {
  39. return nil, err
  40. }
  41. }
  42. for _, dataSourceOption := range options.dataSourceMap {
  43. dataSourceInfos, err := c.GetDataSources(token, baseUrl, namespace,
  44. dataSourceOption.Name, dataSourceOption.Type, 1, 1)
  45. if err != nil {
  46. return nil, err
  47. }
  48. if dataSourceInfos == nil || len(dataSourceInfos) == 0 {
  49. err := c.CreateDataSource(token, baseUrl, namespace,
  50. dataSourceOption.Name, dataSourceOption.Type, dataSourceOption.Spec)
  51. if err != nil && !strings.Contains(err.Error(), "已存在") {
  52. return nil, err
  53. }
  54. }
  55. }
  56. return &SDK{
  57. options: options,
  58. client: c,
  59. }, nil
  60. }