sdk.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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, dataSource *DataSource, opts ...Option) error {
  8. if sdkInstance == nil {
  9. sdk, err := newSDK(token, baseUrl, namespace, dataSource, opts...)
  10. if err != nil {
  11. return err
  12. }
  13. sdkInstance = sdk
  14. }
  15. return nil
  16. }
  17. func GetInstance() *SDK {
  18. return sdkInstance
  19. }
  20. type SDK struct {
  21. options *Options
  22. client *client.Client
  23. }
  24. func newSDK(token string, baseUrl string, namespace string, dataSource *DataSource, opts ...Option) (*SDK, error) {
  25. options := &Options{
  26. token: token,
  27. baseUrl: baseUrl,
  28. namespace: namespace,
  29. dataSource: dataSource,
  30. }
  31. for _, opt := range opts {
  32. opt(options)
  33. }
  34. c := client.New(options.timeout)
  35. namespaceInfos, err := c.GetNamespaces(token, baseUrl, namespace, 1, 1)
  36. if err != nil {
  37. return nil, err
  38. }
  39. if namespaceInfos == nil || len(namespaceInfos) == 0 {
  40. err := c.CreateNamespace(token, baseUrl, namespace)
  41. if err != nil && !strings.Contains(err.Error(), "已存在") {
  42. return nil, err
  43. }
  44. }
  45. dataSourceInfos, err := c.GetDataSources(token, baseUrl, namespace,
  46. options.dataSource.Name, options.dataSource.Type, 1, 1)
  47. if err != nil {
  48. return nil, err
  49. }
  50. if dataSourceInfos == nil || len(dataSourceInfos) == 0 {
  51. err := c.CreateDataSource(token, baseUrl, namespace,
  52. options.dataSource.Name, options.dataSource.Type, options.dataSource.Spec)
  53. if err != nil && !strings.Contains(err.Error(), "已存在") {
  54. return nil, err
  55. }
  56. }
  57. return &SDK{
  58. options: options,
  59. client: c,
  60. }, nil
  61. }